VBAのきほん 〜変数・演算・データ型〜

こないだ、再度VBAを学び直すためノンプロ研のVBA初級講座に申し込んだ。
まず最初に私のVBA歴は・・
VisualBasic歴が6年
そのうちの2年はVBAも触っていた(主にAccessVBA。ExcelVBAはたまに。)
それからプログラミングの仕事から足を洗って(言い方w)15年ほど。

そして今の会社でまたプログラミングの仕事に足を踏み入れることになったのだが、
時代はRPA(自動化)、それでVBAがまた重宝がられるようになってきているらしい。

ただ、そうは言ってもVBAなんぞすっかり忘れており、ネットに溢れている情報をコピペの繰り返しだった。(それなのに会社の人にはVBAできますって言ってしまった私・・あかんやろorz)
それで、これではいけない。もっとちゃんと基礎から学び直したい。
そして確かな力を身につけて自信を持って仕事がしたい・・・と思っていた。

ちょうどそんな時に、たまたまノンプロ研(プランノーツのタカハシさん率いるプログラミングコミュニティ。VBA・GAS・Pythonを中心に最近ではノーコードアプリやデータアナリティクス、電子工作などにも分野を広げている)でVBA初級講座をやるという連絡が。
それでこれだ!と思い申し込んだ。

今回から、そのVBA講座で学んだことのアウトプットとして記事を書いていこうと思う。

まず講座では、講座が始まる前に予習としてVBE(VisualBasicEditor)の設定方法などを学ぶ。
実はこのVBE、色々と設定した方がプログラミングの精度も上がるというのを知らなかった私。

https://tonari-it.com/excel-vba-vbe-syntax-highlight/

なので今回の講座も色々と新発見がありそう。
楽しみ。

VBEでのプログラミング

前置きが長くなったが、そろそろ本題に入りたいと思う。
まずVBEでのプログラミングについて。

VBEでプログラミングをするためには色々なコマンドを覚えておくとかなりスピードアップするらしい。
そのコマンドを以下にまとめる。

VBEでのコーディングで覚えておくべきコマンド

新規のブックを作成Ctrl+N
VBE起動Alt+F11
標準モジュールを挿入Alt→I→M
コードウィンドウを開くF7
イミディエイトウィンドウを開くCtrl+G

コーディングの注意点

文字列→ダブルクォーテーションで囲む
Ex*

Debug.print "Hello world"

↑Hello worldを文字列として出力する

数値はそのまま出力する
Ex*

Debug.print 123

↑123が数値として出力される

リテラルを知っておこう

では次に、VBAで扱う式で出てくる「リテラル」とは何か。
この「リテラル」とは、「その値自体を表す式」いわば「定められた記法」のことである。
例えば”Hello!Good-morning”といった文字列、TrueやFalseを示すBoolean型がそうである。

このリテラルは他の要素とともに式の構成要素となるが、リテラル単位であったとしても値を生成するものなので式ということができるのである。

ここまではVBAを始めるにあたっての基本のキである。
では次はデータ型にいってみる。

データ型の様々な種類

データ型は簡単に言えば、その単語が「テキスト型」なのか「日付型」なのか「数値型」なのか・・など、どんな値なのかを示すものである。

日付型はハッシュタグで表せる

ここで余談だが、私は日付型を##で囲んで表せることを知らなかった。
要はこういうことである。

Dim test_date as date '日付型

   test_date = #6/7/2020#
   debug.print test_date

このように、##で囲めばデバッグ時にはちゃんと「2020/06/07」と表示されるのである。
これは知らなかったなぁ!

余談*パーフェクトVBAについて

その他、データ型に関してはそこら辺のブログでも散々書かれていることなので、ここでは省く。
その代わりノンプロ研の記事を貼り付けておくので、これを見て勉強してほしいと思う。

https://tonari-it.com/vba-programming-variable/

っと、ここまではノンプロ研の講座で学んだことのまとめを書いてみた。
次からは「パーフェクトVBA」で学んだことをまとめていく。

まず「パーフェクトVBA」は、ノンプロ研タカハシさんが書いた本である。
VBAを極めた本であり、どこを見てもこんなによく纏まっている本はないのではないかと言えるくらいすごい本である。そして分厚い!重い!凶器になりそうである(冗)

以下、パーフェクトVBAで勉強になったことをまとめていく。

数値型

10進数の数値はコード内でそのまま記述することができる。また、それがリテラルとなる。
ちなみにVBAでは16進数の記述も可能で、「&H」に続けて記述することで表現できる。

  • 整数を扱う・・・Long
  • 実数を扱う・・・Double
  • 通貨を扱う・・・Currency(特に正確性が求められる場合)

実数の計算について

コンピューターは数値を2進数で扱っているため、小数点以下の数値を正しく表現することができないという欠点がある
そのため、実数を近似値で表現している

例*
0.7=0.1+0・6

これをBoolean型(True/False)で真偽を確かめると、なんと「False」になる。
これはコンピューターは小数点以下の数値を近似値でしか表現できないからである。
また、浮動小数点型やDouble型を使って精度を上げても誤差が0になることはない。
ではどうしたらいいのか?というと、通貨型(Currency)を使うのである。
つまり、通過型を使って一旦整数にし、その後再度計算する。
すると、結果は整数になりコンピューターは正確に表現しやすくなるということである。

バリアント型

バリアント型(variant)は色々な値に対応できる万能データ型である。
他のプログラミング言語ではこのような、何にでも対応するデータ型が存在することが少ないためバリアント型はVBAの大きな特徴の1つであると言える。

ただし、注意したいのは、「バリアント型を多用するとその変数の値が何かわかりづらくなる」そのために予期しないエラーが出やすくなるということである。

ちなみに、variant型で使う「Null」「Empty」及びエラー値についてまとめると、

  • Empty・・・バリアント型の末初期状態を表す
  • Null・・・有効なデータでないことを示す
  • EmptyもNullもそれ自体がそれぞれのリテラル値となる

演算子

最後に演算子だが、演算子とは「+」「ー」「✖️」「➗」などを表す。
そしてVBAでは以下の演算子が4つ用意されているので覚えておくといい。

覚えておきたい演算子の種類は4つ

  • 算術演算子・・・数字計算を行うための演算子
  • 比較演算子・・・比較を行うための演算子
  • 連結演算子・・・文字列を連結するための演算子
  • 論理演算子・・・論理演算を行うための演算子
  • 代入演算子・・・値を変数に代入させる演算子

算術演算子での注意点

この中の「算術演算子」で注意したい点がある。
それは以下の通り。これは気を付けてやりたい。

single型とLong型の組み合わせの時のみ評価型のデータ型が特別にDouble型になる
日付型同士の減算の場合、結果はDouble型になる

まとめ

ここまでで、ざっとVBAの入り口についてまとめた。

ざっくりまとめると、以下の通りとなる。

variant型の多用は避ける
異なるデータ型同士で演算しないように気を付ける
必ず型宣言文字を使って型を特定させる
小数点以下の数値の計算はなるべくCurrency型を使う
常にDebug.printで結果を確かめながらコーディングすると良い

今後VBAの勉強を進めていくに当たって、この5点は気を付けながらやっていきたい。

それでは、次は制御構文にいってみる。

参考サイト

いつも隣にITのお仕事

https://tonari-it.com/

いつもありがとうございます。
皆様もぜひ!