プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、VBAのオブジェクト、プロパティ、メソッド、関数、算術演算子、コメント、VBEの画面構成や使い方などについて【Windows 10、Excel 2016に対応】。
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。前回の「Excelでプログラム作成を始めるメリットとマクロの基本」では、そもそもプログラミングとは何か、Visual BasicとVBAとマクロの違い、マクロの作り方、保存/削除、セキュリティ設定などについて解説した。
今回はExcel VBAプログラミングの基本的な用語解説をメインに、VBE(Visual Basic Editor、VBエディター)の画面構成や使い方も解説する。プロパティ、メソッド、オブジェクトなど専門用語が出てくるが、できるだけ分かりやすく解説したいと思う。どうか、嫌にならずに着いてきてほしい。
これらの用語はプログラミングをする上では必ず出てくるものであり、意味を知らずしてプログラミングすることはできない。意味が分かれば、これ以降の説明も理解しやすくなると思う。
何でもそうだが、全ては基本を理解するところから始めることが重要だ。これは全ての習い事に共通していることである。理解するには実践あるのみ。ぜひ実際に手を動かしながら身に付けていってほしい。
基本構文に入る前に知っておかねばならないこととして、VBAには「オブジェクト」という概念がある。「オブジェクト」とは、操作を指示する際に、操作の対象となる「物」のことを指す。
Excelの場合では、「ブック」「セル」「ワークシート」「グラフ」「フォーム」などが当てはまる。「オブジェクト」の概念がつかめたところで、VBAの基本文法を紹介しよう。
Range("{オブジェクトの名前}").{オブジェクトのプロパティ名}
Range("A1").Value
※「Range」とはセルの選択の際に使用するオブジェクトを指す。
Range("{オブジェクトの名前}").{オブジェクトのプロパティ名}={値}
Range("A1").Value=10
※「=」は「代入演算子」といい、「=」の右にある値を「=」の左側にある変数やプロパティに代入する(入れる)ことができる。
Range("{オブジェクトの名前}").{動作名}
Range("A1").Select
※Selectメソッドは「選択する」という動作を表す。メソッドの意味については後述する。
次に、先ほどから出てきている「プロパティ」について解説しよう。
「プロパティ」とはオブジェクトごとに設定されている「属性情報」のことだ。言い換えると、「オブジェクトの性格を表すデータ」のことだ。オブジェクトのプロパティに値を設定すると、オブジェクトの見た目や形が変化する。
例えば、Excelの「セル」には表1のようなプロパティがある。
プロパティ名 | 概要 |
---|---|
Value | セルに値を設定したり、セルの値を取得したりする |
Row | セルの行番号(縦軸で上から下に1、2、3……)を表す |
Column | セルの列番号(横軸で左から右に1、2、3……)を表す |
では、そのプロパティの値を取得するには、どうすればいいのだろうか。
例えば「A1セルの内容を取得する」には下記のように書く。
Dim {値を入れる器} As Integer {値を入れる器} = Range("A1").Value
「Range("A1")」はA1セルを示すオブジェクトだ。Valueはセルの内容を表すプロパティだ。よって、セルA1の値が、{値を入れる器}の中に格納されることになる。
※「Dim」とは「変数を宣言する」という意味だ。「変数」については次回で詳説する。
では、次に、プロパティの値を設定してみよう。
例えば、「A1」セルに「薬師寺」という値を設定するには下記のように書く。
Range("A1").Value="薬師寺"
前述したように、「Range("A1")」は「A1」セルを示すオブジェクトで、Valueはセルの内容を表すプロパティだから、これに「=」を使って「"薬師寺"」と指定すると、セル「A1」に「薬師寺」という値が表示される。「薬師寺」は文字列であるため、ダブルクォーテーション(")で両側を挟む。
次に、メソッドについて見ていこう。
「メソッド」とは、「命令」「操作」「動作」「振る舞い」といった意味を指す。言い換えれば「オブジェクト自身の動作によって返される結果の手続き」のことだ。
例えば、セルには次の表2のようなメソッドがある。
メソッド名 | 概要 |
---|---|
Select | ワークシートの中のセルの選択を表す |
Delete | 対象セルを削除 |
Insert | 対象セルに同サイズの空白セルを挿入 |
例えば「A1セルを選択せよ」という命令を与えるには、下記のように書く。
Range("A1").Select
「Range("A1")」はセルを表すオブジェクトで、「Select」はセルを選択するメソッドとなる。
また、「引数」を使って命令の内容を細かく指示することも可能だ。引数を指定するには、メソッド名の後に半角スペースを入力して内容を記述する。
例えば、「A2〜A5のセルの数値を昇順でソートする」には下記のように書く。
Range("A2:A5").Sort Key1:=Range("A2")
Range("A2:A5")はA2〜A5の範囲を表すセルを表すオブジェクト、Sortは「並べ替え」を行うメソッドだ。「Key1」はソートの基準となるキーを指定するという意味の「パラメータ」で、「Range("A2")」が「引数」である。「:=」でパラメータに対して引数を指定することになる。上記プログラムは、「キーにはセルの「A2」を指定してA2〜A5の範囲セルを並べ替える」ことを意味する。
実行すると、A2〜A5の数値が昇順でソートされる(図1)。
※Sort(データの並べ替え)については別の回で詳説する。
さらに、複数の引数を指定することも可能だ。
WorkSheets.Add(Before,After,Count,Type)
Beforeは、第1引数、Afterは第2引数、Countは第3引数、Typeは第4引数となる。BeforeとAfterはどちらか一方を指定する。同時に指定することはないと思っていい。
例えば、ワークシートを「住所録」シートの後ろに4枚追加する場合は、下記のように書く。
WorkSheets.Add After:=WorkSheets("住所録"),Count:=4
「After:=WorkSheets("住所録")」は第2引数、「Count:=4」は第3引数となる。
引数名を複数使って引数を指定する場合に、省略した引数の区切りの「,」を記述する必要はない。また、順番も関係なく指定できる。引数は、「{引数名}:={値}」といった形式を用いる。詳細はTIPS「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。
Copyright © ITmedia, Inc. All Rights Reserved.