次にはExcel VBAを使用してワークブック、ワークシート、セルのデータを制御し、プログラムを使用してテーブルを自動的に生成する方法を説明します。
開始する前に、Excel VBAの開発環境を用意し、開発者ツールを有効にして、Excel VBAのプログラム編集ウィンドウを開いてください。
目次
セル
まず、VBAでExcelのセルを制御する方法を説明します。
Rangeオブジェクト
VBAでは、Rangeオブジェクトを使用してセルを選択および操作します。このオブジェクトは、Excel VBAで最も重要なオブジェクトの1つであり、よく使われます。次にはさまざまな使用方法を説明します。
現在のワークシートのセルA1の内容をHelloに設定するには、次のように記述します。
Range("A1").Value = "Hello"
Rangeオブジェクトの最初の引数はセルの位置であるため、この位置のセルを抽出でき、Valueプロパティはこのセルの内容です。Valueを新しいデータに指定すると、Excelのセルの内容を更新できます。
自分でサブプログラム(Sub)を追加し、上記のコマンドをその中に入れて実行します。
実行すると、セルA1の内容はHelloになります。
通常、Excel VBAプログラムを開発する場合、ExcelとVBAエディター、両方のウィンドウを同時に開き、テストしながらプログラムを開発します。このような開発環境は、Officeがインストールされているすべてのコンピューターで利用でき、余計なインストールは不要で、便利で使いやすいです。
複数の連続するセルの内容を一回に変更する場合は、Rangeの引数でセル範囲を指定します。次の例をご覧ください。
Range("A1:A4").Value = 5
これより、セルA1からセルA4まで、内容が5に変更されます。
範囲が連続していない場合は、一回に複数の範囲を指定することもできます。
Range("A1:A2,B3:C4").Value = 10
これより、任意範囲のセルの内容を変更できます。
Rangeはカスタム名のセルを処理するためにも使用できます。セル名をRangeの引数に指定すればいいです。次には例を挙げます。
Range("MyCell").Value = 123
これより、セルMyCellの内容は123に指定されます。
Cellsオブジェクト
Range以外、Cellsもセルを操作するために使用できるオブジェクトです。その機能は大体Rangeと同じです。ただCellsは行番号と列番号を使用してセルを指定するため、自動化プログラムを作成する場合、比較的に使いやすいです。
Cellsを使用して、最初の行と最初の列のセルの内容を23として指定する場合は、次のように記述します。
Cells(1, 1).Value = 23
結果は次のようになります。
範囲を指定する場合は、次のように、Rangeに対応するため、2つのCellsを使用できます。
Range(Cells(1, 1), Cells(4, 2)).Value = 13
結果は次になります。
RangeまたはCellsによって抽出されたセルの内容を変更できる以外、他の多くの機能があります。 Selectを呼び出して、これらのセルを選択できます。
Range(Cells(1, 1), Cells(4, 2)).Select
これより、Excelのこれらのセルが選択されている状態になります。
行全体(row)を選択する場合は、Rowsで行番号を指定できます。
Rows(3).Select
結果は次になります。
列にはColumnsを使用します。
Columns(2).Select
結果は次になります。
コピーと貼り付け
Excel VBAは、プログラムを使用して、自動的にコピーして貼り付ける操作が実行できます。次には例を挙げます。例えば、元のExcelのローデータが次となります。
Selectを使用して、コピーする範囲を選択します。
Range("A1:A2").Select
これらのセルが選択された後、VBAのSelectionオブジェクトで選択されたセルを取得してから、SelectionオブジェクトのCopyによって選択されたセルをコピーします。
Selection.Copy
データをコピーした後、貼り付ける場所を選択します。
Range("C3").Select
また、ActiveSheetのPasteを呼び出してデータを貼り付けます。
ActiveSheet.Paste
結果は次になります。
セルをクリアする
セル内のデータをクリアする場合、ClearContentsを使用します。
Range("A1:A2").ClearContents
或は、セルの内容を空白として指定します。
Range("A1").Value = ""
ワークシート
複数のExcelワークシートを操作する場合は、Worksheetsオブジェクトとワークシート名を使用してワークシートを指定できます。
Worksheets("sheet1").Range("A1").Value = "sheet1のA1"
Worksheets("sheet2").Range("A1").Value = "sheet2のA1"
これより、sheet1とsheet2のセルA1が変更され、sheet1は次のようになります。
sheet2は次のようになります。
Worksheetsオブジェクトは、ワークシートの順序によってワークシートを指定することもできます。
Worksheets(1).Range("A1").Value = "sheet1的A1"
Worksheets(2).Range("A1").Value = "sheet2的A1"
この2行の効果は、上記のワークシート名を使用する操作と同じです。
新しいワークシートを追加する場合は、次のコードを実行します。
Worksheets.Add
これより、新しいワークシートが追加されます。
新しく追加されたワークシートはデフォルトで最初に配置され、Nameプロパティでシート名を変更できます。
Worksheets(1).Name = "新しいワークシート"
結果は次になります。
WorksheetsのCountは現在のワークシートの数量を計算でき、MsgBoxはポップアップしてシンプルなメッセージを表示します。
MsgBox Worksheets.Count
結果は次になります。
ワークブック
VBAのWorkbooksオブジェクトは、現在のExcelで開いているワークブックを表します。プログラム内の複数のワークブックのデータを同時に処理する必要がある場合は、Workbooksオブジェクトを使用する必要があります。 例えば、ワークブック1の最初のワークシートのセルA1にある内容をHelloに設定するには、次のコマンドを実行します。
Workbooks("Workbooks1").Worksheets(1).Range("A1").Value = "Hello"
この使い方は、上記のワークブックとセルの使い方と似てます。ただその前にWorkbooksオブジェクトを追加してワークブックを指定します。同様に、Workbooksでは、名前で指定するだけでなく、ワークブック番号もWorkbooksを指定できます。
Workbooks(1).Worksheets(1).Range("A1").Value = "Hello"
現在のワークブックの数量を確認したい場合は、WorkbooksのCountを使用できます。
MsgBox Workbooks.Count
ワークブック名は、Nameから取得できます。
MsgBox Workbooks(1).Name
ワークブックを開く(Excelファイルを開く)場合は、Openを使用できます。
Workbooks.Open "C:VBAdemo.xlsx"
ワークブックを保存する(Excelファイルを保存する)場合は、Saveを使用できます。
Workbooks("demo").Save
ワークブックを名前を付けて保存したい場合は、SaveAsを使用できます。
Workbooks("demo").SaveAs "C:VBAanother.xlsx"
Activateは現在のワークブックを指定できます。
Workbooks("demo").Activate
ワークブックを閉じるには、Closeを使用できます。
Workbooks("demo").Close
すべてのワークブックを閉じたいですが、メインウィンドウを残す場合は、次の操作を実行します。
Workbooks.Close
Excel全体を閉じるには、以下のコマンドを実行します。
Application.Quit
Excel VBAのワークブック操作を身に付けた後、Excelファイルを簡単に開いて、さまざまな自動操作を実行してみてください。
Excel VBAで複数のワークブックを操作する
最後に補充したいのは、サブプログラム(Sub)を作成したら、通常はすぐに実行し、テストして実行結果を確認する必要があります。ツールバーには実行ボタンがあり、クリックすると実行できます。このとき、カーソルがどのサブルーチンにも入っていない場合、実行ボタンをクリックすると、選択ウィンドウがポップアップし、実行するサブプログラムを確認します。それは時間の無駄になります。
開発のスピードを上げて時間を節約したい場合は、実行するサブプログラムにカーソルを置いて実行ボタンを押すと、すぐに実行できます。これより、効率が上がります。
コメントを残す