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

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

VBAで編集対象を指定することは、基礎の基礎です。

これができないと話になりません。

私はfor文すら知らないプログラミングのド素人からVBAとPythonを独学しました。

会社でも作業自動化と機械学習に取り組んでいます。

これからVBA(マクロ)を勉強したい
・事務作業を自動化したい
・手軽にスキルを身に着けたい

こんな人におすすめの記事です。

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

セルの指定と選択例

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

今回はそれらを指定する方法を誰でも理解できるように解説します!!

セルの指定

Cells(行, 列)

Sub test()

Cells(1, 1).Select

End Sub

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

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

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

Selectの他には、CopyやDeleteなどがあります。

Range(“範囲”)

Sub test()

Range("A1").Select

End Sub

()に文字列でセル番地を入れて指定する方法です。

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

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

イヤ違う。

Cellsと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を組み合わせると、一発で全セルをクリアできたりします。

行(列)の指定

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でオブジェクト指定を変数化
①Dimで変数targetがワークブックであることを定義
②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だけでファイルからシートの指定まで完結に指定できます。

まとめ

オブジェクト(セル,シート,ファイル)の指定方法を解説しました。

自由に指定できるようになったら、コピペファイル操作など”操作”についてのコードを勉強していきましょう!!

VBA
スポンサーリンク
HTOMblog

コメント

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