今回はExcel VBAの入門として、以下の基本的な処理について紹介します。
①変数宣言
②if文(条件分岐)
③for文(繰り返し)
④型変換(キャスト)
⑤セル指定
⑥メッセージボックスの表示
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub test() 'Excelの画面更新を停止(→処理を早くさせる) Application.ScreenUpdating = False '変数宣言 Dim i As Integer Dim gokei As Integer Dim syutoku As Integer Dim s As String '繰り返し For i = 1 To 10 'iが奇数の時のみ処理を通る If i Mod 2 = 1 Then s = "A" + CStr(i) syutoku = Range(s) gokei = gokei + syutoku End If Next 'メッセージボックスで合計を表示する。 MsgBox gokei End Sub |
ExcelのA1からA10のセルのうち、A1,A3,A5,A7,A9のセルの値の合計値を表示するコードです。
以下の画像の場合、100+102+104+106+108の計算をするということになります。
変数宣言
「この変数を使います!」という感じで、数字や値を格納するために変数を宣言します。
変数宣言の方法は、以下の通りです。
1 |
Dim (変数名) As (変数の型) |
サンプルも同じようにつけています↓
1 2 3 4 5 |
'変数宣言 Dim i As Integer Dim gokei As Integer Dim syutoku As Integer Dim s As String |
Dim i As Integerの場合、変数名はi、変数の型がIntegerとなります。
そのため、gokei も syutoku も変数の型はIntegerになります。
Dim s As Stringの場合、変数名はs、変数の型はStringになります。
変数の型とは何なのか?Integerとは?Stringとは?
説明していきます。
まず、変数の型とは、変数にどのような値を入れるのかを指定するものです。
変数は、文字や数値など様々な種類の値を入れることができます。
例えば、
ある変数を掛け算で2倍にさせる場合、その変数が数値しか入らない場合、2倍できます。
その一方、その変数が文字しか入らない場合、2倍できません。なぜならその変数を数値として見ていないからです。
Integerは、-32,768 ~ 32,767 の整数を入れることができる型。
Stringは、文字列を入れることができる型になります。
For ~ Next (繰り返し)
同じ処理を繰り返しさせたい場合、同じ処理を何度も書くのは面倒なので、For文を使います。
1 2 3 |
For i = (整数1) To (整数2) 繰り返したい処理 Next |
何回処理を繰り返すのか。それは、(整数2) – (整数1) + 1回だけ、処理を繰り返します。
サンプルを例とすると、
For i = 1 To 10 なので、10 – 1 + 1 = 10回処理を繰り返していることになります。
if ~ End if (条件分岐)
「この場合は、処理をしてほしくない」というときは、if文を使って条件分岐をさせましょう。
1 2 3 |
If (条件式) Then (条件式)を満たしているときに通る処理 End If |
サンプルでは、iが奇数の時に通る処理を書いています。
1 2 3 4 5 6 |
'iが奇数の時のみ処理を通る If i Mod 2 = 1 Then (処理) End If |
If i Mod 2 = 1 Then は、「iを2で割った時の余りが1のときに」という意味です。
Modは、割った時の余りを調べるのに使います。
奇数は、任意の整数を2で割った時の余りが1になる整数なので、上記のように書いています。
型変換(キャスト)
Integerのように、数値が入っている変数を途中で文字列の型として見るということができます。
サンプルでは、以下のように使っています。
1 |
s = "A" + CStr(i) |
sはstring型、iはInteger型です。
型が異なっているので、この処理をするのはできないのでは?と思われますが、
これを文字列にするために、CStr(i)で、iを一時的に、文字列として扱っています。
一方、CIntのように、文字列をIntegerにする型変換もあります。
指定したセルにある値を取得する(Range)
ここのセルの値を取得したい場合は、Rangeを使います。
1 |
(変数名) = Range("取得したいセルの箇所") |
サンプルでは、syutoku = Range(“s”)と書いています。
i = 1の時、sには、”A1″という値が入っているので、A1セルの値を取得しています。
変数を使わずとも、syutoku = Range(“A1”)で値を取得できます。
メッセージボックス
1 |
MsgBox (メッセージボックスに表示したい値) |
(メッセージボックスに表示したい値)は変数のほか、文字列も可能です。
その他
1 2 |
'Excelの画面更新を停止(→処理を早くさせる) Application.ScreenUpdating = False |
VBAを実行すると、VBAに書いた内容を画面に表示しながら実行していっています。よく見ると。
しかし、もっと早く処理をするためには、VBAに書いた内容を画面に表示させない方が早いです。
処理速度を上げるために、Excelの画面更新を停止することが有効です。
長いコードを書く際には上記の1文を入れておくことをお勧めします。