先日、マクロを勉強したいと言われた方がいました。

私は音楽家であり、マクロのプロという訳ではありませんが、集計や入力等の事務的な作業を行うためのマクロを組むことは出来ます。

そこで、役に立てればと思い、マクロの概要について書いた資料を作成しました。

その資料をこのブログに載せます。

資料の内容は、厳密に言えば不適切な表現があるかもしれませんが、これからマクロを勉強する人がマクロはどのような感じなのかをある程度把握出来ればと思って作成しました。

資料が役に立てれば幸いです。



【マクロの概要】

マクロとは、特定の操作手順をプログラムとして記述して自動化する機能のこと。
Excelのマクロを学ぶということは、VBAを学ぶことである。
VBA(Visual Basic for Applications)とは、Excel やWord等のMicrosoft Officeシリーズに搭載されているプログラミング言語のこと。
マクロを組むとは、プログラミングをするということである。

先ず、マクロの基本として、マクロの記録がある。
これは、自分が操作した内容をマクロとして記録させるもの。
図1のようにマクロの記録を選ぶと、図2の画面が出てくる。

※図はExcel2003の画面

図1
マクロ

図2
マクロ

マクロ名には好きな名前を入力する。
ショートカット キーには、そのマクロに当てたいショートカットキーを入力する。
例えば、図2のようにmと入力すると、Ctrl+mでマクロが実行される。
マクロにショートカットキーを当てない場合は空白で良い。
マクロの保存先は、作業中のブックのみで使うマクロであれば、作業中のブックで良い。
どのブックでも使うマクロであれば、個人用マクロブックに保存する。
OKをクリックすると、マクロの記録が始まる。
今回は、A1:D1の範囲を選択し、セルの背景色を黄色に変更してみる。
変更したら、図3のように記録終了を選ぶ。

図3
マクロ

これで、A1:D1の背景色を黄色に変更するマクロが作成された。
早速、まだ背景色が塗られていない図4に対し、マクロを実行してみる。
尚、ショートカットキーを当てたので、Ctrl+mでマクロを実行できる。

図4
マクロ

マクロを実行すると、図5のようにA1:D1の背景色が黄色に変更される。

図5
マクロ

このように、マクロの記録は、操作した内容を再現することが出来る。
但し、マクロで行った処理は元に戻すことが出来ないので、注意しなければならない。
内容によっては、間違った処理をしてしまった時のために、マクロを実行する前に保存しておくのが良い。
では、次に、作成されたマクロがどのような記述になっているのかを見てみる。
先ず、図6のようにマクロを選ぶ。

図6
マクロ

すると、図7の画面が表示される。

図7
マクロ

先ほど作成したマクロ名が図7に表示されているが、編集をクリックすると、図8の画面が表示される。

図8
マクロ

図8にコードが書かれているが、これがVBA。
先ほど行ったマクロの記録は、自動的にこのコードを書かせていたというものである。
実際にこのコードを触ることによって、マクロの記録では出来ない複雑な処理を行うことが可能となる。
その代表的なものに繰り返し処理と条件分岐が挙げられる。
繰り返し処理と条件分岐は使用頻度が高い。
色々と応用がきくが、繰り返し処理と条件分岐がどのような場面で役に立つのか例を一つ挙げてみる。
図9の重量を見てもらいたい。

図9
マクロ

重量が50以上だったら文字色を赤色に、30以上50未満だったら青色に、30未満だったら黒色にしたいとする。
この場合、次のように記述する。



Sub 重量の文字色()

For i = 2 To 11
    If Cells(i, 4) >= 50 Then
        Cells(i, 4).Font.ColorIndex = 3
    ElseIf Cells(i, 4) >= 30 Then
        Cells(i, 4).Font.ColorIndex = 5
    Else
        Cells(i, 4).Font.ColorIndex = 1
    End If
Next i

End Sub



Sub 重量の文字色()
これは、マクロ名を表す。
上記のマクロ名は「重量の文字色」だが、Sub マクロの勉強資料()と記述すれば、マクロ名は「マクロの勉強資料」となる。

For i = 2 To 11
これは、For~Nextステートメントと言われる繰り返し処理の記述。
iは変数である。
変数とは、箱のようなもの。
上記記述の場合、iという文字に2から11の数値が順番に代入されていく。
iという文字が使われることが多いが、文字はaでもabでも何でも良い。
尚、上記記述の2 To 11を100 to 1000にすれば、iという文字に100から1000の数値が順番に代入されていく。

