日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2014年6月18日水曜日

Excel の VBA はどこから始めると良い?お勧めする 3 つの切り口

Excel VBA ファーストステップ

イントロダクション

「Excel の VBA を学びたいけど、どこから始めたらいいのかわからない」という人は多いと思います。

私もそのうちの一人でした。
どうやって勉強すればいいのかまったくわからず、いろいろと試行錯誤した末、以下の 3 つの切り口を見つけました。


この切り口がこれから Excel の VBA を学びたいと思っている人の参考になれば幸いです。
なお、以下で紹介する操作は Excel 2010 のものです。他の Excel のバージョンでも基本となる部分は変わりません。


切り口1:「マクロの記録」で、自分が行った操作を Excel に VBA として表現してもらう

Excel には「マクロの記録」という機能があります。
この機能は、マクロの記録を開始した状態で、Excel を操作すると、その操作を Excel が VBA としてプログラムのコードとして表してくれるというものです。

例えば、セル B2 に対して値を入力する操作を、マクロの記録でプログラムコードにしてみたいと思います。


操作を VBA として記録する方法

(1) 「開発」タブから「マクロの記録」クリックする。
 ※ 標準の状態では「開発」タブは表示されていません。以下のページを参考にして開発タブを表示させてください。


マクロの記録をクリック
マクロの記録をクリック


(2) 「マクロの記録」というタイトルのダイアログが表示されるので、マクロの保存先が「作業中のブック」になっていることを確認して、OK ボタンを押します。

マクロの記録ダイアログ
マクロの記録ダイアログ


(3) セル B2 に任意の値を入力します。

セルに値を入力
セルに値を入力


(4) 「記録終了」をクリックします。

記録終了
記録終了


以上で、セル B2 に任意の値を入力するという操作の VBA のプログラムコードが生成されました。


記録したVBA コードを実行してみる

セル B2 に任意の値を入力するという操作が VBA のプログラムコードで自動的に実行できることを見てみましょう。

(1) 先ほどセル B2 入力した任意の値を削除して、「開発」タブのマクロをクリックします。

マクロの表示
マクロの表示


(2) マクロの記録時にダイアログに表示されていたマクロ名(何もマクロが記録されていない状態では、”Macro1”です)が選択されていることを確認して、実行ボタンをクリックします。

マクロの実行
マクロの実行


(3) すると、先ほど削除したセル B2 に入力された値が再度自動的に入力されます。
これが、Excel の VBA によって、プログラムが実行された結果です。

空だった B2 のセルに 100 が入力される
空だった B2 のセルに 100 が入力される


生成された VBA コードをチェックしてみる

実際にどのような VBA のプログラムコードが生成されたのかチェックしてみましょう。

(1) 「開発」タブの「Visual Basic」をクリックします。

Visual Basic Editor の起動
Visual Basic Editor の起動


(2) 表示された「Microsoft Visual Basic for Applications」ウィンドウの「プロジェクト」の中から「標準モジュール」→「Module1」をダブルクリックします。
すると、先ほど記録された VBA のプログラムコードが表示されます。

VBA コードの表示
VBA コードの表示


Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "100"
    Range("B3").Select
End Sub



Sub Macro1() から End Sub 内に記載されているコードが、先ほど記録した VBA のプログラムコードです。


簡単にこの VBA コードを解説します。

Range("B2").Select
 ・・・ セル B2 を選択します。
ActiveCell.FormulaR1C1 = "100"
 ・・・ 選択されたセル(セルB2)に値(100) を入力します。

Range("B3").Select
 ・・・ セル B3 を選択します。(セル B2 に値を入力する操作には関係がありません。マクロを記録した際に、セル B2 に値を入力した後に Enter を押した結果、セル B3 が選択されたため、その操作も記録されています。)


意味が分かれば非常に簡単なコードです。
この基本がわかれば、任意のセルに、任意の値を入力するコードを、上記のコードをアレンジすることで書くことができます。


ちょっとコードをアレンジしてみる

例えば、次のコードは、セル A1 に"所持金" という文字列を、セル A2 に 1000 という値を入力します。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "所持金"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "1000"


End Sub


セルA1に所持金、セルA2に1000を VBA によって入力
セルA1に所持金、セルA2に1000を VBA によって入力



切り口2:特定のセルに対して任意の値を設定するコードの意味を理解する、そして少し応用してみる

切り口1では、Excel の操作を VBA に自動的に変換してもらう方法を学びました。
その時に、特定のセルに対して任意の値を設定するコードの意味を理解しました。

