検索
連載

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

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、さまざまなセルの参照、移動、コピー、選択、挿入、削除の仕方に加え、行の高さ、列幅の変更方法などについて【Windows 10、Excel 2016に対応】。

Share
Tweet
LINE
Hatena

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.

ページトップに戻る