EXCEL VBA - セルの選択と編集

セルの選択

セルを選択するには、アクティブな Worksheets の中のセルを選択します。選択したい Range オブジェクトに対して Select メソッドを使用します。

Range("A1").Select
セルの選択

もしも、アクティブではない Worksheets のセルを選択しようとした場合、「実行時エラー '1004': Range クラスの Select メソッドが失敗しました。」というエラーが発生します。

Worksheets(2).Range("A1").Select ' アクティブではない Worksheets を選択した場合
セルの選択

上記のエラーを回避するためには、以下のように Worksheets をアクティブにしてからセルを選択します。

Worksheets(2).Activate
Range("A1").Select
セルの選択

また、セルを選択した場合、それ以前に選択されていたセルは選択が解除されます。セルの選択を解除せずに追加でセルを選択することはできません。

選択されたセルは、Selection プロパティを使って取得することができます。対象のオブジェクトは Application オブジェクト、または Window オブジェクトです。オブジェクトを省略した場合はアクティブウィンドウが対象となります。

Dim range1 As Range

Range("A1:B2").Select
Set range1 = ActiveWindow.Selection
セルの選択

セルをアクティブにするには、アクティブにしたい Range オブジェクトに対して Activate メソッドを使用します。アクティブセルとは、選択されたセル領域内で背景が白色になっているセルのことです。

ひとつのセルだけが選択された状態であれば、アクティブセルも同じセルとなります。ただし、セル領域に対して Activate メソッドを実行した場合、セル領域の左上のセルがアクティブセルとなります。

Range("A1").Activate
セルの選択

Worksheets を指定しない場合、現在アクティブになっている Worksheets が対象となります。しかし、アクティブではない Worksheets を指定した場合はエラーになります。そのため、Worksheets を指定する場合は先に Worksheets をアクティブにする必要があります。

Worksheets(2).Activate
Range("A1").Activate
セルの選択

アクティブなセルはオブジェクトの ActiveCell プロパティを使って取得することができます。対象のオブジェクトは Application オブジェクト、または Window オブジェクトです。オブジェクトを省略した場合はアクティブウィンドウが対象となります。

Dim range1 As Range

Range("A1").Activate
Set range1 = ActiveWindow.ActiveCell
セルの選択

セルの編集

セルの編集は、セルの削除、挿入、切り取り、コピー、貼り付け、クリアについて解説します。

セルの削除

セルを削除するには、削除したい位置にある Range オブジェクトに対して Delete メソッドを使います。セルが削除されると削除されたセルの位置に左方向、または上方向にセルを移動します。

Range("A1").Delete Shift:=xlShiftToLeft ' 左方向へシフトする
Range("A1").Delete Shift:=xlShiftToLeft ' 上方向へシフトする
セルの編集

削除後にセルを移動させる方向は Shift 引数を使って指定します。移動させる方向は、以下のように定義されています。

移動させる方向の定数一覧
定数移動させる方向
xlShiftToLeft-4159左方向へシフトする
xlShiftUp-4162上方向へシフトする

セルの挿入

セルを挿入するには、挿入したい位置にある Range オブジェクトに対して Insert メソッドを使います。セルが挿入されると挿入されたセルの位置に右方向、または下方向にセルを移動します。

Range("A1").Insert Shift:=xlShiftToRight ' 右方向へシフトする
Range("A1").Insert Shift:=xlShiftDown    ' 下方向へシフトする
セルの編集

挿入後にセルを移動させる方向は Shift 引数を使って指定します。移動させる方向は、以下のように定義されています。

移動させる方向の定数一覧
定数移動させる方向
xlShiftToRight-4161右方向へシフトする
xlShiftDown-4121下方向へシフトする

セルの切り取り

セルを切り取るには、切り取りたい Range オブジェクトに対して Cut メソッドを使用します。

Range("A1:B3").Cut
セルの編集

切り取ったセルを貼り付ける場合は Destination 引数を使って貼り付け先の Range オブジェクトを指定します。切り取った Range オブジェクトがセル範囲であった場合でも、貼り付け先の Range オブジェクトは単独のセルを指定します。その場合、貼り付けるセルの位置は左上になります。

Range("A1:B3").Cut Destination:=Range("B1")
セルの編集

セルのコピー

