初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-変数の型

前々回くらいで、初心者が躓くところで変数の型で躓いていると書きました。そして今回は変数の型についてです。今回は最初に宣言します。

覚える型は3つだけ!(実質2つ)

これだけ。これだけ覚えて今回は終わりです。簡単だと思いますがかなり重要ですし、意外と間違いが起こりそしてエラーになりやすいのが型なのです。あくまで初心者の間はという意味です。他は使わない。という意味ではありません。

文字列型と整数型を覚えよう!

では3つをとりあえず教えます。

  • 文字列型 String
  • 長整数型 Long
  • 汎用型  Variant

以上!


というわけで今日はここまで!


かしこ


・・・
・・・
・・・

というわけにもいかないのと思うので、ちょいちょい説明します。

エクセルで扱うのは主に文字列と数値


エクセルマクロはエクセルを操作するのでエクセルで主に扱うデータや値というものを考えます。以前にやった成績表なら、点数や名前などがデータとして考えられますよね。文字列と数値です。ですのでまずは文字列を扱う変数の型であるStringを覚えてください。そしてもう一つが長整数型と呼ばれるLongです。長整数というくらいですか短整数もあります。Integer型というもので-32,768~32,767の整数を扱うものです。Longなら-2,147,483,648~2,147,483,647の整数になります。扱えるデータの幅がもうまるで違うので、最初はLongって書いとけばとりあえずOKです。


※上級者用のお話
変数を宣言すると通常は必ずそれ用にメモリを確保します。1~10までしか扱わないのにLongを使うのは?ということもあります。パフォーマンスを意識するのなら、適切な変数の型を宣言しましょう。

文字列を扱うのはもはやStringしかありませんので、文字列ならもうString!これ1本でOKです。

万能型のVariant


初心者の方はこのStringとLong以外、つまり整数でも文字列でもない場合ならVariantと宣言してください。それでOKです。ちょっと乱暴なんですけど、型でわからなくなるくらいなら、万能型を使いましょう。ということです。

万能型は仕様通りにしか動かない。


万能型のデメリットとしては一番は、意図したとおりに動かないことがある。ということです。万能型は最初に入れた値の型を自動で判定して、勝手にその型として解釈します。ですので、人としては数字で扱うつもりでも、エクセルとしては実は文字列で扱っていた。ということがあったりします。

詳しくは、http://officetanaka.net/Excel/vba/variable/03.htm

のコードを見て見ればいいよ。Office TANAKA大先生が分かりやすく教えてくれています。

ですが、だからと言ってやっぱり最初からVariantはダメなんか?という結論になりそうなんですがそうではありません。実は型っていうのは結構自然と覚えていくことなんです。

最初は万能型で後で直す!


これです。最初は型が分からなければVariantでいいんです。そして、そのまま使っていくうちに変数の型というのはおのずと決まっていきます。その時に、Variant型からきちんと固有の型へと「直せばいい」のです。こうやって、自然と型の指定を身に付けて行くようにしましょう。最初はだれでも初心者です。そのうち変数の型についてもだんだんとわかるようになってきます。そしていつかはVariantを卒業し、きちんと固有の型を使えるようになりましょう。


※上級者用
とはいえ、Varinatは便利です。特に配列とか。明示的にVariantでないといけない場合も中にはあります。参照型引数とか。

余裕があるならさらに3つ覚えましょう。


余裕があるなら後3つ

  • 真偽値型 Boolean:TrueかFlaseの2つしか持ちません。
  • 倍精度浮動小数点数型 Double:+と-の小数点がある数値を持ちます。
  • 日付型 Date:日付:西暦100年1月1日~西暦9999年12月31日と時刻を持ちます。

このあたりを覚えておけばばっちりです。特にBooleanとDateは結構頻繁に出てくると思います。Doubleは理系の大学生なら、おなじみになるのではないでしょうか?有効桁数が多すぎてSingleでは対応できないと思いますので。

最後にやっぱりオブジェクト型!(ロボ型)


そして最後にObject型です。まぁ要するにロボ型ですね。最初に変数の特徴を上げた時に実は言ってるんですが覚えてますでしょうか?

変数にはデータまたはオブジェクトを格納できる。


ということですね。つまり便利な箱変数にはロボまで入れておくことができるのです。素晴らしい・・・
どんなロボを入れていいかまだ分からない場合は単に

Dim robo As Objcet

としておけばいいです。ではエクセルのブックオブジェクト(ロボ)を入れたいな。と思ったら・・・

Dim roboWbk As WorkBook

と明示的にブックロボを指定してあげればいいのです。他にもシートロボならWorkSeet、範囲ロボならRangeとエクセルにあるオブジェクトなら大抵これで指定できます。


ここまで変数の型を使えれば完璧です。もちろんVariant型はこのオブジェクトにも対応していますが、オブジェクトを入れることがわかっていて、何を入れるか決まってない場合は最初は「Object」と書いておく方がいいと思います。その後で、他の変数と同じように直せばいいのです。


次回は、このオブジェクト変数にオブジェクトを格納する方法についてです。

え?代入式じゃないの?ちょっとだけ違います。


今日はここまで。


かしこ