• ベストアンサー

Excel にて変数の宣言の仕方

Excel2002を使用しています。 標準モジュール内で下記のように変数を宣言すると Dim i,k as long (例)kには、あるセルの値を取得します。10000 Keta=len(k) この結果、ketaには、「4」という結果になります。 10000なので、「5」が返らないといけないのですが、うまくいきません。 ところが、 Dim i ,k ,m as long このように変数kの後ろに他の変数(今回はm)を記載すると、 「5」という結果が返ってきます。 変数の宣言の仕方が間違っているのでしょうか? よろしくお願いいたします。 ちなみに、 Dim k as long としても、「4」の結果が返ってきました。 同じ行に他の記載をしないとうまくいかないようです。。。

質問者が選んだベストアンサー

  • ベストアンサー
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

Len関数は“文字列”の長さを返す関数です。 従って long 型の変数はその変数自体のサイズ(4バイト)が返されているものと思われます。 では long 型の変数の長さを返すにはどうしたらいいかというと、一旦文字列に変換しLen関数を使うことになります。 Keta=len(cstr(k)) また Dim i,k,m as long という書き方、これは実は i と k と m を long 型にするという意味ではありません。 i と k はバリアント型、m は long 型になります。 つまり、 Dim i Dim k Dim m as long という宣言と同じ意味になります。 バリアント型というのは(マニュアルを読んでもらうのが一番ですが)簡単に言えば、都合良く処理してくれる型です。 これがVBA(VB)の長所でもあり短所でもあります。 型を意識しないでプログラムが書けるため便利だけど、理解して使わないと余計なバグの原因となります。

yuuchan
質問者

補足

早速のご回答、ありがとうございます。 大変参考になりました!! それでは、複数で同じ型の宣言をする場合は Dim i as long, k as long ,m as long でよろしいのでしょうか?

その他の回答 (2)

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.3

#1です。 >それでは、複数で同じ型の宣言をする場合は >Dim i as long, k as long ,m as long >でよろしいのでしょうか? はい、そういうことです。 ただプログラムの見易さから言うと(プロの立場から言うと)、1行1行分けた方がいいと思います。 後ろにコメントも書けますし。 例えばこんな感じで。 Dim i as long ' 金額 Dim k as long ' 個数 Dim m as long ' 人数

yuuchan
質問者

お礼

丁寧にお答えいただきありがとうございました。 助かりました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Dim i,k, m as long などのように宣言した場合、 Dim i as long Dim k as long Dim m as long の意味ではなく Dim i as Variant Dim k as Variant Dim m as long の意味になります。 なので、全部をlong だとしたい場合は、全ての変数にas long が必要です。 Len 関数のヘルプを見て貰うとわかると思いますが、 Len 関数は、変数を保持するのに必要なメモリをバイト数で返します。 Long の場合エクセルでは4バイトなので4が返ります。(数値の長さではありません、長さが必要な場合は、文字列にしてやる必要があります) バリアントの場合、文字列として評価をしてその長さが返ります。

yuuchan
質問者

お礼

早速のご回答ありがとうございました。 勉強になりました。