このコードが Excel の VBA を理解するうえで非常に重要になります。
Excel の任意のセルに VBA で値を入れられるようになれば、あとはそこから出来ることを広げていけば出来ることがどんどん増えていきます。


少し応用してみる

ここで 3 つほど出来ることを増やしてみましょう。
"条件の判定" と "処理の繰り返し" と "セルの値の取得" です。この 3 つが出来るようになると、出来ることがぐーんと広がります。


コード例

次のコードを見てください。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1").FormulaR1C1 = "所持金"
    
    Dim i
    For i = 2 To 10
        
        If Range("A" & i).FormulaR1C1 = "" Then
            Range("A" & i).FormulaR1C1 = 0
        Else
            Range("A" & i).FormulaR1C1 = i + Range("A" & i).FormulaR1C1
        End If
    Next

End Sub



このコードは、次の動きをします。
初回実行時には、セル A1 に "所持金" という文字列を入力し、セルA2~A10 に 0 を入力します。
(なお、所持金というのはただの例なので、特に意味のある名前ではありません。表のヘッダ行だと考えてください。)

初回実行時:セルA2~A10に 0 が入力される
初回実行時:セルA2~A10に 0 が入力される


2 回目からの実行時には、セル A1 に "所持金" という文字列を入力し、セルA2~A10 に前回入力した値にセルの行番号を足したものを入力します。

2回目の実行時:セルA2~A10には、前回入力した値にセルの行番号を足したものが入力される
2回目の実行時:セルA2~A10には、前回入力した値にセルの行番号を足したものが入力される


2 回目の実行時には、全ての値が 0 だったため、セルの値にセルの行番号を足したという動作が実感しづらいと思います。

3 回目の実行をしてみます。

3回目の実行時:2回目の結果にセルの行番号が足されたことがわかる
3回目の実行時:2回目の結果にセルの行番号が足されたことがわかる


2 回目の結果にセルの行番号が足されていることがわかると思います。


コードの解説

なぜこのような動きが出来るのでしょうか?
実際にプログラムコードを見てみます。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1").FormulaR1C1 = "所持金"
セル A1 に "所持金" を入力します。
切り口1で同じようなコードを見てみましたが、今回はセルを選択せずに、任意のセルに対して値を入力しています。セルを選択しなくても、Range("~")内にセルのアドレスを入力すれば、そこに値を入力することができます。
Dim i
    For i = 2 To 10
値を記憶する i という変数を宣言し、2 から 10 まで 1 ずつカウントして繰り返し処理をするように指示しています。
        
        If Range("A" & i).FormulaR1C1 = "" Then
            Range("A" & i).FormulaR1C1 = 0
セル(A"セルの行番号")が空("")の場合には、そのセルに対して 0 を入力しています。
        Else
            Range("A" & i).FormulaR1C1 = i + Range("A" & i).FormulaR1C1
セル(A"セルの行番号")が空("")ではない場合には、そのセルに対して、そのセルの値にセルの行番号を足した値を入力しています。
End If
    Next

End Sub


一つ一つのコードの行を見ていくと、なぜそのような動作になるのかわかります。


これで、"条件の判定" と "処理の繰り返し" と "セルの値の取得" という 3 つの処理を理解することが出来ました"セルへの値の設定" を入れて 4 つです。

この 4 つの操作ができれば、Excelのシート上の文字列や数値を自由自在に操作することができます!


切り口3:わからないコード、やりたい操作があったらインターネットでどんどん調べる

既にインターネット上には、Excel の VBA に関する様々な情報が公開されています。
Google 検索などで、「Excel VBA ”わからないコード・やりたいこと"」というキーワードで検索すると、それに関するヒントや答えを見つけることができます。

それが見つかれば、コードをコピー&ペーストするのではなく、コードの内容を理解するように努めます。その中にわからないコードがあればさらにそのコードで検索をかけます。それをわからないことが無くなるまで繰り返します。


あとはこれをわからないことややりたいことがあるたびに繰り返していくと、その都度、一歩一歩 Excel の VBA についての知識と技術が向上していきます。


まとめ

Excel の VBA への入門の切り口がつかめればあとは一歩一歩ステップアップしていくことができます。

Excel の VBA が使えるようになると、面倒な操作を自動化したり、大規模なデータの複雑な加工が行えるようになります。それらをビジネスに応用すれば、自身のビジネスをより効率的に収益を上げられるような構造にすることができます。


是非、”楽しんで” Excel の VBA を学んでみてください。
そして、何かを作り上げる喜びを感じてみてください。





関連記事

関連記事を読み込み中...

同じラベルの記事を読み込み中...