VBAでマクロを作成する場合は、「何に対して操作を実行するのか」をオブジェクトで指定する必要がある。Excelで操作する対象が、どのようなオブジェクトとして用意されているか見てみよう。
VBAで指定できるオブジェクトには、Workbookオブジェクト、Worksheetオブジェクト、Rangeオブジェクトがある(図2)。
オブジェクトにおいて、同じ種類のオブジェクトの集まりを「コレクション(集合体)」と呼ぶ。
次は、VBAで指定できるWorksheetオブジェクトとWorksheetsコレクションについて図3で説明しよう。
オブジェクトは、Excelそのものを指定するApplicationオブジェクトを最上位とし、階層構造で構成される(図4)。
記述例として、「Book1.xlsx」ファイルの「住所録」シートのセル「A1」を指定するには下記のように書く。
Workbooks("Book1.xlsx").Worksheets("住所録").Range("A1").Select
次に「関数」について見ていこう。
「関数」とは、「計算などの手順をまとめて定義した数式」のことを指す。
例えば、文字列関数に「Len」という関数がある。これを下記のように記述する。
Dim {値を入れる器} As Integer {値を入れる器} = Len("薬師寺国安")
こう書くと{値を入れる器}には「5」という数字が入る。Len関数は指定した文字列の長さを取得する関数だ。
このようにカッコの中に何かを入れると、それを元に何かを返す、そういった働きをするものが「関数」だ。
VBAには多くの関数が用意されている。主なものとして下記の表3のようなものがある。
分類 | 関数名 | 概要 | |
---|---|---|---|
文字列操作関数 | Len | 指定された文字列の文字数を返す | |
Left | 文字列の左端から指定された文字数分の文字列を返す | ||
Right | 文字列の右端から指定された文字数分の文字列を返す | ||
Instr | ある文字列の中から指定した文字列を検索し、最初に見つかった文字列の開始位置を示す整数型(Integer)の値を返す | ||
Replace | 任意の文字列で、特定の文字列を、指定した文字列に置き換えた文字列を返す | ||
StrComp | 文字列比較の結果により、-1、0、1のいずれかを返す | ||
日付、時刻関数 | DateAdd | 任意の日付や時間に特定の間隔を追加してその結果を返す | |
DateDiff | 2つの日付型(Date)値の間の時間間隔数を指定する長整数型(Long)の値を返す | ||
Year | 年を表す、1〜9999の整数型(Integer)の値を返す | ||
Month | 月を表す、1〜12の整数型(Integer)の値を返す | ||
Day | 日付を表す、1〜31の整数型(Integer)の値を返す | ||
Now | 現在の日付と時刻に対応するシリアル値を返す | ||
数値操作関数 | Round | 指定された小数点位置で丸めた数値を返す | |
Rnd | 単精度浮動小数点数型(Single)の乱数を返す | ||
Int | 指定した数値の整数部分を返す | ||
Fix | 指定した数値の整数部分を返す | ||
※IntとFixの違いは、指定するNumberに負の値を指定した場合に現れる。Int関数はその数値以下の最大の負の整数を返すのに対して、Fix関数は最小の負の整数を返す | |||
データ変換関数 | CBool | 引数を評価してブール型(真(True)/偽(False))を返す(ブール型に変換する)関数 | |
CByte | 引数を評価してバイト型(Byte)データに変換する関数 | ||
CCur | 指定された式をバリアント型(内部処理形式が通貨型(Currency)の Variant)に変換して返す | ||
CDate | 引数を評価して日付型に変換する関数 | ||
CInt | 指定した値を数値型(Integer)に変換 | ||
CLng | 指定された式をバリアント型 (内部処理形式が長整数型(Long)の Variant) に変換して返す | ||
CStr | 指定した値を文字列型(String)に変換 | ||
CVar | 引数を評価してバリアント型に変換する関数 | ||
その他 | MsgBox | ダイアログ ボックスにメッセージを表示 | |
InputBox | 文字入力を行うボックスを表示させる | ||
※こちらの表は【VB】関数一覧 - オープンリファレンス(クリエイティブ・コモンズ 表示―継承ライセンス 2.1)の表を基に改変したものです |
プログラムの中で計算するときは、関数の他に「算術演算子」を使う。算術演算子の種類には表4のようなものがある。
演算子 | 説明 |
---|---|
+ | 足し算 |
- | 引き算 |
* | 掛け算 |
/ | 割り算 |
^ | べき乗 |
\ | 割り算の結果の整数部を返す |
Mod | 割り算の結果の余りを返す |
演算子には他に、冒頭で紹介した「=」(代入演算子)や「連結演算子」として「&(文字をつなぐ)」がある。また「比較演算子」「論理演算子」などもあるが、複雑なので、後の連載で紹介しよう。
InputBox関数を用いて、入力された値をExcelの「A1」のセルに表示させてみよう。
リスト1のようなコードをVBEで記述する。すると入力ボックスが表示され、名前を入力して[OK]ボタンをクリックすると「A1」のセルに入力した名前が表示される。
Sub お名前は() Range("A1").Value = InputBox(prompt:="お名前は?") End Sub
図5はリスト1のコードを入力した結果だ。まだ、この時点で理解しておく必要はない。
次に、ワークシート関数について見てみよう。
ワークシート関数とは、そのものずばりワークシートで使用する関数で、VBA関数とは別のものだ。ワークシート関数はWroksheetFunctionクラスのメンバーだ。VBAからワークシート関数を呼び出すにはApplicationオブジェクトのWorksheetFunctionプロパティを使用する。
※前述しているが、「メンバー」とはコレクション内の各オブジェクトのことを指す。
例えばVBAで、数値の合計を求めたいときにSUM関数を使う。では、WorksheetFunctionプロパティを使って、合計を求めてみよう。
書式は下記のようになる。
Application.WorksheetFunction.{ワークシート関数}({引数})
「ワークシート関数」にはワークシート関数を指定する。使用できるワークシート関数は、記述時に表示される入力候補の一覧で、確認できる(図6)。
「引数」にはワークシート関数の引数を指定する。セル範囲を指定する場合はRangeオブジェクトを指定すると良い。
では、コードを書いてセル「B7」に合計を表示させてみよう。図7のようなコードを記述し、上部のツールバーにある右を向いた▲アイコンをクリックすると、合計が表示される。
ここまで、まだ説明もしていないのにVBEの画面を表示してコードを書いてきたが、この辺りでVBEの画面構成について解説しておこう。
Copyright © ITmedia, Inc. All Rights Reserved.