Excel VBAプログラミングについて:ワークブック、ワークシート、セル

次には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)を追加し、上記のコマンドをその中に入れて実行します。

VBAサブプログラム(Sub)

実行すると、セルA1の内容はHelloになります。

実行の結果

通常、Excel VBAプログラムを開発する場合、ExcelとVBAエディター、両方のウィンドウを同時に開き、テストしながらプログラムを開発します。このような開発環境は、Officeがインストールされているすべてのコンピューターで利用でき、余計なインストールは不要で、便利で使いやすいです。

ExcelおよびVBAエディターのウィンドウ

複数の連続するセルの内容を一回に変更する場合は、Rangeの引数でセル範囲を指定します。次の例をご覧ください。

Range("A1:A4").Value = 5
Excelワークブック

これより、セルA1からセルA4まで、内容が5に変更されます。

範囲が連続していない場合は、一回に複数の範囲を指定することもできます。

Range("A1:A2,B3:C4").Value = 10

これより、任意範囲のセルの内容を変更できます。

Rangeはカスタム名のセルを処理するためにも使用できます。セル名をRangeの引数に指定すればいいです。次には例を挙げます。

Range("MyCell").Value = 123

これより、セルMyCellの内容は123に指定されます。

Excelワークブック

Cellsオブジェクト

Range以外、Cellsもセルを操作するために使用できるオブジェクトです。その機能は大体Rangeと同じです。ただCellsは行番号と列番号を使用してセルを指定するため、自動化プログラムを作成する場合、比較的に使いやすいです。

Cellsを使用して、最初の行と最初の列のセルの内容を23として指定する場合は、次のように記述します。

Cells(1, 1).Value = 23

結果は次のようになります。

Excelワークブック

範囲を指定する場合は、次のように、Rangeに対応するため、2つのCellsを使用できます。

Range(Cells(1, 1), Cells(4, 2)).Value = 13

結果は次になります。

Excelワークブック

RangeまたはCellsによって抽出されたセルの内容を変更できる以外、他の多くの機能があります。 Selectを呼び出して、これらのセルを選択できます。

Range(Cells(1, 1), Cells(4, 2)).Select

これより、Excelのこれらのセルが選択されている状態になります。

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)を作成したら、通常はすぐに実行し、テストして実行結果を確認する必要があります。ツールバーには実行ボタンがあり、クリックすると実行できます。このとき、カーソルがどのサブルーチンにも入っていない場合、実行ボタンをクリックすると、選択ウィンドウがポップアップし、実行するサブプログラムを確認します。それは時間の無駄になります。

開発のスピードを上げて時間を節約したい場合は、実行するサブプログラムにカーソルを置いて実行ボタンを押すと、すぐに実行できます。これより、効率が上がります。

Excel VBAエディター

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です