連載
» 2016年07月21日 05時00分 公開

Excelマクロ/VBAで始める業務自動化プログラミング入門(4):Excelの基本オブジェクト「セル」の参照、移動、コピー、選択、挿入、削除 (2/4)

[薬師寺国安,PROJECT KySS]

Copyメソッドでセルのコピー

 セルを別なセルにコピーしたい場合は「Copy」メソッドを使用する。Copyメソッドの書式は下記のようになる。

Copyメソッドの書式

Rangeオブジェクト.Copy Range({貼り付け先の先頭のセル番地、またはセル範囲})

Rangeオブジェクト.Copy ←Rangeを省略した場合はクリップボードに格納される


同じワークシートにコピーする場合

 セルのコピーはリスト5のように記述する。リスト5では、A1セル〜B7セルの内容(けい線を含む)をA10セルにコピーしている。

Sub セルのコピー()
  Range("A1:B7").Copy Range("A10")
End Sub
リスト5 セルのコピー

 リスト5を実行すると図4のようになる。

図4 セルをコピーした

他のワークシートにコピーする場合

 他のワークシートにコピーする場合は、リスト6のように記述する。

Range("A1:B7").Copy Worksheets("Sheet2").Range("A1")
リスト6 他のワークシートにコピー

 セルA1〜B7のデータを、ワークシート「Sheet2」のセルA1にコピーする。この場合はSheet2の存在が必須だ。

さまざまなセルの位置の選択方法

CurrentRegionプロパティでアクティブなセルを選択

 作成した表内のセルを参照してみよう。作成した表全てを指定するには、Rangeの範囲指定で、基準となるセルと、アクティブなセルを選択する方法がある。それにはCurrentRegionプロパティを使用する。

 図5のような表があったとすると、表を選択するにはリスト7のように記述する。

図5 社員名が記入された表

Option Explicit
Sub アクティブな表を選択()
 Range("B3").CurrentRegion.Select
End Sub
リスト7 アクティブな表を選択する

 実行すると図6のように表内が選択される。

図6 表内が選択された

Endプロパティで、あるセルを基準に末端まで選択

 次に、図6のB6のセルを基準に、B6のセルより終端行までと、右のセルの終端行までを選択してみよう。リスト8のように記述する。

Sub あるセルを基準に終端行まで選択する()
  Range("B6", Range("B6").End(xlDown).End(xlToRight)).Select
End Sub
リスト8 あるセルを基準に終端行まで選択する

 終端セルを選択するにはEndプロパティを使用する。書式は下記の通りだ。

Endプロパティの書式

Rangeオブジェクト.End({Direction})


 オブジェクトにはRangeオブジェクトを指定する。{Direction}の値は表3を参照してほしい。

表3 Directionの値
設定値 内容 キー操作
xlDown 下方向 [Ctrl]+[↓]キー
xlUp 上方向 [Ctrl]+[↑]キー
xlToLeft 左方向 [Ctrl]+[←]キー
xlToRight 右方向 [Ctrl]+[→」]キー
参考「Endプロパティ - MSDN

 リスト8を実行すると図7のように、B6のセルを基準に表が選択されている。

図7 B6のセルを基準に表内が選択された

Offsetプロパティで、指定した数だけ離れたセルを選択

 次に、図5の表の最終データのある、その1つ下のセルを選択してみよう。このような場合はOffsetプロパティを使用する。Offsetプロパティは、指定したセルの位置や範囲から、何行かずれたセルや、何列かずれた列の参照が可能なプロパティだ。書式は下記の通りだ。

Offsetプロパティの書式

{オブジェクト}.Offset({RowOffset},{ColumnOffset})


 オブジェクトにはRangeオブジェクトを指定する。

 {RowOffset}には、ずらす行の数を指定する。整数で指定する。正の数で下方向、負の数を指定すると上方向にずれる。省略した場合は0と見なされ、同じ行となる。

 {ColumnOffset}には、ずらす列の数を指定する。整数で指定する。正の数で右方向、負の数を指定すると左方向にずれる。省略した場合は0と見なされ、同じ列となる。

 Offsetプロパティの使用例はリスト9のようになる。

Sub 表の最終行にあるその下のセルを選択()
  Range("B3").End(xlDown).Offset(1).Select
End Sub
リスト9 表の最終行にある、その下のセルを選択

 実行すると、図8のようにB10のセルが選択される。B3セルの終端行まで選択し、Offsetプロパティに「1」を指定して、B3セルの終端行の、一つ下のセル「B10セル」が選択された。

図8 B10のセルが選択された

 表の最終行のその1つ下にあるセルはOffsetプロパティで選択できた。

Endプロパティで指定したセルの値を取得

 次は、図5の「氏名」の最終行にある「正岡筆夫」の値を選択してみよう。リスト10のように記述する。

Sub 表の最終行の氏名を取得する()
 Dim myName As String
 myName = Range("C3").End(xlDown).Value
 MsgBox "最終行の氏名は" & myName & "さんです。"
End Sub
リスト10 表の最終行の氏名を取得する

 まず、文字列型変数「myName」を宣言する。変数myNameにC3セルの最終行にある値を格納する。MsgBoxで変数myNameの値を表示する。「C3のセルの終端行」には「End(xlDown)」で移動できる。

 実行結果は図9のようになる。

図9 表内の最終行の「氏名」の値を取得

 続いて、セルの挿入や削除の仕方について解説する。セルの挿入や削除は実際の業務でも多用される処理だ。このように頻繁に利用される処理こそ、マクロ化しておくべきだ。手動でセルの挿入や削除を行うより、ボタンにマクロを登録しておいて、ボタンクリック一つで実行できる方が何倍も手間が省ける。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。