If Cells(i, 4) >= 50 Then
これは、If~ElseIfステートメントと言われる条件分岐の記述。
Ifは「もし」。
Cells(i, 4)はi行4列を表す。
今回はiが2から11の数値に順番に変わっていくので、最初は2行4列となる。
4列とはD列のこと。
Cellsで列を表す際、AやBといった記述ではなく、何列目なのかという数値を記述する。
例えば、A列であれば1、B列であれば2を記述する。
>= 50は、50以上を表す。
Thenは「だったら」。
ここまでの内容を繋げると、「もし、2行D列が50以上だったら」となる。

Cells(i, 4).Font.ColorIndex = 3
これは、先ほど指定した条件に該当した場合、どのような処理をするのかという記述。
Fontはフォントを表す。
ColorIndexは色を表す。
= 3の記述についてだが、Excelは色に番号が振られている。
例えば、黒は1、赤は3、青は5となる。
今回の場合、= 3なので、赤色となる。
ここまでの内容を繋げると、「2行D列の文字色を赤色にせよ」となる。

ElseIf Cells(i, 4) >= 30 Then
先ほどはIfを記述したが、別の条件を指定する場合は上記のようにElseIfを記述する。
尚、>= 30と記述されているが、先ほど50以上の条件を指定したので、この場合は30以上50未満となる。
よって、「もし、2行D列が30以上50未満だったら」という意味になる。

Cells(i, 4).Font.ColorIndex = 5
5は青色なので、「2行D列の文字色を青色にせよ」となる。

Else
これは、いずれにも該当しなかったらという意味である。

Cells(i, 4).Font.ColorIndex = 1
1は黒色なので、「2行D列の文字色を黒色にせよ」となる。

End If
これは、条件は以上という意味である。

Next i
これは、iが次の数値に変わり、繰り返し処理を行うというもの。
先ほどはiが2だったが、今度は3となる。
つまり、「もし、3行D列が50以上だったら、3行D列の文字色を赤色にせよ。もし、3行D列が30以上50未満だったら、3行D列の文字色を青色にせよ。いずれにも該当しなかったら、3行D列の文字色を黒色にせよ。」となる。
そして、次は4行D列に同処理が行われ、次は5行D列に同処理が行われ、最後には11行D列に同処理が行われる。

End Sub
これは、マクロの終わりを表す。

実際にこのマクロを実行すると、図10のようになる。

図10
マクロ

重量が50以上のものは文字色が赤色となり、30以上50未満のものは青色となり、30未満のものは黒色となっている。
今回は2行から11行にしか重量が入力されていないので、人間が目で数値を確認しながら手作業で色を変えていっても特に問題ないが、もし、重量が1000行や10000行にわたって入力されていたら、手作業で色を変えていくのは時間がかかる。
このような場合、マクロを組めば、一瞬で作業を終わらせることが出来る。
逆に、手作業ですぐに終わる作業はマクロを組む必要がない。
尚、マクロを使うメリットは他にもある。
人間は複雑な作業が出来るが、ミスを犯しやすく、処理も遅い。
一方、機械は複雑な作業が出来ないが、ミスを犯しにくく、処理も早い。
つまり、機械は処理が早いだけではなく、人間より正確に処理を行う。
人間がやる作業と機械がやる作業を分けることにより、効率化が図れる。

では、マクロでどのようなことが出来るのかについて、幾つか例を挙げる。

例1
先ほどの図10で、板厚・材質別に重量の合計を出したいという場合、繰り返し処理と条件分岐等を使えば、合計を出すことが出来る。
重量が複数のシートに入力されていて、全シートに入力されている重量の合計を出したいという場合も合計を出すことが出来る。
シート数が増減する可能性があっても、特に問題はない。

例2
全シートに入力されている特定の文字を別の文字に置換したいという場合、Replaceメソッドを使えば置換が出来る。

例3
セル結合された状態ではデータの並べ替えが出来ないが、一旦セル結合を解除してデータを並べ替え、その後再びセル結合をするという作業をマクロ化することが出来る。

例4
特定のフォルダに入っている全てのJPGファイルをExcelのシートの特定の位置に順番に貼り付けることが出来る。

他にも様々なことがマクロで出来る。
尚、ユーザーフォームというものもあるが、ユーザーフォームは色々と応用がきく。
しかし、ユーザーフォームを使いこなすには、ある程度のスキルが必要。

最後に、マクロを勉強する目的は何か。
それは、マクロのプロになることではない。
業務を少しでも楽にすることが目的。
マクロを使うと、助手がいるような感覚になる。
マクロのスキルを身につければ、機械という助手を側に置くことが出来るのである。