Excelマクロ(VBA)では、以下のように、対象を指定してから操作を記述します。
対象を指定することができないと何も始まりません。
今回はセルやシート、ファイルなど、よく使われるものを指定する方法を解説します。
セルの指定方法
Cells(行, 列)
Sub test()
Cells(1, 1).Select
End Sub
Cells(行, 列)でセルを指定します。Selectは選択をする操作です。
要するに上記は「A1を選択する」というコードになります。
Selectの他にもCopyやDeleteなど、いろいろな操作があります。
Range(“セル番地”)
Sub test()
Range("A1").Select
End Sub
文字列でセル番地を入れて指定する方法です。
”A1”と入れればA1セルが対象になります。
例えばC3セルを指定したいならRange(“C3”)です。
Range(“左上:右下”)
Sub test()
Range("A1:C3").Select
End Sub
複数範囲を指定したい場合はRange(“左上:右下”)と書きます。
“A1:C3″はA1~C3までの合計9個のセルが対象です。
CellsとRangeの違い
例えばA1~C3のセル9個を選択したいなら、以下のように書きましょう。
Sub test()
endRow = 3
endCol = 3
Range(Cells(1, 1), Cells(endRow, endCol)).Select
End Sub
Rangeの中にCellsを2つ入れ、それぞれ左上と右下のセルを指定します。
文字列を渡す必要がないので、他のプログラムで取得した行(列)番号を使いやすくなります。
ActiveCell
Sub test()
ActiveCell = "active"
End Sub
上図では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でアクティブブック(編集対象のファイル)を指定できます。
例えば以下のコードがあったとします。
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を使えば変数でオブジェクト指定を変数化できます。
これでtargetと書くだけで指定可能になります。
Sub test()
Dim target As Worksheet
Set target = ThisWorkbook.Worksheets(1)
target.Cells(1, 1) = "select"
End Sub
こんな感じでシートまで省略することも可能です。
何度も同じコードを書くのがめんどくさい場合に重宝するのでおすすめです。
まとめ
オブジェクト(セル,シート,ファイル)の指定方法を解説しました。
最初から全部覚える必要はないので、検索しつつ慣れましょう。
コメント