連載
» 2016年07月07日 05時00分 公開

初心者でも図解で分かる! VBEの基本的な使い方とVBAプログラムの基礎文法Excelマクロ/VBAで始める業務自動化プログラミング入門(2)(2/4 ページ)

[薬師寺国安,PROJECT KySS]

VBAで指定できる主なオブジェクトとコレクション

 VBAでマクロを作成する場合は、「何に対して操作を実行するのか」をオブジェクトで指定する必要がある。Excelで操作する対象が、どのようなオブジェクトとして用意されているか見てみよう。

 VBAで指定できるオブジェクトには、Workbookオブジェクト、Worksheetオブジェクト、Rangeオブジェクトがある(図2)。

図2 VBAで指定できるオブジェクトとコレクション

 オブジェクトにおいて、同じ種類のオブジェクトの集まりを「コレクション(集合体)」と呼ぶ。

 次は、VBAで指定できるWorksheetオブジェクトとWorksheetsコレクションについて図3で説明しよう。

図3 VBAで指定できるWorksheetオブジェクトとWorksheetsコレクション

 オブジェクトは、Excelそのものを指定するApplicationオブジェクトを最上位とし、階層構造で構成される(図4)。

図4 オブジェクトの階層構造

 記述例として、「Book1.xlsx」ファイルの「住所録」シートのセル「A1」を指定するには下記のように書く。

Workbooks("Book1.xlsx").Worksheets("住所録").Range("A1").Select
※Applicationオブジェクトの記述は省略が可能

 次に「関数」について見ていこう。

VBAの「関数」とは

 「関数」とは、「計算などの手順をまとめて定義した数式」のことを指す。

 例えば、文字列関数に「Len」という関数がある。これを下記のように記述する。

Dim {値を入れる器} As Integer
{値を入れる器} = Len("薬師寺国安")

 こう書くと{値を入れる器}には「5」という数字が入る。Len関数は指定した文字列の長さを取得する関数だ。

 このようにカッコの中に何かを入れると、それを元に何かを返す、そういった働きをするものが「関数」だ。

 VBAには多くの関数が用意されている。主なものとして下記の表3のようなものがある。

表3 主なVBA関数
分類 関数名 概要
文字列操作関数 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)の表を基に改変したものです

VBAの「算術演算子」とは

 プログラムの中で計算するときは、関数の他に「算術演算子」を使う。算術演算子の種類には表4のようなものがある。

表4 算術演算子の種類
演算子 説明
+ 足し算
- 引き算
* 掛け算
/ 割り算
^ べき乗
\ 割り算の結果の整数部を返す
Mod 割り算の結果の余りを返す

 演算子には他に、冒頭で紹介した「=」(代入演算子)や「連結演算子」として「&(文字をつなぐ)」がある。また「比較演算子」「論理演算子」などもあるが、複雑なので、後の連載で紹介しよう。

VBA関数の使用例

 InputBox関数を用いて、入力された値をExcelの「A1」のセルに表示させてみよう。

 リスト1のようなコードをVBEで記述する。すると入力ボックスが表示され、名前を入力して[OK]ボタンをクリックすると「A1」のセルに入力した名前が表示される。

Sub お名前は()
  Range("A1").Value = InputBox(prompt:="お名前は?")
End Sub
リスト1 InputBoxの使用例

 図5はリスト1のコードを入力した結果だ。まだ、この時点で理解しておく必要はない。

図5 InputBox関数を使ってみた

 次に、ワークシート関数について見てみよう。

VBAの「ワークシート関数」とは

 ワークシート関数とは、そのものずばりワークシートで使用する関数で、VBA関数とは別のものだ。ワークシート関数はWroksheetFunctionクラスのメンバーだ。VBAからワークシート関数を呼び出すにはApplicationオブジェクトのWorksheetFunctionプロパティを使用する。

※前述しているが、「メンバー」とはコレクション内の各オブジェクトのことを指す。

 例えばVBAで、数値の合計を求めたいときにSUM関数を使う。では、WorksheetFunctionプロパティを使って、合計を求めてみよう。

 書式は下記のようになる。

Application.WorksheetFunction.{ワークシート関数}({引数})

 「ワークシート関数」にはワークシート関数を指定する。使用できるワークシート関数は、記述時に表示される入力候補の一覧で、確認できる(図6)。

 「引数」にはワークシート関数の引数を指定する。セル範囲を指定する場合はRangeオブジェクトを指定すると良い。

図6 使用できるワークシート関数の一覧

 では、コードを書いてセル「B7」に合計を表示させてみよう。図7のようなコードを記述し、上部のツールバーにある右を向いた▲アイコンをクリックすると、合計が表示される。

図7 ワークシート関数で合計が表示された

 ここまで、まだ説明もしていないのにVBEの画面を表示してコードを書いてきたが、この辺りでVBEの画面構成について解説しておこう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。