ITサポーターTsuchida

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を使った自動実行の幅が広がります。