プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、さまざまなセルの参照、移動、コピー、選択、挿入、削除の仕方に加え、行の高さ、列幅の変更方法などについて【Windows 10、Excel 2016に対応】。
本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」では、前回「マクロが動かない原因の見つけ方とVBAの変数、データ型」の3回までで、VBA(Visual Basic for Applications)や「VBE」(Visual Basic Editor、VBエディター)に関する基本は大体分かったはずだ。今回からいよいよ本格的なVBAのプログラミングに入っていく。
今回は「セル」に関する処理を基本に解説していく。Excelのシートは無数のセルの集合体であるから、セルに関する処理は結構多く、覚えないといけないことも多い。
ただセルは、Excelの名前に「Cell」が入っている通り、Excelの基本となるオブジェクトだ。このセルの処理をマスターすれば、ある程度のマクロを書けるようになること請け合いだ。頑張って理解してほしい。
今回はセルの操作の基礎編としてセルの参照、挿入、削除などのやり方を解説する。
これまでの連載で何度も説明しているので、もう覚えられたと思うが、VBAでセルやセルの参照範囲を扱うには、「Range」オブジェクトを使用する。Rangeオブジェクトを取得するために、セル番地や行番号、列番号を使ってセルを参照してみよう。
「セル番地」とはセルの「列番号」(左から右にアルファベット、A、B、C、……)とセルの「行番号」(上から下に数字、1、2、3……)を組み合わせて指定する書き方だ。一番左上のセルのセル番地は「A1」となる。セル番地で指定したセルにデータを入力するにはリスト1のように記述する。
Sub 指定したセルにデータを入力() Range("A1").Value="はじめまして!" Range("A3,B3").Value="薬師寺国安" End Sub
※「Value」プロパティは、セルの値を参照したり設定したりする場合に使用する。
リスト1を実行すると図1のようになる。
Rangeオブジェクトとして取得するセル範囲の指定には、表1のような記述がある。
指定例 | 参照セル | 説明 |
---|---|---|
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("{セル番地1}","{セル番地2}")←複数のセルを指定
{オブジェクト}.Range("{セル番地1}":"{セル番地2}")←セルの範囲を指定
行番号と列番号を指定してデータを入力するには、リスト2のように記述する。
Sub Cellsで行列番号を指定してデータを入力() Cells(4, 2).Value = "おはよう!" End Sub
ここでは、「Cells」プロパティを使用して行や列番号を取得し、Valueプロパティで値を入力している。
{オブジェクト}.Cells({行番号},{列番号})
Cellsの後に行番号と、列番号を指定すると、セルの場所を特定できる。オブジェクトを指定しない場合は、アクティブシートのセルが選択される。オブジェクトには、Application、Worksheet、Rangeオブジェクトを指定できる。
リスト2を実行すると図2のように表示される。
Cellsプロパティの指定には、表2のような記述がある。
指定例 | 説明 |
---|---|
Cells(3,5) | E3セル |
Cells(3,"E") | E3セル |
Cells | 全てのセル |
セルの内容を別のセルに移動する場合は「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のようになる。
他のワークシートに移動する場合は、リスト4のように記述する。
Range("A1:B7").Cut Worksheets("Sheet2").Range("A1")
セルA1〜B7を切り取って、ワークシート「Sheet2」のセルA1に貼り付ける。この場合はSheet2の存在が必須だ。
Copyright © ITmedia, Inc. All Rights Reserved.