【EXCEL VBA | 基礎コード】変数って何?

スポンサーリンク

変数

EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!

今回は、プログラミングをする上で避けては通れない"変数"について紹介します!

変数とは

"変数"について説明されているサイトは沢山あるので"データを保管する箱"みたいな説明はよくあると思います。

分かってる人からすると、まぁそんな感じだなと思うんですが、初心者のときにそう言われても分からないですよね。僕も分かりませんでした笑

次の図をご覧下さい。

左側は、メッセージボックスに「あいうえお」という文字列を表示させるプログラムです。

これまでのブログで説明しているのは、

Sub test()
    MsgBox "あいうえお"
End Sub

という書き方でしたね。

図のコードでは、"MsgBox"の引数の中が「a」になっていますが、これが"変数"です。

この「a」は、僕が勝手に命名した"変数"の名前です。「b」でも「c」でも構いません。※通常は意味のある命名をします。

Dim a As String

というコードがありますが、ここで"変数"を命名しています。そして次の行で、中身を登録しています。

a = "あいうえお"

このコードでパソコンの中に「a」という場所を作って、その中に「あいうえお」という中身を登録していると思って下さい。名前のついた箱に中身を入れてる感じですね。

VBAでは、このように

Dim ◯◯ As データ型

の形で"変数"の宣言をして場所を確保します。ちなみに、「データ型」の部分は入れるものによって変更する必要があります。次の表は、データ型の主要な一覧です。

指定文 型名 格納出来るデータの詳細
String 文字列型 文字列
Long 長整数型 -2,147,483,648~2,147,483,647の整数
Integer 整数型 -32,768~32,767の整数
Single 単精度浮動小数点数型 負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗)
Double 倍精度浮動小数点数型 負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗)
Boolean ブール型 TrueまたはFalse
Date 日付型 日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59
Object オブジェクト型 オブジェクト
Byte バイト型 0~255までの整数
Currency 通貨型 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の固定小数点数
Variant バリアント型 何でも入れられる

今回は、"あいうえお"の文字列なので「String」文字列型で指定しています。

データ型を省略すると、「Variant」バリアント型になります。最近は全部これで良いんじゃないか説もありますが、最初は型の意識をつけるためにもちゃんと指定した方が良いいんじゃないかと思います。

※他の言語だと、Dimじゃなくて違うものだったり、そもそもそんなのいらなかったりもします。型の指定もしないといけない言語としなくてもいい言語があります。

なんで変数が必要なのか

そもそも、何故こんなものが必要なんでしょうか?始めたばかりの方は実感出来ないと思いますが、逆にこれがないとプログラムかけません。。。

1.繰り返し使いたい

まずは、繰り返し使いたい場合です。

例えば、プログラムの中で同じ名前(「ひらちん」とする)を100回使いたい場合。変数を使わずに書くと次のようになりますね。

これ、を変数を使って書くと次のようになります。

Dim name As String

name = "ひらちん"

という風に、"name"という変数に、"ひらちん"という中身を入れてそれを再利用する。

まぁ、これだけ見たら「2行増えてるやん!」ってなりますが、

例えば、「名前を"ひらちん君"に変えたいなと思ったとしたらどうでしょう?

変数を使わずに書いたコードでは、100回の"ひらちん"を全て変更する必要が出てきますね。今回の場合では、連続で同じところにあるので変えようと思えば変えられるかもしれませんが、通常は長いプログラムの中でいろんなところに出現するので、どこのこの変数使ったのかも分からなくなってしまいます。

それが変数を使って書いた方法では、次の図のように、変数に代入する"ひらちん"を"ひらちん君"に変更するだけで、後で出てくる"name"の中身は全て変わります。

楽ちん且つミスを防ぐことが可能です!

2.中身が色々変わる場合

次に、中身が色々と変わる場合です。

"msgBox"で考えてみましょう!

Sub test()

    Dim aisatsu As String  '挨拶を入れるための変数
    
    ' 朝の挨拶
    aisatsu = "おはよう"
    MsgBox aisatsu

    ' 昼間の挨拶
    aisatsu = "こんにちは"
    MsgBox aisatsu

    ' 夜の挨拶
    aisatsu = "こんばんは"
    MsgBox aisatsu
  
End Sub

このように"変数"はプログラムの途中で別のものに入れ替えることができます。

実行すると次のようになります。

同じ"MsgBox aisatsu"のコードでも、中身が変化していますね。

上のコードのようなプログラムは実際は無いと思いますが、先に今は何時か?のようなプログラムで、時間によって"変数"の"aisatsu"の中身を変更しておき、そのあとmsgBoxで表示させるようなことはよくあります。

{}のプログラムはまだやってませんので日本語で書いていますが、このような使い方ができます。 ※if文とかを使います。

3.コードを短く簡潔に書く

プログラムを作っているとこんな処理が山程出てきますので、"変数"は避けては通れません!

"変数"には、文字列や数値さらには、オブジェクトも入れることができます。なので、シートの指定など繰り返し行う必要のあるコードを簡潔にわかりやすく書くことにも使います。

例えば、EXCELのシートを取得するときのことを考えてみます。

VBAのコードを記述しているブックの「Sheet1」のA1セルに"ひらちんの部屋"と入力するコードは次でした。

Sub test()

 ThisWorkbook.Sheets("Sheet1").Range("A1") = "ひらちんの部屋"

End Sub

シートを指定する部分は

ThisWorkbook.Sheets("Sheet1")

ですね。

これ、1回だけならまぁ良いですが、何回も出てくると結構書くのが鬱陶しくなります笑

なので、「Sheet1」を変数に入れて再利用しましょう。

Sub test()

  Dim sheet As Worksheet
  Set sheet = ThisWorkbook.Sheets("Sheet1")
  
  sheet.Range("A1") = "ひらちんの部屋"

End Sub

先程の一覧には入れてないですが、ワークシート型は「Worksheet」で指定します。

そして2行目、ここが注意ポイントですが、オブジェクトを代入するときは変数の前に"Set"とつける必要があります。

面倒です。忘れます。でも決まりなので付けて下さい笑

このようにすることで、それ以降は、「ThisWorkbook.Sheets("Sheet1")」ではなく「sheet」だけで同じことになります。

何回も出てくる場合このように書ける

このように、長いコードを"変数"にまとめて入れてしまうことでコードを短く簡潔に書くことができます。

プログラムを作っているとこんな処理が山程出てきますので、"変数"は避けては通れません!

まとめ

今回は、"変数"について紹介しました。この変数を上手く使うことで色々な処理を書くことが出来るようになります!当たり前に出てきますのでしっかりと理解しておいてくださいね^_^