「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Excel VBAをはじめから(その03/X)

 仕事で未だに使うことのある\mathrm{Excel\ VBA}を改めて体系的に学びたく

を読んでいく。


power-of-awareness.com

3. VBAの基礎文法

3.1 変数の使い方

3.1.1 変数の宣言方法

 \mathrm{VBA}で変数を扱うには、\mathrm{Dim}ステイトメントで変数(とその型)を定義する*1。他方で宣言無しで変数にいきなり値を代入することもできる。

Sub macro3_1()
    Dim foo As Long
    foo = 10
    foo = foo * 5
    boo = 10 ' booは宣言していない
    Debug.Print "foo+booの値", foo + boo
End Sub

 オブジェクトを扱うこともできる。

Dim rng As Range
Set rng = Range("A1:C3")
rng.Value = "VBA"

 \mathrm{VBA}は変数の宣言時に値を代入することはできない。

Dim foo As Long = 10 ' 左はエラー

 スペルミスなどを防ぐべく宣言無しの変数利用を防ぐためには、モジュールの先頭に\mathrm{Option Explicit}と記述しておく。

'以下はエラーを起こす
Option Explicit

Sub macro3_1()
    Dim num
    num = 10
    nun = num * 5
End Sub



 毎回の\mathrm{Option Explicit}宣言が面倒であれば、オプションから設定を行うと宣言無しの変数利用を恒常的に禁止することができる。

3.1.2 よく利用するデータ型
データ型
用途
\mathrm{String}
文字列
\mathrm{Integer}
整数型。-32,76832,767の範囲の整数
\mathrm{Long}
長整数型。-2,147,483,6482,147,483,647の範囲の整数
\mathrm{Single}
単精度浮動小数点数型。

正の値:1.401298E-453.4028235E+38

負の値:-3.4028235E+38-1.401298E-45
\mathrm{Double}
倍精度浮動小数点型。

正の値:4.94065645841246544E-3241.79769313486231570E+308

負の値:-1.79769313486231570E+308-4.94065645841246544E-324
\mathrm{Date}
日付型。年月日・時分秒を扱う。
\mathrm{Boolean}
真偽値型。正の場合は\mathrm{True}、の場合は\mathrm{False}
\mathrm{Object}
汎用オブジェクト型。任意のオブジェクトを代入可能
\mathrm{Variant}
バリアント型。どのような値・オブジェクトでも代入可能
固有オブジェクト
\mathrm{Range}\mathrm{Worksheet}など、特定の種類のオブジェクト
3.1.3 変数に値を代入する

 宣言した変数に値を代入・再代入するには「=」演算子を用いる。
 \mathrm{VBA}ではインクリメントやデクリメントはできない。素直に+1/-1した値を再代入する。

' カウントアップ/ダウン
num++ 'エラー
num-- 'エラー

Dim num As Long
num = 1
num = num + 1

' 加算代入・乗算代入
num += 10 'エラー
num *= 5 ' エラー

Dim num As Long
num = 1
num = num + 10
num = num * 5


 変数にオブジェクトを代入するには、=演算子ではなく\mathrm{Set}ステートメントを用いる*2

' 変数にオブジェクトを代入
Set オブジェクト変数 = セットしたいオブジェクト
3.1.4 変数のスコープ

 \mathrm{VBA}の変数は、基本的に1つのマクロ内で宣言された変数がそのマクロの中でのみ有効であるというルール下にある。もし複数のマクロで共有して使用したい変数がある場合は、マクロの外側で\mathrm{Dim}ステートメントで記述する。

Option Explicit

' マクロ外で定義した変数はグローバルに利用可能
Dim X As Long

Sub macro1()
    ...
End Sub

Sub macro2()
    ...
End Sub

このようなマクロ外で宣言された変数は、モジュールレベル変数と呼ぶ。なおモジュールレベル変数はマクロが停止されるまで値を保持する。

3.1.5 定数の定義

 \mathrm{VBA}でユーザー定義の定数を利用するには、\mathrm{Const}ステートメントを利用する。

' 定数の定義
Const 定数名 As データ型 =
3.1.6 変数の命名規則

 変数を利用する際には、自分なりの命名規則を決めた方が良い。

  • 変数の名づけルール例
変数名の例
意図・例
\mathrm{str}, \mathrm{num}
文字列、数値といった値を扱う変数。データ型が分かるようにデータ型を短縮した名前
\mathrm{tmp}, \mathrm{buf}
一時的にデータを格納する変数名。
\mathrm{rng,sh,bk}
使用するオブジェクトの短縮名
\mathrm{i,j,k}
ループ処理に用いる変数名
\mathrm{arr},\mathrm{strList},\mathrm{numList}
配列を扱う際の変数名。\mathrm{Array},\mathrm{List}の短縮名
\mathrm{scoreNumber}
「用途+データ型」という変数名
売上
日本語等の2バイト文字で変数名を付ける
\mathrm{myStr}
すべての変数に統一した接頭辞を付けて、自分が定義した変数であることを可視化

 なお\mathrm{VBA}では、

  • 大文字と小文字を区別しない
  • アンダースコア( _ )を利用できるものの、アンダースコアを変数名の先頭にすることはできない

*1:VBAは型を定義しなくてもよい。そのときはどのような値・オブジェクトでも格納可能なVariant型として扱われる。

*2:厳密に言えば、リテラルを代入する際はLetを宣言することになっているが、省略可能。これに対してSetは省略できない。

プライバシーポリシー お問い合わせ