
VBAで編集対象を指定することは、基礎の基礎です。
これができないと話になりません。
私はfor文すら知らないプログラミングのド素人からVBAとPythonを独学しました。
会社でも作業自動化と機械学習に取り組んでいます。

・これからVBA(マクロ)を勉強したい
・事務作業を自動化したい
・手軽にスキルを身に着けたい
こんな人におすすめの記事です。
VBAでは、処理したい対象を指定してから操作を書くことでプログラムになります。

対象となるのは、基本的にセル、シート、ファイルです。
今回はそれらを指定する方法を誰でも理解できるように解説します!!
セルの指定
Cells(行, 列)
Sub test()
Cells(1, 1).Select
End Sub
Cells(行, 列)でセルを指定します。
ここで、Selectは選択にする操作です。



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の違い
Range:単体指定と範囲指定どちらもOK

じゃあとりあえずRangeが優秀なんやな!!

イヤ違う。
CellsとRangeは以下のように使い分けることをおススメします。
範囲指定:Range(Cells(行, 列), Cells(行, 列))
例えばA1~C3のセル9個を選択したいなら以下のように書きましょう。
Sub test()
endRow = 3
endCol = 3
Range(Cells(1, 1), Cells(endRow, endCol)).Select
End Sub

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を組み合わせると、一発で全セルをクリアできたりします。
行(列)の指定
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()
MsgBox Workbooks("Book1.xlsx").Activate
End Sub
()にファイル名を入れると指定できます。
拡張子(“.xlsx”など)を間違えるとエラーになるので注意してください。
ThisWorkbook
Sub test()
MsgBox ThisWorkbook.Name
End Sub
ThisWorkbookとはプログラム実行ファイル自身のことです。
実行ファイル(Excelファイル)は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
この場合はアクティブブックの1枚目のA1セルが対象です。
オブジェクトの指定を変数化する
Sub test()
Dim target As Workbook
Set target = ThisWorkbook
target.Worksheets(1).Cells(1, 1) = "select"
End Sub
Setを使えば変数でオブジェクト指定を変数化できます。

②SetでtargetをThisWorkbookに設定
これでtargetと書くだけで指定可能になります。

それって意味あるの?
例えば以下のコードを見てください。
Sub test()
Dim target As Worksheet
Set target = ThisWorkbook.Worksheets(1)
target.Cells(1, 1) = "select"
End Sub
ThisWorkbookの1枚目のシートを変数targetとしました。
すると、以降はtargetだけでファイルからシートの指定まで完結に指定できます。
まとめ
オブジェクト(セル,シート,ファイル)の指定方法を解説しました。
自由に指定できるようになったら、コピペやファイル操作など”操作”についてのコードを勉強していきましょう!!


コメント