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

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

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

[薬師寺国安,PROJECT KySS]

セルの処理をマスターすれば、ある程度のマクロを書ける!

 本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」では、前回「マクロが動かない原因の見つけ方とVBAの変数、データ型」の3回までで、VBA(Visual Basic for Applications)や「VBE」(Visual Basic Editor、VBエディター)に関する基本は大体分かったはずだ。今回からいよいよ本格的なVBAのプログラミングに入っていく。

 今回は「セル」に関する処理を基本に解説していく。Excelのシートは無数のセルの集合体であるから、セルに関する処理は結構多く、覚えないといけないことも多い。

 ただセルは、Excelの名前に「Cell」が入っている通り、Excelの基本となるオブジェクトだ。このセルの処理をマスターすれば、ある程度のマクロを書けるようになること請け合いだ。頑張って理解してほしい。

 今回はセルの操作の基礎編としてセルの参照、挿入、削除などのやり方を解説する。

Rangeでセルの参照

 これまでの連載で何度も説明しているので、もう覚えられたと思うが、VBAでセルやセルの参照範囲を扱うには、「Range」オブジェクトを使用する。Rangeオブジェクトを取得するために、セル番地や行番号、列番号を使ってセルを参照してみよう。

「セル番地」を指定してセルを参照する

 「セル番地」とはセルの「列番号」(左から右にアルファベット、A、B、C、……)とセルの「行番号」(上から下に数字、1、2、3……)を組み合わせて指定する書き方だ。一番左上のセルのセル番地は「A1」となる。セル番地で指定したセルにデータを入力するにはリスト1のように記述する。

Sub 指定したセルにデータを入力()
  Range("A1").Value="はじめまして!"
  Range("A3,B3").Value="薬師寺国安"
End Sub
リスト1 指定したセルにデータを入力

※「Value」プロパティは、セルの値を参照したり設定したりする場合に使用する。

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

図1 指定したセルにデータが表示された

 Rangeオブジェクトとして取得するセル範囲の指定には、表1のような記述がある。

表1 Rangeオブジェクトの記述例
指定例 参照セル 説明
Range("A1") 「A1」セル 単一のセル
Range("A1,C5") 「A1」セルと「C5」セル 複数の単一セル
Range("A1:C5") 「A1〜C5」セル セル範囲
Range("A1:C5,E1:G5") 「A1〜C5」セルと「E1〜G5」セル 複数のセル範囲
Range("A:C") 「A〜C」列 列範囲
Range("1:5") 「1〜5」行 行範囲

Rangeプロパティの使い方

 また、Rangeは以下のようにプロパティとして使うこともできる。

Rangeプロパティの書式

{オブジェクト}.Range("{セル番地}")

{オブジェクト}.Range("{セル番地1}","{セル番地2}")←複数のセルを指定

{オブジェクト}.Range("{セル番地1}":"{セル番地2}")←セルの範囲を指定


行番号と列番号を指定してセルを参照

 行番号と列番号を指定してデータを入力するには、リスト2のように記述する。

Sub Cellsで行列番号を指定してデータを入力()
  Cells(4, 2).Value = "おはよう!"
End Sub
リスト2 行と列番号を指定してデータを入力

 ここでは、「Cells」プロパティを使用して行や列番号を取得し、Valueプロパティで値を入力している。

Cellsプロパティの書式

{オブジェクト}.Cells({行番号},{列番号})


 Cellsの後に行番号と、列番号を指定すると、セルの場所を特定できる。オブジェクトを指定しない場合は、アクティブシートのセルが選択される。オブジェクトには、Application、Worksheet、Rangeオブジェクトを指定できる。

 リスト2を実行すると図2のように表示される。

図2 行と列番号を指定したセルにデータが表示された

 Cellsプロパティの指定には、表2のような記述がある。

表2 Cellsプロパティの記述例
指定例 説明
Cells(3,5) E3セル
Cells(3,"E") E3セル
Cells 全てのセル

Cutメソッドでセルの移動

 セルの内容を別のセルに移動する場合は「Cut」メソッドを使用する。

 セルの移動やセルのコピーは実際の業務においても多用される機能だ。この機能をマクロ化しておくと、いちいち手作業で行っていたセルの移動やコピーがボタンクリック一回で実行できるようになる。

 単にこれだけの処理でもマクロ化しておくと、作業効率が目に見えてアップする。信じられない方がいたら、この連載を参考に「だまされた」と思って、紹介したマクロを実際の業務に取り入れて試してみてもらいたい。きっと、「目から鱗」になるだろう。

 Cutメソッドの書式は下記のようになる。

Cutメソッドの書式

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

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


同じワークシートに移動する場合

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

Option Explicit
Sub セルの移動()
  Range("A1:B7").Cut Range("A10")
End Sub
リスト3 セルの移動

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

図3 セルを移動した

他のワークシートに移動する場合

 他のワークシートに移動する場合は、リスト4のように記述する。

Range("A1:B7").Cut Worksheets("Sheet2").Range("A1")
リスト4 他のワークシートに移動

 セルA1〜B7を切り取って、ワークシート「Sheet2」のセルA1に貼り付ける。この場合はSheet2の存在が必須だ。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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