前回
にて「マクロの記録」機能からマクロを作成する方法を解説した。
今回は、マクロのエディターであるVBEに直接コードを書き込んでマクロを作る方法を見ていく。
VBEの画面構成
まずマクロのエディターであるVBE(Visual Basic Editor)の画面を見ていく。
VBEの画面で主に用いるのは下記の3つの領域だ。
・コードウィンドウ
実際にコードを記述する領域。
・プロジェクトエクスプローラー
今PC上で開いているExcelブックに保存されているマクロを開いたり、新規にマクロを追加したりすることができる領域。
・イミディエイトウィンドウ
1行分のコードを入力し、実行できる領域。コードが正しく実行されるか確認する際に用いられる。
マクロを初めて作る際、コードウィンドウは上図のように最初はグレーアウトしているが、マクロの保存場所(モジュール)を作成すると編集できるようになる。
モジュールは下図のように、プロジェクトエクスプローラーの「VBAProject (マクロを追加したいExcelブック名)」の上で右クリックし、「挿入」⇒「標準モジュール」とクリックすると追加できる。
VBAProjectに標準モジュールが追加されると、下図のようにコードウィンドウにコードが書き込める状態になる。
コードの書き方
では実際にマクロを書いていこう。
まず、マクロの書き出しは下記のようになる。
Sub マクロ名()
マクロ本文
End Sub
先頭行に「Sub」と打ち込み、半角スペースを空けてマクロ名と半角()を打ち込む。
次の行からマクロの本文を入力し、最後の行は「End Sub」と打ち込む。
実際にVBEに打ち込むと下図のようになる。
上図にあるように、半角のクォーテーション「’」を先頭に置いて文字を打ち込むと、その文字はコメント扱いされる。
コメントはマクロの動作に影響を及ぼさないため、コードの補足説明やメモを書き込む際に有用である。
基本的な例
ここで実際にいくつかマクロの例を挙げていく。
今回は基礎となる変数の宣言、コメント、代入、計算、文字列の連結などに関するコードを中心に扱っていく。
(例1) 四則演算
まずは四則演算を実行し、その結果をシートに転記するマクロを見てみる。
Sub 四則演算()
Dim i As Long
i = 10
With Worksheets(1)
.Cells(1, 1).Value = i + 10
.Cells(2, 1).Value = i - 10
.Cells(3, 1).Value = i * 10
.Cells(4, 1).Value = i / 10
End With
End Sub
これは変数を用いた四則演算の結果を各セルに代入するマクロである。
これを実行すると、下図のように各セルに演算結果が代入される。
ここで各コードを詳しく見ていく。
Dim i As Long
⇒変数の種類(データ型)がLong(長整数型)の変数「i」を宣言するコード。
変数を宣言するコードは
Dim 変数 As 変数の種類(データ型)
と記述する。
宣言できる変数の種類は多岐に渡り、整数や小数といった数値だけでなく、文字、セル、図形などもも変数に代入することができる。
例えばシート上にグラフがある場合、そのグラフを変数に代入してマクロ上で操作することも可能である。
それぞれどのように宣言すればよいかは、今後紹介していくマクロの中で順次説明していく予定だ。
i = 10
⇒変数iに数値10を代入するコード。
基本的にどの言語でもそうだが、等号の左側に代入される側の変数を入力する。
With Worksheets(1)
.Cells(1, 1).Value = i + 10
.Cells(2, 1).Value = i - 10
.Cells(3, 1).Value = i * 10
.Cells(4, 1).Value = i / 10
End With
⇒1番目のシートのセルA1~4にそれぞれ、i+10、i-10、i×10、i÷10の値を代入するコード。
最初と最後の行に書かれているのはWithステートメントと呼ばれ、先頭部分が同じコードが連続する際に先頭部分を省略するときに用いられる。
Worksheets(1).Cells(1, 1).Value = i + 10
Worksheets(1).Cells(2, 1).Value = i - 10
Worksheets(1).Cells(3, 1).Value = i * 10
Worksheets(1).Cells(4, 1).Value = i / 10
⇒
Withステートメントで先頭部分を省略する。
With Worksheets(1)
.Cells(1, 1).Value = i + 10
.Cells(2, 1).Value = i - 10
.Cells(3, 1).Value = i * 10
.Cells(4, 1).Value = i / 10
End With
Worksheets(i).Cells(j,k).Value
で「i番目のシートのj行k列目のセルの値」という意味になる。
(例2) 文字列の連結
もう1つ例として、文字列をいじるマクロを紹介する。
Sub 文字列の連結()
Dim Name As String
Dim S As Range
Name = "ピクト"
Set S = Worksheets(1).Cells(1, 1)
S.Value = "私の名前は" & Name & "です。" _
& "ブログ「ピクトの思考録」を運営しています。"
End Sub
これは文字列を代入した変数と文字列を連結させて短文を作るマクロである。
これを実行すると、下図のようにA1セルに短文が表記される。
ここで各コードを詳しく見ていく。
Dim Name As String
Dim S As Range
⇒変数の種類(データ型)が
・String(文字列型)の変数「Name」
・Range型の変数「S」
を宣言するコード。
Rangeとはセル範囲を指し、Range型の変数にはセル範囲を代入することができる。
単体だけでなく複数のセルにも対応している。
Name = "ピクト"
⇒変数「Name」に文字列「ピクト」を代入するコード。
マクロ内で文字列を扱う際はダブルクォーテーション「””」で囲む。
Set S = Worksheets(1).Cells(1, 1)
⇒変数「S」に、1番目のシートのセルA1を代入するコード。
数値や文字列以外のもの(厳密にはオブジェクトと呼ばれるもの)を変数に代入する際は、代入する変数の頭に「Set」を入力する。
S.Value = "私の名前は" & Name & "です。" _
& "ブログ「ピクトの思考録」を運営しています。"
⇒変数「S」の値に、文字列「私の名前は」、変数「Name」、文字列「です。」、文字列「ブログ「ピクトの思考録」を運営しています。」を連結したものを代入するコード。
現在、変数「S」には「Worksheets(1).Cells(1, 1)」が代入されているため、ここでは1番目のシートのセルA1に等号の右側を代入する。
複数の文字列や数値を連結する際は、文字列の間に「&」を挟む。
また、本来はこのコードは1行で記述できるが、1行の記述量が長い場合は、間にアンダーバー「_」を挟むことで改行することが出来る。
S.Value = "私の名前は" & Name & "です。" & "ブログ「ピクトの思考録」を運営しています。"
⇒
1行が長い場合は「_」を間に挟んで改行可能。
S.Value = "私の名前は" & Name & "です。" _
& "ブログ「ピクトの思考録」を運営しています。"
終わりに
今回扱った例は、ぶっちゃけマクロを使わなくともシート内でExcel関数を使って完結できる処理である。
シート内で完結しない複雑な処理、または大量の繰り返し処理を必要とする場合にマクロが活躍する。
次回以降は私が実際に仕事の効率を上げるために作成したマクロを紹介し、コードを詳しく解説していく。
※追記
Excelシート内のすべての空白(スペース、タブ)と改行を一括削除するマクロを作った。
END
コメント