VBAにおける「オブジェクト」とは,Excel上で操作する対象:ブック,シート,セル,モジュール,グラフ,図形などを表します.
作成しているプログラムにどのようなオブジェクトがあるかは,VBEの左側の領域の「プロジェクトエクスプローラー」に表示されます.
オブジェクトはそれぞれの対象に応じて何種類かの「プロパティ」と呼ばれる属性(特徴)を持ち, プログラムの中でオブジェクトのプロパティを呼び出すときは,次のように「.」(ピリオド)で区切って記述します.
オブジェクト.プロパティ
それぞれのオブジェクトがどのようなプロパティを持つのかは,VBEのプロジェクトエクスプローラーからオブジェクトを選択すると,その下方に選択したオブジェクトのプロパティが表示されます.プロパティの意味は必要に応じて説明しますが,取り上げなかったものは各自インターネット等で調べてください.
それぞれのプロパティには何らかの「値」が設定されています. プログラムの中でオブジェクトのプロパティに値を設定するときは,「=」(等号)を使用します.この時の等号の意味は,数学で使用する場合の「等しい」ではなく「代入」を意味します.
オブジェクト.プロパティ = 値
逆にプロパティの値を取り出したい場合は等号の右辺に書きます.例えばオブジェクト1のプロパティをオブジェクト2のプロパティに代入するときは次のように記述します.
オブジェクト2.プロパティ = オブジェクト1.プロパティ
一般的なプログラム言語では,プログラムとデータをやり取りする場合にPCの標準的な入出力を使用しますが,Excel VBAの場合はExcelのセルを使って入力,出力ができます.したがって,この講義では基本的にExcelのシート上で入出力を行います.
Excelの1つのセルはオブジェクトで,「Range("セル番地")」または「Cells(行番号 , 列番号)」という名前で呼び出せます.セルに入力されているデータは,セルオブジェクトの「Value」プロパティに設定されています.
セル番地が「B3」のセルに「5」を表示する場合は次のように記述します.
Range("B3").Value = 5
また,B3 は3行,2列の位置に対応するので,Cellsを使用する場合は次のように書きます.
Cells(3,2).Value = 5
「B3」または「(3, 2)」のセルの内容を取り出して,「C3」または「(3,3)」に代入するときは次のように書きます.
Range("C3").Value = Range("B3").Value
または
Range("C3").Value = Cells(3,2).Value
または
Cells(3,3).Value = Range("B3").Value
または
Cells(3,3).Value = Cells(3,2).Value
注意:ExcelやRangeで使用する「セル番地」,例えば B3 は B 列(2列)3 行を表しますが,Cellsでは(行,列)と逆の順番で指定するので気を付けましょう.
コードウィンドウでプログラム ex_01 の下に新しい Sub プロシージャ「ex_021」を作成します.
上記の例を参考にして,セルに入力した数値と文字を入力したセルの右隣に表示するプログラムを作りましょう.分かりやすくするために,使用するセルはこのプログラムを登録するボタンの下に来る位置のセルにしてください.この時,数値はRangeを,文字はCellsを使って作ってください.練習問題1と同様にボタンに登録し,ボタンは ex_01 の横に適当な間隔を開けて配置してください.
プログラムの中で数値や文字などのデータに対しての処理を記述する場合,データそのものを使用すると非常に複雑な書き方になり,データを変更する場合にはプログラムを最初から書き直すことになってしまいます.そこで,通常はデータを仮想的に表す文字列(データが入っている箱のようなもの)を使用して作業内容だけを記述します.この文字列を「変数」といいます.こうすれば,作業内容の記述は単純になり,データの変更も変数に入れるデータを変更するだけで済みます.
例えば,1を10回合計する場合,データそのものを使って書くと
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
2を10回に変更するには,全て書き直して
2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
これを変数( i とする)を使って書けば,
i = 1(最初の値を設定,等号は代入を表す), i = i + 1 (これを9回繰り返すように指示)
変更する場合
i = 2 ,i = i + 2
とするだけで済みます.
VBAで扱うことのできるデータには種類があり,これらをデータ型と呼びます.変数を使用する場合には代入するデータの種類に対応した変数を用意する必要があります.そこで,どのような型があるのかを見てみましょう.
型名 | 表記 | 範囲 | メモリ |
---|---|---|---|
バイト型 | Byte | 0 〜 255 の正の整数 | 1バイト |
ブール型 | Boolean | True または False | 2バイト |
整数型 | Integer | -32768 〜 32767 の整数 | 2バイト |
長整数型 | Long | -2147483648 〜 2147483647 の整数 | 4バイト |
通貨型 | Currency | -922337203685477.5808 〜 922337203685477.5807 の数値,少数部は4桁で固定,内部的には整数 | 8バイト |
単精度浮動小数点数型 | Single | -3.402823E+38 〜 -1.401298E-45 , 1.401298E-45 〜 3.402823E+38 の小数点を含む数値(E±n = 10±n) | 4バイト |
倍精度浮動小数点数型 | Double | -1.79769313486231E+308 〜 -4.94065645841247E-324 , 4.94065645841247E-324 〜 1.79769313486232E+308 の小数点を含む数値 | 8バイト |
日付型 | Date | 日付と時刻 | 8バイト |
文字列型 | String | 0 〜 65535 文字 | 10バイト+文字列の長さ |
オブジェクト型 | Object | オブジェクトへの参照 | 4バイト |
バリアント型 | Variant | あらゆる種類の値 | 22バイト+文字列の長さ |
プログラムの中で変数を使用するためには,実際に変数を使用する前に「変数名」(変数に使用する文字や文字列)と「データ型」を指定する必要があります.これを変数の「宣言」といいます.
変数名は基本的にどのような文字を使用しても構いませんが,格納するデータの内容が分かるような名前にした方が使いやすいです.また,名前の付け方にはいくつか制限があります.
具体的な宣言の仕方は,次のように「Dim ~ As ~」という命令を使って記述します.
Dim 変数名 As データ型
Dim i As Integer (変数 i を整数型として宣言) Dim radius_1 As Double (変数 radius_1 を倍精度浮動小数点数型として宣言) Dim myName As String (変数 myName を文字列型として宣言) i = 7 radius_1 = 27.3 myName = "檸檬"
コードウィンドウでプログラム ex_021 の下に新しい Sub プロシージャ「ex_022」を作成します.
セルに文字,整数,小数点付き数値を入力しておき,それらを読み取って変数に代入する.その後で,変数の内容を入力したセルの右隣のセルに表示するプログラムを作成してみましょう.
注意:変数の宣言は入力するデータの型に一致させる必要があります.
入出力に使用するセルはこのプログラムを登録するボタンの下に来る位置のセルにしてください.今までと同様にプログラムはボタンに登録し,ボタンは ex_021 の横に適当な間隔を開けて配置してください.
プログラム中で常に同じ値を使用する場合,変巣と同様に仮想的な文字列に置き換えて扱うことができる.この文字列を「定数」と呼び,次のようにして宣言する.
Const 定数名 As データ型 = 値
定数は,変数と違って一度値を設定すると変更することができない.
VBAにおいてプログラム中で計算式を記述する場合には「算術演算子」という記号を使用する.優先順位は,演算子が複数ある場合に優先的に計算される順番です.通常の計算式と同様に,優先順位の低い演算を先に計算させる場合は括弧「( )」を用います.
算術演算子 | 意味 | VBAでの数式 | 実際の数式 | 優先順位 |
---|---|---|---|---|
+ | 加算 | 3 + 2 | 3 + 2 | 第3 |
- | 減算 | 3 - 2 | 3 - 2 | 第3 |
* | 乗算 | 3 * 2 | 3 × 2 | 第2 |
/ | 除算 | 3 / 2 | 3 ÷ 2 | 第2 |
^ | べき乗 | 3 ^ 2 | 32 | 第1 |
\ | 整数除算 | 3 \ 2 | [3 ÷ 2] | 第4 |
Mod | 剰余 | 3 Mod 2 | 3 mod 2 | 第5 |
Excelのセルに入力した数値を2つ読み込んで,変数に代入した後,それらに対して算術演算子を使用した簡単な計算をさせるプログラムを作ってみます.プロシージャ名は enzan1 とします.
シングルクォーテーション「'」に続く部分は「コメント文」と呼ばれ,プログラムにおいては無視されます.プログラム中にメモや説明を残したいときに使用されます.
Excelには次のように入力してあるとします.1行目と1列目はExcelのセル番地です.
A | B | |
---|---|---|
1 | 数値1 | 3 |
2 | 数値2 | 2 |
3 | ||
4 | 和 | |
5 | 差 | |
6 | 積 | |
7 | 商 |
Sub enzan()
'変数の宣言
Dim a As Integer
Dim b As Integer
'データの読み込み
a = Range("B1").Value
b = Range("B2").Value
'計算値の表示
Range("B4").Value = a + b
Range("B5").Value = a - b
Range("B6").Value = a * b
Range("B7").Value = a / b
End Sub
コードウィンドウでプログラム ex_022 の下に新しい Sub プロシージャ「ex_023」を作成します.
次のような図形の青色の部分の面積を計算するプログラムを作ってみましょう. セルに大小それぞれの円の半径を入力し,面積を計算した結果を入力したセルの下のセルに表示するプログラムを作りましょう.また,円周率はプログラム内で定数として宣言して使用してください.入出力に使用するセルはこのプログラムを登録するボタンの下に来る位置のセルにしてください.今までと同様にプログラムはボタンに登録し,ボタンは ex_022 の横に適当な間隔を開けて配置してください.
入出力するセルの記述例
数値 | |
---|---|
外側の半径 | |
内側の半径 | |
面積 |
VBAでの数式には算術演算子以外にも様々な関数が用意されています.主なものを以下に表します.変数 x に代入されている数値に対応する関数値を求める場合について記述しています.
関数 | VBAでの記述 | 数学での表記 | 意味 |
---|---|---|---|
絶対値 | Abs(x) | |x| | xの絶対値 |
指数関数 | Exp(x) | ex | 自然対数の底のx乗 |
対数関数 | Log(x) | log x | xの自然対数 |
正弦関数 | Sin(x) | sin x | xのsin |
余弦関数 | Cos(x) | cos x | xのcos |
正接関数 | Tan(x) | tan x | xのtan |
平方根 | Sqr(x) | √x | xの平方根 |
コードウィンドウでプログラム ex_023 の下に新しい Sub プロシージャ「ex_024」を作成します.
セルに入力した4個の実数値を使って,以下の数式を計算した結果を入力したセルの下のセルに表示するプログラムを作りましょう.分かりやすくするために,使用するセルはこのプログラムを登録するボタンの下に来る位置のセルにしてください.今までと同様にプログラムはボタンに登録し,ボタンは ex_023 の横に適当な間隔を開けて配置してください.
計算式:入力した数値を順に a, b, c, d とする:一般に函数の変数は実数(小数点付きの数)です,変数の型宣言に気を付けましょう.
入出力するセルの記述例
入力数値 | 問題番号 | 計算結果 | ||
---|---|---|---|---|
a | 1 | |||
b | 2 | |||
c | 3 | |||
d | 4 | |||
5 |