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

VBA
Image by Yvette W from Pixabay
スポンサーリンク

VBAでは、処理したい対象を指定してから操作を書くことになります。

セルの指定と選択例

基本的に対象となるのは、セル、シート、ファイルです。

今回はそれらを指定する方法を解説します!

セルの指定

Cells(行, 列)

Sub test()

Cells(1, 1).Select

End Sub

Cells(行, 列)でセルを指定します。

ここで、Selectは選択する操作です。

A1セルを選択するコード

これは要するに、「Cells(1,1)つまり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
範囲選択

複数範囲を指定したい場合はRange(“左上:右下”)と書きます。

“A1:C3″はA1~C3までの合計9個のセルが対象ですね。

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つ入れてください。

それぞれのCellsで左上と右下のセルを指定すればOKです!

なんでこれがいいの?

例えば、もしRange(“範囲”)だけで同じことをすると、こんな書き方になります。↓

Sub test()

endRow = 3
endCol = 3
alpha = Chr(endCol + 64)
Range("A1:" & alpha & endRow).Select

End Sub

要するに、数値で行列の番号が取得できたとき、わざわざアルファベットに変換するのがめんどくさいからです。

ActiveCell

Sub test()

ActiveCell = "active"

End Sub

アクティブセルとは編集対象にあるセルを指します。

仮にA1~C3までを選択してもアクティブセルは1つだけです。

アクティブセルの説明

上図では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と違って、対象がコロコロ変わります!!

ThisWorkbookとActiveWorkbookはどう違うの?

例えば、”Book1.xlsx”というファイルを、プログラム実行ファイルと別に開いておきましょう。

そして以下のコードを実行してみます。

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をコピーしました