VBAの基本構文で、マクロを作る 102

変数 とは Fom114

変数とは、文字列や数値などの変化する値を、一時的にメモリ上に格納する箱のようなものです。
また、変数には必ず固有の名前が必要になります。

変数名を付ける際の注意点

●文字、数値、アンダースコア(_)が使用できる。
●先頭は文字でなければならない。
●記号やスペースは使用できない。
●長さは半角で255文字以内にする。
●Excelの関数、ステートメント、メソッドと同じ名前を使うことは出来ない。

変数の宣言

変数を使用する場合は、あらかじめプログラム内で宣言を行います。
宣言をしなくても変数を使用することは出来ますが、変数名としようするデータの種類を宣言しておけばプロシージャの記述がわかり易くなり、無駄なメモリを浪費しなくて済みます。

Dimステートメント

変数を宣言し、メモリ領域を割り当てます。
  構文
  Dim 変数名 As データ型

Option Explicit ステートメント

プロシージャが複雑になるにつれ、どうしてもプログラミングミスは増加します。しかし、変数名のスペルミスのようなケアレスミスで頭を悩ませるのは賢いことではありません。
そこで、モジュールの先頭には、Option Explistステートメントを記述することを心がけて下さい。

モジュールの先頭(モジュール宣言セクション「Generral」)にOption Explicitステートメントを記述すると、そのモジュール内では「Dimステートメントで宣言した変数」以外の用語を使うことができなくなります。

この宣言セッション内で宣言された変数は、そのモジュールの全てのプロシージャ内で使用するこtが出来ます。

●変数を全てのモジュールのプロシージャで使用するためには、Dimステートメントではなく、Publicステートメントを、宣言セクション内に宣言して下さい。

public 変数 as データ型

VBエディタ「ツール」「オプション」から変数の宣言を強制する設定を行えます。

変数の使用

「Test」プログラム プログラムの意味
Sub test()
  Dim a  As  Integer
     Dim b  As  Integer
     Dim c  As  Integer
     a = 10
     b = 6
     c = a * b
     Msgbox c
  End Sub

変数aを宣言(整数型-32,768〜32767の数値を扱う)
変数aを宣言
変数aを宣言
10を変数aに代入
6を変数bに代入
「a*b」の結果を変数cに代入

メッセージボックスに変数cの値を表示

ステートメントで使用する「=」は、「代入する」という意味になります。

複数の変数の宣言

複数の変数を宣言するときは、複数行に分割して記述する方法のほかに、カンマで区切って1行で記述する方法もあります。

・複数行で記述 ・1行で記述する
Dim a  As  Integer
Dim b  As  Integer
Dim c  As  Integer
Dim a  As  Integer,b  As  Integer,c  As  Integer
 

算術演算子

算術演算子 意味
+ 2つの数値の和を求めます。 X + Y
- 2つの数値の差を求めます。 X - Y
* 2つの数値の積を求めます。 X * Y
/ 2つの数値の商を計算して結果を浮動小数点で返します。 X / Y
2つの数値の商を計算して結果を整数で返します。 X ¥ Y
数値のべき乗を求めます。 X ^ Y
Mod 2つの数値を除算しその剰余を返します。 X Mod Y

データ型

データ型 使用メモリ 値の範囲
バイト型(Byte) 1バイト 0〜255の数値を扱う
ブール型(Boolean) 2バイト 真(True)又は偽(False)の値を扱う
整数型(Integer) 2バイト -32,768〜32767の数値を扱う
長整数型(Long) 2バイト -2,147,483,648〜2,147,483,647の数値を扱う
通貨型(Currency) 8バイト 通貨を扱う場合に使用
日付型(Date) 8バイト 日付と時刻を扱う場合に使用
文字列型(String) 10バイト+文字列の長さ 文字列を扱う場合に使用
オブジェクト型(Object) 4バイト オブジェクトを扱う場合に使用
バリアント型(Variant) 16バイト(数値)
22バイト+文字列の長さ(文字列)
あらゆるデータ型に対応
変数で型を指定しない場合に、認識されるデータ型
単精度浮動小数点数型(Single)
4バイト 小数点を含む数値を扱う
倍精度浮動小数点数型 8バイト 単精度浮動小数点数型よりも大きな桁の小数点を含む数値を扱う。

SETステートメント

データ型に「オブジェクト型」を指定すると、その変数にはSETステートメントを使用して、オブジェクトの参照を格納できます。

<例>下のサンプル例の場合
データ型に「オブジェクト型」とは(As Worksheet) 、その変数とは(mywsheet)のこと

Sub オブジェクト変数()
Dim mywsheet As Worksheet
Set mywsheet = Workbooks("test.xls").Worksheets("sheet1")
mywsheet.Range("A1:C5") = "テスト"
End Sub

この宣言により、「mywsheet」はオブジェクト変数になります。
Setステートメントを使って変数「mywsheet」に「Workbooks("test.xls").Worksheets("sheet1")」への参照を代入しています。

左の画像が実行結果です。
●オブジェクトの参照とは?
オブジェクト変数に代入されるのは、文字列ではありません。
オブジェクト変数には「オブジェクトそのもの」が代入されると考えて差し支えありません。
上記の例では、「Workbooks("test.xls").Worksheets("sheet1")」というオブジェクトを、SETステートメントを使うことによって、これ以降「mywsheet」というオブジェクト変数が、「Workbooks("test.xls").Worksheets("sheet1")」に代わって使用することが出来るようになるのです。