セルをコピーするには、コピーしたい Range オブジェクトに対して Copy メソッドを使います。

Range("A1:B3").Copy
セルの編集

コピーしたセルを貼り付ける場合は Destination 引数を使って貼り付け先の Range オブジェクトを指定します。コピーした Range オブジェクトがセル範囲であった場合でも、貼り付け先の Range オブジェクトは単独のセルを指定します。その場合、貼り付けるセルの位置は左上になります。

Range("A1:B3").Copy Destination:=Range("B1")
セルの編集

セルの貼り付け

セルを切り取ったり、コピーしたセルを貼り付けるには、Worksheet オブジェクトに対して Paste メソッドを使います。ここでは Range オブジェクトではなく Worksheet オブジェクトである点に注意してください。また貼り付ける場所は、選択されているセルとなります。

Range("A1").Copy
Range("B2").Select
ActiveSheet.Paste
セルの編集

Cut メソッドや Copy メソッドにおいて、Destination プロパティを使用しなかった場合はクリップボードにデータが保存された状態になります。この状態をコピーモードと呼びます。この状態は、コピーされたセル領域が点滅した状態になります。

コピーモードの状態では、他のセルに貼り付けを行うことができます。また、貼り付けを行っただけではコピーモードは解除されません。そのため、コピーモードの状態では続けて何度でも貼り付けを行うことができます。

コピーモードを解除する場合には、Application オブジェクトの CutCopyMode プロパティに False を設定します。

Range("A1").Copy

ActiveSheet.Paste Destination:=Range("B1")
ActiveSheet.Paste Destination:=Range("C1")

Application.CutCopyMode = False
セルの編集

セルを単純にコピーした場合、コピー元の値がそのまま貼り付けられますが、コピー元の値を参照するようにコピーする(リンク貼り付け)こともできます。リンク貼り付けを行う場合には、Paste メソッドを実行する際に Link 引数に True を設定します。

ただし、Link 引数を指定する場合は、Destination 引数は同時に指定できません。そのため、貼り付ける時点で選択されていたセルに貼り付けが行われます。また、リンク貼り付けを行う場合には、書式はコピーされません。

Range("A1").Copy

Range("B2").Select
ActiveSheet.Paste Link:=True
セルの編集

形式を選択して貼り付けるには、Range オブジェクトに対して PasteSpecial メソッドを使います。ここでは Worksheet オブジェクトではなく Range オブジェクトである点に注意してください。

Range("A1").Copy

Range("B2").PasteSpecial Paste:=xlPasteAll, Operation:=xlPasteSpecialOperationNone
セルの編集

Paste に指定できる定数は、以下のように定義されています。省略した場合は xlPasteAll がデフォルトの値となります。

貼り付ける内容の定数一覧
定数貼り付ける内容
xlPasteAll-4104すべて
xlPasteFormulas-4123数式
xlPasteValues-4163
xlPasteFormats-4122書式
xlPasteComments-4144コメント
xlPasteValidation6入力規則
xlPasteAllExceptBorders7罫線を除くすべて
xlPasteColumnWidths8列幅
xlPasteFormulasAndNumberFormats11数式と数値の書式
xlPasteValuesAndNumberFormats12値と数値の書式

Operation に指定できる定数は、以下のように定義されています。省略した場合は xlPasteSpecialOperationNone がデフォルトの値となります。

貼り付ける内容の定数一覧
定数貼り付ける内容
xlPasteSpecialOperationNone-4142演算をしない
xlPasteSpecialOperationAdd2加算
xlPasteSpecialOperationSubtract3減算
xlPasteSpecialOperationMultiply4乗算
xlPasteSpecialOperationDivide5除算

また SkipBlanks 引数に True を設定すると、空白セルを無視して貼り付けが行われます。省略可能でデフォルトは False です。Transpose 引数に True を指定すると行と列を入れ替えて貼り付けが行われます。省略可能でデフォルトは False です。

セルのクリア

数式と値のクリアするには、クリアしたい Range オブジェクトに対して ClearContents メソッドを使用します。

Range("A1:B3").ClearContents
セルの編集

書式だけをクリアするには ClearFormats メソッドを使用します。

Range("A1:B3").ClearFormats
セルの編集

数式と値と書式をすべてクリアするには Clear メソッドを使用します。

Range("A1:B3").Clear
セルの編集

関連記事