セルの指定の種類
セルの指定にはRangeを使用した指定方法と、Cellsを使った指定方法がある。
具体的な使用方法は以下の通りである。
Sub 挨拶() Range("A1").Value = "おはようございます" Cells(2, 1).Value = "こんにちは" End Sub
実行結果は以下の通りである。
Range("A1")に「おはようございます」と入力され、Cells(2,1)に「こんにちは」と入力された。
補足として、セルのひとつ上のオブジェクト階層であるシート指定をしない場合は、アクティブシートにマクロが実行される。
アクティブシートとは、現在Excel上で開いているシートのことを指す。
以上のように、オブジェクトシート指定しなくてもマクロの実行は成功するが、違うシートを無意識に開きながら実行したときに、予期せぬシートに実行の結果が反映される場合があるので、オブジェクトシートの指定はしたほうがエラーが起こりにくいと個人的に感じる。
シートのActivate
そこで、以下のようなプログラムを実行する。
Sub 挨拶() Sheets("シート追加分").Activate End Sub
実行結果がこちらだ。
プログラムは上から順番に実行される
以下のようなプログラムを実行したときに、Sheets("シート名")のRange("A1")には「メロンパン」と「クリームパン」のどちらの文字が表示されるだろうか。
Sub パン屋さん() Sheets("シート名").Activate Sheets("シート名").Range("A1").Value = "メロンパン" Sheets("シート名").Range("A1").Value = "クリームパン" End Sub
答えは、「クリームパン」です。
実は、プログラムが実行されている途中で「メロンパン」も一回Range("A1")に記載されたのだが、あとから「クリームパン」に書き換えられたという状況なのだ。
実際に、プログラムを途中で止めながら見ていくとこの様になる。
赤い丸をつけた状態(ストップをかけた状態)での実行結果は以下の通りである。
プログラムを見てみると、赤い丸のところでストップしているのが分かる。
このまま、プログラムを続行すると、
「メロンパン」が「クリームパン」に書き換わっているのが確認できる。
Withの使用
プログラムのコードをなるべくスッキリとキレイに見せるために、できるだけ重複したコード表現を使わないようにするのが大切である。
理由として、コードがキレイだと、後からプログラムを訂正する際にできるだけ少ない修正で済んだり、他のプログラマーさんが見たときに理解しやすいというメリットがあるからである。
パン屋さんのプログラムをWithを使ってキレイに見せると以下のようになる。
Sub キレイなパン屋さん() With Sheets("シート名") .Activate .Range("A1").Value = "メロンパン" .Range("A1").Value = "クリームパン" End With End Sub
まとめ
このように、同じ動きをするプログラムでも見栄えを意識すると上の写真のようになります。
これから、VBAを勉強していくにつれて、どんどん複雑なプログラムを組むことになっていくでしょう。
それに向けて、今のうちからコードをスッキリとキレイに、誰にでも見やすいように書いていくことが重要です。
最後まで読んでいただいてありがとうございました。