VBA Stepup1
第1章 ワークシートの指定
Excel VBA基礎編では、ワークシートを指定していないため、現在開いているシートに対してマクロが実行されます。ワークシートを省略しているため、実行したいワークシートを開いておかなければなりません。
でも、それではブックの状態や開いているワークシートによって、マクロがうまく動作しなくなります。これではせっかくVBAでマクロを作成した意味が薄れてしまいます。
そこで、特定のワークシートに対して確実に実行させるために、RangeオブジェクトやCellsプロパティの前にワークシート名を指定します。
ワークシートを直接指定する場合
ワークシート名が「Sheet1」の場合は、直接指定すると以下のとおりになります。
Worksheets("Sheet1")
Sheet1というワークシートのA1セルを指定する場合は以下のとおりになります。
Worksheets("Sheet1").Cells(1, 1)
Sheet1のA1に「テスト」という文字を入れる場合は以下のとおりになります。
Worksheets("Sheet1").Cells(1, 1).Value = "テスト"
直接指定は見てわかりやすいという利点はあります。ただし、セルを指定するたびに、Worksheets("Sheet1"). を毎回記述するのは結構煩わしいです。
Setステートメントでオブジェクト変数を使う場合
毎回、Worksheets("Sheet1")を指定しなくていいように、一般的にはSetステートメントを使用します。
Setステートメントはワークシート名を変数にセットして、変数でワークシートを指定します。そのため、まずは変数を宣言してから、Setステートメントでワークシート名をセットします。
Ws1という変数にSetステートメントでSheet1をセットし、そのシートのA2に「Setテスト」という文字を入れる場合は以下のとおりになります。
Dim Ws1 As Worksheet
Set Ws1 = Worksheets("Sheet1")
Ws1.Cells(2, 1).Value = "Setテスト"
直接指定に比べると一見わかりづらいですが、記述自体は簡単になります。VBAではシート内のセル指定を多くするので、Setステートメントを使う事が多いです。
複数のシートを同時に操作するような場合も、Setステートメントを使うと記述が簡単になります。 Sheet1のA1セルの値をSheet2のB1の値にし、Sheet1のA2セルの値をSheet2のB2の値にする場合は、以下の記述
Dim Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Ws2.Cells(1, 2).Value = Ws1.Cells(1, 1).Value
Ws2.Cells(2, 2).Value = Ws1.Cells(2, 1).Value
このように、どのワークシートに対して処理するのかをはっきり指定する必要があります。人間は目で見てワークシート名は判断できますが、Excelに実行してもらうには、ワークシート名の指定は欠かせません。 最初はちょっと面倒くさいかもしれませんが、この面倒くささになれると、VBAを使った自動実行の幅が広がります。