Excel VBAと聞くと「難しい」「書くのが大変」というイメージを持つ方は多いと思います。ですが,Excel上で通常行う作業の9割は,「セルに対する処理」だけです。つまり,セルをいじる方法だけ覚えてしまえば,「Excel VBAを大体マスター」したと言えるわけです!
まずはセルの書き方から
セルをいじるためには,まずセルの書き方を覚える必要があります。Excel VBAでのセルの書き方は2種類あり,セルA1を表すのに,Range("A1")という書き方と,Cells(1,1)という書き方があります。
Rangeではセル名をそのまま書いていますが,Cellsのほうはシートの左上からのセルの位置(1行目,1列目)を示しています。Rangeのほうが書きやすそうですが,Rangeは「セル範囲」を表すための書き方ですので,セルをいじる場合はCellsのほうが便利です。
セルをいじろう!
いよいよいじる方法を覚えましょう。ここでは,とある月イチゴルファーのスコアを記録したシートを題材にします。
スコアのばらつきから練習不足が伺えますが,特に4月12日のスコアは人様にお見せできるものではありません。そこで,このセルD3のスコアを目立たなくしてみましょう。
文字を目立たなくするには「セルD3のフォントの色を灰色にする」のが良さそうですね。これをExcel VBAで書くと,
Cells(3,4).Font.ColorIndex = 15
となります。
=の左辺は難しく見えますが,実は単純です。「Cells(3,4)」はセルD3,「Font」はフォント,「ColorIndex」は色を表していて,それを「.」でつないでいるだけです。「.」は「の」と読み替えれば良いでしょう。右辺では色を指定していて,「15」は灰色を示しています。つまり,
と書いているのと同じです。これを実行すると,見事にセルD3のスコアが目立たなくなりました!
このように,セルの後に「.」を付け,いじり方を書いていくだけで,VBAでも自由にセルを操作することができるのです。
IfとForを覚えれば何でもできる!
続いて,120以上のスコアを全部目立たなくしてみましょう。「120以上ならば○○する」というのは,ExcelのIF関数でおなじみの「条件式」ですね。VBAでは,先ほどの式をIfとEnd Ifで囲んで,次のように書きます。
If Cells(3,4) >= 120 Then
Cells(3,4).Font.ColorIndex = 15
End If
セルD3は120以上ですので,結果は先ほどと同じです。
では,この条件式をA3からF3のすべてのスコアに対して行うには,どうすれば良いでしょうか? Excel関数の場合はすべてのセルに直接条件式を書き込まなければなりませんが,VBAの場合は「繰り返し」を使います。繰り返しを行うには,ForとNextという文を使い,先ほどの式を囲んで次のように書きます。
For i = 1 To 6
If Cells(3,i) >= 120 Then
Cells(3,i).Font.ColorIndex = 15
End If
Next
これを実行すると,Cells(3,1)(セルA3)からCells(3.6)(セルF3)までの6つのセルに対して,先ほどの条件式が一気に実行されます。実行結果は次のようになり,おかげでぱっと見ただけなら,すごく良い成績に見えるようになりました!
このように,If文とFor文を書けるようになれば,Excelのほとんどの操作をボタン1つで自動実行できるようになります。プログラム完成図は次の通り。とても簡単ですね!
…とはいえ,本格的にマスターするには,VBEの使い方やプロシージャ,オブジェクト,変数の考え方などを,基礎からしっかり学ぶ必要があります。続きは初心者向け入門書などを片手に,自分のペースでゆったり学んでいってください!