和風スパゲティのレシピ

日本語でコーディングするExcelVBA

値をVariant型に変換する - CVar関数

値をVariant型に変換する、CVar関数の使い方を解説します。

基本形

CVar(変換したい値)

解説

CVar関数は渡された値をVariant型に変換します。

といってもVariant型は「今どの型が入っているか」をサブタイプとして持つため、

Debug.Print TypeName(CVar(1)) ' ← Integerを返します。

このようにTypeName関数で型をしらべてもVariantが返ってくるわけではなく、
今入っている値の型が表示され、各種計算もその型で行われます。


また、Variant型の変数が必要な(後で違う型が入る可能性がある)ときも、

Dim Varinat変数 As Variant
Variant変数 = 1000 ' ← ここではInteger
Variant変数 = "あいう" ' ← ここではString

これでVariant型変数は扱えますので、わざわざCVar関数をかます必要はありません。


ということで、本関数を使用することは相当特殊なケースと思います。

「組込み関数やライブラリにVariantを渡すとどんな動きになるんだろう?」
のように、仕様を調査したりといった用途がほとんどな気がします。

ブログを書くときのプロパティ挙動確認などではたまに使いますが、
実務で使ったことは一度もありません。


一応、自作クラスのメソッドをインスタンス生成即実行したい場合に、

Call VBA.CVar(New 自作クラス).自作メソッド

こんな風に書くことはできます。

※ New ○○に「.」を続けることができないので、
 無理やりVariantにしてから「.」をつなげたいという意図です。


しかしこれ、CVar関数だけでは実行できないようで、
VBA.CVarとやったら動きました。

CVar関数は値をVariantとして評価してるだけでVariant型を返しているわけではなく、
しかしVBA.CVarと書くことで明確にVariant型を返すようになるようです。


こんな使い方をする必要があるのかはなはだ不明ですが、
何かのヒントになれば幸いです。