定数 とは

定数とは特定の数値や文字列を格納するメモリの箱のことを言います。
変数はプログラムの実行中に値が変化していくのに対し定数は、変更したり新しい値を代入することは出来ません。

たとえば、消費税の計算でプロシージャ内に「0.05」という数値が頻繁に出てくる場合、税率が改正されるとプロシージャ内に記述されている1.05を全て変更する必要がありますが、定数を宣言している場合は、宣言ステートメント1箇所だけの修正で済みます。

■Constステートメント

-----------------------------------------
構文
   Const  定数名  [As  データ型] = 値
-----------------------------------------

<例>  消費税を求める

 Sub 消費税()
        Const  zei  As  Currency =0.05
       Range("A1").Value = 500*zei
       Range("B1").Value = 500*(1 + zei)
  End Sub     

引数とは  108

「引数」とは、何らかの動作を行う、あるいは処理結果を求める際に、より詳細な条件を設定する為の要素です。
<例>
目の前に花瓶があり、この花瓶を動かします。これをVBA風に説明すると

   花瓶 . 移動する。

しかし、これではどこに動かしたらいいのか解りません。
「どこに動かすか」という条件を加えると

   花瓶 . 移動する。 場所:=玄関

ここでは架空の「移動する」というメソッドがあり、「場所」が引数です。
引数の条件を設定する為に「:=」という特別な演算記号を用いています。
※「・・・移動する。 場所・・・」移動すると場所の間には、半角スペースが入ります。

<例>
Worksheets.Add After:=Worksheets(2)
「After:=Worksheets(2)」の引数が、「2番目のシートの右に」という指示をAddメソッドに与えている。

制御構造  Fom120

制御構造とは、
マクロ記録により一連の操作は自動的に処理することが出来ますが、VBAではセルの値や条件に応じて処理をより柔軟に制御できます。

条件によって処理を分岐するステートメント(詳しい解説はこちらを参照して下さい。

If 〜 Then

<例>

Sub テスト01()
If Range("A1") = 50 Then
Range("A1").Interior.ColorIndex = 6
Else
Exit Sub
End If

もし、セル「A1」の数値が50だったら、
セル「A1」を黄色で塗りつぶす
それ以外の場合は、
処理を終了します。

Select 〜 Case(詳しい解説はこちらを参照してください。)

<例>

Sub テスト02()
Select Case Range("A1")
Case Is > 80
Range("B1").Value = "上"
Case Is > 60
Range("B1").Value = "中"
Case Is > 40
Range("B1").Value = "下"
Case Else
Range("B1").Value = "規格外"
End Select
End Sub

「A1」の値が
80以上の場合は、
「B1」に「上」を代入し
60以上の場合は、
「B1」に「中」を代入し
40以上の場合は、
「B1」に「下」を代入し
それ以外の場合は、
「B1」に「規格外」と表示する

処理をループするステートメント

For 〜 Next(詳しい解説はこちらを参照してください。)

<例01>

サンプルプロシージャ 実行結果 解説
Sub テスト03()
Dim i As Integer
For i = 1 To 5
Cells(i, 1) = "テスト"
Next i
End Sub
変数「i」は、1〜5まで繰り返します。
その結果、"テスト"の文字を
cells(1,1)
cells(2,1)
cells(3,1)
cells(4,1)
cells(5,1)
に代入します。

<例02>

サンプルプロシージャ 実行結果 解説
Sub テスト04()
Dim i As Integer
Dim j As Integer
For j = 1 To 3
For i = 1 To 5
Cells(i, j) = "テスト"
Next i
Next j
End Sub
変数「i」は、1〜5まで繰り返します。
変数「j」は、1〜3まで繰り返します。
その結果、"テスト"の文字を以下の順序でセルに入力します。

cells(1,1)
cells(2,1)
cells(3,1)
cells(4,1)
cells(5,1)
に代入します。
cells(1,2)
cells(2,2)
cells(3,2)
cells(4,2)
cells(5,2)
に代入します。
cells(1,3)
cells(2,3)
cells(3,3)
cells(4,3)
cells(5,3)
に代入します

Do 〜 Loop(詳しい解説はこちらを参照してください。)

サンプルプロシージャ 実行結果 解説
Sub テスト05()
Range("A1").Select

Do
ActiveCell.Font.ColorIndex = 3
ActiveCell.Offset(1).Select
Loop Until ActiveCell.Value = ""

End Sub
「A1」を選択する
アクティブセルのフォントの色を「赤」にする
1つ下のセルに移動する
セルの値が空白(””)になるまで繰り返して処理を行う。

演算子

条件式で使用する演算子は、下記のとうりです。

比較演算子
演算子 意味
等しい X = 10
より大きい X > 10
より小さい X < 10
>= 以上 X >= 10
<= 以下 X <= 10
<> 以外 X <> 10
論理演算子
演算子 意味
And 〜かつ〜 X >= 10 And X <=20
Or 〜または〜 X < = 10 Or X > = 20
&演算子
演算子 意味
文字列連結 ”今日は”&”休日”→”今日は休日”