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

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

初心者のためのExcel(エクセル)マクロVBA入門-プログラミングの基礎5~データ型と演算子

データ型とは変数についた属性

今回はデータ型と演算子についてです。制御構文に行く前にこれだけはちょっと押さえておきましょう。さて、前回ちょこっとだけ触れたデータ型についてですね。データ型とは文字通りデータの型(タイプ)のことです。変数にいろいろとタイプを付けることができます。データ型を付けることで変数の用途を明確にすることができます。

  • 文字列型(String)
  • 長整数型(Long)
  • 短整数型(Integer)
  • 論理型(Boolean)
  • オブジェクト型(Date、WorkSheet、etc…)
  • 汎用型(Variant)

なんかがあります。文字列型は文字を扱いますし、長整数型は整数を扱いますし、
Integer型も整数を扱います(扱う数字の範囲が違います)
それぞれのデータ型には特徴があり、場面場面で使い分けましょう。
例えば、プログラムの中で文字を扱いたければStringですし、数値として扱い
たければLongやIntger、または小数を扱いたいときにはDoubleなんてものもあります。
コンピュータ上で色々な値扱うためにもこのデータ型は初めは面倒かもしれませんが、
意外とありがたいものなんです。

変数とデータ型はセットで宣言する

前回使った、命令文に登場してもらいます。

Dim name As String

これで、String型のnameという名前の変数(箱)を作ります。という意味になりますね。String型は文字列型ですのでこの変数には文字列が入ることになります。では、このnameに数字を入れたらどうなるでしょうか?

Public Sub sample()
    Dim name As String
    
    name = 124
    
    MsgBox name
    
End Sub

実行すればわかりますが、124という文字がメッセージボックスに表示されます。じゃあ文字列だけど計算してみたらどうでしょうか?

Public Sub sample()
    Dim name As String
    
    name = 124
    
    name = name + 12
    
    MsgBox name
    
End Sub

これも実行すればわかりますが、136という文字がメッセージボックスに表示されます。あれ?文字列を扱うはずなのに計算ができました。これはVBAのメリットでもデメリットでもあるんですが、変数の型が決まっていても、入れたデータによって勝手に判断して動いてくれちゃうんです。これが、プログラミングの基礎さえわかればできちゃうよ。という所以でもあります。
しかし、できればこういうのはやめましょう。そもそもにわかりにくいですし、間違いが起こりやすくなってしまいます。私たちはExcelにも人間にとってもわかりやすい言葉で書いてあげるようにしましょう。

演算子は変数をつなぐ大事なもの

演算子っていうとすごく難しい感じがしますが、さっきから普通に使ってます。+とか=とかそういうやつです。プログラミング言語は言葉ですので、ちゃんとこういう記号にも名前があるので、一応知っておきましょう。きっと知らない記号も出てくるのでこれは覚えておくといいです。

代入演算子

  =のことです。変数に値を入れたりするのに使います。

算術演算子

  算術なので計算するときに使う演算子です。結構いろいろあります。

演算子 用途
^ 数値のべき乗を求める areaOfCircle = 3.14 * 5^2
* 数値の積を求める areaOfSqure = base * height
/ 数値の除算結果を浮動小数点で求める areaOfTriangle = base * height / 2
\ 数値の商を求める teamNo = totalNumber \ memberPerTeam
Mod 数値の剰余をもとめる benchwarmer = totalNumber Mod memberPerTeam
+ 数値の和を求める total = 100 + 200
- 数値の差を求める rest = 10000 - 4980

意外と余りを求める「Mod」なんてよく使うので覚えておくといいですね。

連結演算子

  文字列を連結(つなぐ)時に使います。

演算子 用途
+ 文字列の連結を行なう sentence = "こん" + "にちわ"
sentence = messageA + messageB
& 文字列の連結を行なう sentence = "こん" & "にちわ"
sentence = messageA & messageB

上記の例のように左右の文字列を連結した結果を返します。ただし、「+」の利用には注意が必要です。「+」は算術演算子としても用いられるため、左右が両方とも文字列でないと、連結演算子とみなされないことがあります。できるだけ&を使うようにしましょう。

比較演算子

  左右の変数、定数の比較を行なう際に用います。比較の結果が正しければTrueが、そうでなければFalseが返ります。

演算子 用途
= 左右の値が等しいかどうか If time = 15 Then
<> 左右の値が等しくないかどうか If inputted <> password Then
左辺が小さいかどうか If money < price Then
> 左辺が大きいかどうか If bobsHeight > mikesHeight Then
<= 左辺が右辺以下であるかどうか If bodyFat < 23 Then
>= 左辺が右辺以上であるかどうか If age >= 20 Then
Is 左右が同じオブジェクトを参照するか If a Is b Then
Like 左の文字列が右のパターンに合致するか If name Like "田中*" Then

上の例に書いた通り、比較演算子はIf文という次回やる制御構文の中で利用することがほとんどです。
Likeについてはちょっと説明が長くなると思うので、また折をみて書きたいと思います。

論理演算子

  「かつ」、「もしくは」等の論理演算を行ないます。

演算子 用途 詳細
And 論理積 A And B と記述した場合、A、BともTrueの時にTrueを返します。
Or 論理和 A Or B と記述した場合、AかBのどちらか一方でもTrueならTrueを返します。
Not 論理否定 Not A と記述した場合、AがFalseの場合、Trueを返します。
Xor 排他的論理和 A Xor B と記述した場合、「AがTrueでBがFalse」か「AがFalseでBがTrue」の場合にTrueを返します。
Imp 論理包含演算 (Not A) Or B と記述するのと同じです。
Eqv 論理等価演算 Not(A Xor B)と記述するのと同じです。

さて、たくさんありましたが、私も全部覚えているわけではありません。特に論理演算子とか、覚えているのはAndとOrくらいです。なぜか?必要なら調べればいいからですね。ここまでのことが分かって初めて、あれなんて書くのだっけ?ということがわかり始めて調べることができます。

今回はこれくらいで、次はいよいよ制御構文です。これがわかれば本格的なマクロ(プログラム)が書けるようになります!

かしこ