スポンサーリンク

Excelマクロでのセル,シート,ファイルの指定(選択)方法

Excelマクロ(VBA)では、以下のように、対象を指定してから操作を記述します。

A1セルを選択するコード

対象を指定することができないと何も始まりません。
今回はセルやシート、ファイルなど、よく使われるものを指定する方法を解説します。

セルの指定方法

Cells(行, 列)

Sub test()

Cells(1, 1).Select

End Sub

Cells(行, 列)でセルを指定します。Selectは選択をする操作です。
要するに上記は「A1を選択する」というコードになります。

A1セルを選択するコード
A1セルを選択する図

Selectの他にもCopyやDeleteなど、いろいろな操作があります。

Range(“セル番地”)

Sub test()

Range("A1").Select

End Sub
RangeでA1セルを選択するコード

文字列でセル番地を入れて指定する方法です。
”A1”と入れればA1セルが対象になります。

A1セルを選択する図

例えばC3セルを指定したいならRange(“C3”)です。

Range(“左上:右下”)

Sub test()

Range("A1:C3").Select

End Sub
A1~C3を選択した図

複数範囲を指定したい場合はRange(“左上:右下”)と書きます。
“A1:C3″はA1~C3までの合計9個のセルが対象です。

CellsとRangeの違い

CellsとRangeとの違いは以下の通りです。
Cells:単体指定のみ。数値を中に入れる。
Range:単体指定と範囲指定どちらも可能。文字列を中に入れる。
Rangeが優秀に見えますが、以下のように使い分けることをおススメします。
単体指定:Cells(行, 列)
範囲指定:Range(Cells(行, 列), Cells(行, 列))

例えばA1~C3のセル9個を選択したいなら、以下のように書きましょう。

Sub test()

endRow = 3
endCol = 3
Range(Cells(1, 1), Cells(endRow, endCol)).Select

End Sub
RangeとCellsで範囲指定するコード

Rangeの中にCellsを2つ入れ、それぞれ左上と右下のセルを指定します。
文字列を渡す必要がないので、他のプログラムで取得した行(列)番号を使いやすくなります。

ActiveCell

アクティブセルとは編集対象にあるセルを指します。
仮にA1~C3までを選択してもアクティブセルは常に1つだけです。
Sub test()

ActiveCell = "active"

End Sub
ActiveとSelectの違いを示した図

上図ではA1~C3のセル9個が”選択”されていますが、アクティブなセルはA1のみです。
ちなみに「=」でつなぐことでデータを入力できます。

アクティブセルに文字を入力するコード

つまりこれは、”activate”という文字をアクティブセルに入力するコードです。

Cells:全セルの指定

Sub test()

Cells.Select

End Sub

Cellsとだけ書けば、シート上にある全てのセルを指定できます。
操作をClearやClearContentsにすると、全セルをクリアできます。

行(列)の指定

Rows

Sub test()

Rows(1).Select

End Sub

Rows(行番号)で行を指定できます。

Columns

Sub test()

Columns(1).Select

End Sub

列はColumns(列番号)です。

シートの指定

Worksheets(番号)

Sub test()

Worksheets(1).Select

End Sub

数字で何枚目のシートか指定しましょう。
ただし、非表示のシートも枚数としてカウントされているので注意してください。

Worksheets(“シート名”)

Sub test()

Worksheets("Sheet1").Select

End Sub

文字列でシート名を入れても指定可能です。
例えば、”売上”シートを表示させたいならWorksheets(“売上”)とします。

ちなみに大文字小文字は区別されないので、この場合は”sheet1″でも指定可能です。

ActiveSheet

Sub test()

MsgBox ActiveSheet.Name

End Sub

編集対象になっているシートのことをアクティブシートと呼びます。
これもセルと同じで、選択状態のシートとアクティブシートとは別物です。

ファイル(ブック)の指定

Workbooks(“ファイル名”)

Sub test()

Workbooks("Book1.xlsx").Activate

End Sub

()にファイル名を入れると指定できます。
拡張子(“.xlsx”など)を間違えるとエラーになるので注意してください。

ThisWorkbook

Sub test()

MsgBox ThisWorkbook.Name

End Sub

ThisWorkbookとは、プログラムを実行している、このファイル自身のことです。
実行ファイルは1つだけなので、ThisWorkbookは常に同じファイルを指します。
例えば、”VBA.xlsm”というファイルで上記コードを実行すると、”VBA.xlsm”が表示されます。

ActiveWorkbook

Sub test()

MsgBox ActiveWorkbook.Name

End Sub

ActiveWorkbookでアクティブブック(編集対象のファイル)を指定できます。

ActiveWorkbookはThisWorkbookと違って、対象がコロコロ変わるので注意しましょう。

例えば以下のコードがあったとします。

Sub test()

ThisWorkbook.Activate
MsgBox ActiveWorkbook.Name
MsgBox ThisWorkbook.Name

Workbooks("Book1.xlsx").Activate

MsgBox ActiveWorkbook.Name
MsgBox ThisWorkbook.Name

End Sub

このコードでは”Activate”でアクティブブックを変えています。

アクティブブックが変わるコード

ThisWorkbookの名前は同じですが、ActiveWorkbookの名前が切り替わっているはずです。

例えば、別ファイルを開いたときにもアクティブブックが変わります。
全然関係ないファイルが加工されていたりすることもあるので注意しましょう。

どのファイルの、どのシートの、どのセルか指定する

オブジェクトの指定をつなげる

Sub test()

ThisWorkbook.Worksheets(1).Cells(1, 1).Select

End Sub
ブック、シート、セルの順に指定するコード

ドット「.」で区切ってファイルからセルまでを詳細に指定しましょう。
例えばWorksheet(2)にすれば2枚目のA1セルになります。
以下のようにファイル名やシート名を名前で指定しても大丈夫です。

Sub test()

Workbooks("Book1.xlsx").Worksheets("Sheet1").Cells(1, 1) = "select"

End Sub

これまでに紹介した指定方法を組み合わせるだけで、なんでもありです。

オブジェクトの指定を省略する

Sub test()

Cells(1, 1) = "select"

End Sub

これは冒頭に紹介したセルの指定コードですが、ファイルやシートが指定されていません。
このコードの裏では、ThisWorkbook.ActiveSheet.が隠れています。

ブックとシートの選択を省略したコード
つまり、いきなりセルを指定した場合は、
アクティブブックのアクティブシートのセルが対象です。

また、以下のようにファイルだけ省略すると、アクティブブックが対象になります。

Sub test()

Worksheets(1).Cells(1, 1) = "select"

End Sub

オブジェクトの指定を変数化する

Sub test()

Dim target As Workbook
Set target = ThisWorkbook
target.Worksheets(1).Cells(1, 1) = "select"

End Sub

Setを使えば変数でオブジェクト指定を変数化できます。

Setでオブジェクト選択を省略するコード
①Dimで変数targetがワークブックであることを定義
②SetでtargetをThisWorkbookに設定

これでtargetと書くだけで指定可能になります。

Sub test()

Dim target As Worksheet
Set target = ThisWorkbook.Worksheets(1)
target.Cells(1, 1) = "select"

End Sub

こんな感じでシートまで省略することも可能です。
何度も同じコードを書くのがめんどくさい場合に重宝するのでおすすめです。

まとめ

オブジェクト(セル,シート,ファイル)の指定方法を解説しました。
最初から全部覚える必要はないので、検索しつつ慣れましょう。

コメント

タイトルとURLをコピーしました