初心者のためのExcel エクセルマクロVBA入門-実践基礎:セルを操作する
前回までで、一通りVBAの基礎。は押さえました。基本的にはこれだけ知っていれば後はマクロを組めばいいと思います。そりゃもう自由自在に。。。。そして、この初心者のためのExcelマクロも役目をはたして・・・と言いたいところですが、たぶん、たぶんなんですが・・・
( ゚д゚)で?どう使えばいいさ?
ってなると思うんですよ。だのでもう少しだけやっていきましょう。ちょっとしたプログラムをたくさん書いて行きましょう。そうすれば自然とマクロを組めるようになると思います。
RangeオブジェクトとCellsプロパティ
セルの操作にはRangeオブジェクトかCellsプロパティを使います。Cellsプロパティはシートオブジェクトのプロパティです。Rangeオブジェクトもシートプロパティが親オブジェクトです。
あぁ、もう当たり前にオブジェクトって言ってますが、いいですよね?ロボじゃなくてw
RangeオブジェクトとCellsプロパティはそれぞれ違う指定の仕方をします。そしてそれぞれのプロパティをいじることでセルを操作できます。
※上級者になるなら
じつは、セルを操作するのはRangeオブジェクトしかありません。さっきの説明を矛盾しますが、実はシートオブジェクトのCellsプロパティを指定すると、それはRangeオブジェクトを自動で返します。つまりSheet1.Cells(1, 1)とするとセルA1のRangeオブジェクトを返すのです。したがってRangeオブジェクトで直接していするのも、Cellsプロパティを指定するのも結局はRangeオブジェクトを指定しているのと同じことになります。
んじゃ、コード。私がいつも大体書く順に書いて行きます。この手順をそのまま真似しても良いですし、自由に書いて構いませんが、マクロを作るための考え方とリンクするのはこの順だと思います。
まず、プロシージャのはじめと終わりを書いて、コメントで、そのプロシージャの役割を書きます。つまり、これはこうするマクロだよ。ということを「日本語で書くのです。」簡単ですね。
'' セルを操作するためのマクロ
Sub test()
End Sub
次に、この中で何をするのか?ということをまた日本語のコメントで書いておきます。
'// セルを操作するためのマクロ Sub test() '// シート1のセルA1の値に「こんにちは」を表示する '// 太字にする '// セルの色を黄色に変える '// 文字の色を赤にする '// セルの大きさを変える End Sub
こんな感じです。後は、この文章をエクセルが分かる言葉で書けばプログラミング完了です。簡単ですね。
'// セルを操作するためのマクロ Sub test() '// シート1のセルA1の値に「こんにちは」を表示する Sheet1.Range("A1").Value = "こんにちは" With Sheet1.Range("A1") '// 太字にする .Font.Bold = True '// セルの色を黄色に変える .Interior.ColorIndex = 6 '// 文字の色を赤にする .Font.Color = &HFFF '// セルの大きさを変える(行の高さを変える) .RowHeight = 20 End With End Sub
はい、これで終わりです。
( ゚д゚)?With?
まとめ書きするならWithが便利
プログラムにあるWithステートメントは、同じオブジェクトに対して、様々な操作をまとめて書きたいときに使います。Withの後に操作したいオブジェクトを選択して、以降は、「.」ドットから始めます。つまり、最初に指定したオブジェクトを省略して書くことができるわけです。Withを使わないと・・・
'// セルを操作するためのマクロ Sub test() '// シート1のセルA1の値に「こんにちは」を表示する Sheet1.Range("A1").Value = "こんにちは" '// 太字にする Sheet1.Range("A1")..Font.Bold = True '// セルの色を黄色に変える Sheet1.Range("A1")..Interior.ColorIndex = 6 '// 文字の色を赤にする Sheet1.Range("A1")..Font.Color = &HFFF '// セルの大きさを変える(行の高さを変える) Sheet1.Range("A1")..RowHeight = 20 End Sub
となります。Sheet1.Range("A1").ってずっと出てきてプログラムをちょっと見にくくなりますし、第一書くのが面倒くさいです。なので、Withという便利なものがあるわけです。
さて、太字にするとか、文字の色を変えるなどはさらにRangeオブジェクトの子オブジェクトであるFontオブジェクトが持っているColorプロパティやBoldプロパティを設定してあげればよいのです。なのでWithを使って・・・
'// セルを操作するためのマクロ Sub test() '// シート1のセルA1の値に「こんにちは」を表示する Sheet1.Range("A1").Value = "こんにちは" With Sheet1.Range("A1") With .Font '// 太字にする .Bold = True '// 文字の色を赤にする .Color = &HFFF End With '// セルの色を黄色に変える .Interior.ColorIndex = 6 '// セルの大きさを変える(行の高さを変える) .RowHeight = 20 End With End Sub
なんてことができちゃいます。これはWithの入れ子、つまり「ネスト」ですね。他にもいろいろとありますが、すべて、Rangeオブジェクトのプロパティか、さらに子オブジェクトのプロパティに対して値を代入しているだけです。書き方は、Withとかを使ってちょっと見やすくしているのですね。
どうでしょう?簡単だと思いませんか?
・最初と最後を書いて、
・やることを日本語で書いて、
・日本語をVBAに翻訳するだけ。
以上です。他には何もしていません。ただ、これを変更するにはどのオブジェクトのプロパティを設定すればいいのか?ということを後はGoogle先生に聞いただけですね。簡単です。本当に簡単です。
いかがでしょうか?プログラミングをする感覚というか考え方わかってきたでしょうか?
次回も似たようなことしていきます。サンプルコードはどんどん自分で書いてみてください。そうじゃないと身につかないので。
今日はここまで!
かしこ