かっきぃーの雑記帳

おもしろき こともなき世を おもしろく

とりあえず使えるエクセルVBAマクロ超入門 / VisualBasicの基本構文

Lesson2 これだけは覚えておく基本構文

マクロを作成する上で是非覚えておきたいのはデータの一時保管場所を示す「変数」、繰り返しができる「For文」と条件分岐ができる「If文」。これらは表現こそ違ってもどのプログラミング言語にも含まれている基本の基本です。ここではこれら基本の基本を紹介します。

 

データの一時保管場所 変数

データを一定期間記憶し利用できるようにするために、データに固有の名前を与えたものを変数といいます。変数にデータを代入したり、変数を参照することができますので、さまざまな計算したり、文字列を組み合わせたりといったことができます。

変数名の宣言

変数を利用するには、「変数名の宣言」が必要です。変数名の宣言はDimという構文を使い、「Dim (変数名) As (データ型)」という形で書きます。以下がその例。

Dim x1 as Variant

 変数名は任意の文字列を使うことができますが、「!」などの記号や他の構文として登録のある文字列は使えません。データ型は「整数型(Integer)」「文字列型(String)」「通貨型(Currency)」「あらゆる変数に対応するデータ型(Variant)」などがあります。As以降を省略するとVariant型とみなされます。

★覚えておくと便利 ~ 配列

通常、ひとつの変数にはひとつのデータしか対応できませんが、複数のデータを対応させることができると便利なことがあります。そんなときに使う変数を配列と呼びます。配列はx(1)、x(2)・・・というように文字列の後ろにカッコ内に整数を入れて表します。変数名の宣言は次のような1文になります。カッコ内には配列でつかう数を入力しておきます。

Dim x1 as Variant
Dim x2 as Variant
Dim x3 as Variant
Dim x4 as Variant
Dim x5 as Variant
Dim x6 as Variant
Dim x7 as Variant
Dim x8 as Variant
Dim x9 as Variant
Dim x10 as Variant
Dim x(10) as Variant

※10の文が1つの文で処理できます。

変数へのデータの代入と変数の参照

変数にデータを代入するには次のように書きます。数式のように取り扱うこともできます。

x1 = Range("A1")
x2 = Range("A1") * 2 + 5
Range("B1") = x1
Range("B2") = x2

イコールは数学では等号を示し、右辺と左辺で同じ値となりますが、プログラムの場合だと右辺のデータ、計算結果を左辺とするという意味になります。すなわち、1行目をみるとA1の値をx1としなさい。という命令になります。次のようなものもあります。

x1 = x1 + 1

数学的にはありえない数式ですが、プログラム的には、この計算式の前段階でのx1に対し、1を加えた値を新しいx1の値にするという意味になります。

文字列の足し算もできます。ただし、プラス(+)ではなくアンド(&)を使います。

x1 = "あいうえお"
x2 = "かきくけこ"
test1 = x1 & x2
Range("B1")=test1

 

スポンサーリンク

 

 

繰り返しができる For~Next文

For~Next文では、ForとNextにはさまれた部分を繰り返し処理することができます。For文では変数の初期値と最終値を指定し、Next文では変数の値を増加させるとともに、For文の位置までもどります。そして、変数の値が最終値となるまで繰り返し処理をします。

Sub maketable()  
For i = 0 To 9 (1)
Range("B2").Offset(i) = i (2)
Next i (3)
End Sub  

 これはFor~Next文の簡単な例です。変数iを0~9まで順番に変化させ、ForとNextにはさまれた(2)の処理を繰り返し行います。この繰り返しにより変化する変数iを利用して、(2)の部分の処理を行います。上記の例をみても数式に変数iが含まれています。この一連のマクロをFor~Next文を使わずに作成すると次のようになります。For~Next文の有効性が分かります。

Sub maketable1()
Range("B2").Offset(0) = 0
Range("B2").Offset(1) = 1
Range("B2").Offset(2) = 2
Range("B2").Offset(3) = 3
Range("B2").Offset(4) = 4
Range("B2").Offset(5) = 5
Range("B2").Offset(6) = 6
Range("B2").Offset(7) = 7
Range("B2").Offset(8) = 8
Range("B2").Offset(9) = 9
End Sub

2つのFor~Next文を組み合わせて使うこともできます。さきほどは列方向に数値を入力しましたが、今度は列方向に加え、行方向にも数値を入力し、表をつくってみます。

Sub maketable2()    
For i = 0 To 9   (1)
     For j = 0 To 9
     Range("B2").Offset(i, j) = i + j
     Next j
(2)  
Next i    
End Sub    

複雑な構文になってくるとNext文の記載する位置を間違えるなどのエラーも生じやすくなります。そのため、プログラムの左側に空欄を設け、ずらして書くと見やすくなります。

 

スポンサーリンク

 

 

条件分岐ができる If文

If文では条件設定ができます。たとえば、「aが100未満の場合は、xを1にしなさい」、という命令の場合は次のようになります。

If a<100 then x=1

このような「If (条件式) then (処理)」の形式が、最も基本的な構文になります。処理が複数の行にわたる場合は、次のように「then」で改行し、処理の最後に「End If」を記載します。

If a<100 then
   x=1
   y=x*2+1
End If

 条件式が複数ある場合は次のとおりになります。

If a < 100 Then
   x = 1
   y = x * 2 + 1
ElseIf a < 200 Then
   x = 100
   y = x * 2 + 1
End If

 aが100未満の場合は、一つ目の条件式(a<100)と二つ目の条件式(a<200)のどちらにも該当しますが、この場合は、先の条件式(この場合はa<100)が優先されます。ちなみに100<a<200というような挟み込む形式での指定はできません。また、3つ以上の条件式を利用する場合は、ElseIfの部分を追加すればOKです。

どの条件式にも該当しない際に処理をするには下記のようにElse文を利用します。

If a < 100 Then
   x = 1
   y = x * 2 + 1
ElseIf a <= 200 Then
   x = 100
   y = x * 2 + 1
Else
   x = 1000
   y = x * 2 + 1
End If

 

マクロ実行でエラーが発生。解決方法の見つけ方。

                9  10  11

とりあえず使えるエクセルVBAマクロ超入門(もくじ)

 

スポンサーリンク