VBAの変数について解説。

システムトレード

この記事ではプログラミング初心者向けに、VBAの基本を分かりやすく解説しています。

主に計算に必要な演算子変数の基本事項を解説しています。

 

※当サイトではVBAの基本を解説しています。

もし、VBAの基本が分からなければ、下記リンクより基礎を学習できます。

VBAの開発環境の構築方法を解説

VBAのモジュールを作成する方法を解説

VBAのデータ入力方法を解説

④VBAの変数について解説(本記事)

VBAの繰り返し処理について解説

VBAの条件分岐処理について解説

Excelでバックテストする方法。【VBAによるツール開発】

 

 
マンモス
マンモス
はじめましてマンモスです。
プログラミング知識ゼロからシステムトレードを自作できるようになった経験を活かし、この記事を書いてます。

 

 

VBAの算術演算子を用いた計算

算術演算子とは四則演算などに使う、+、-、÷、×といった記号のことです。

ただし、一般的な数学などで用いる演算子とは少し違います。

以下の表をご覧下さい。

演算子演算名結果
+足し算4 + 15
引き算5 – 14
*掛け算3 * 412
/割り算9 / 24.5
\割り算の商9 \ 24
Mod割り算の余り9 Mod 21
^べき乗3 ^ 29

  また「=」は代入演算子と呼ばれ、「右辺を左辺に代入」する機能があります。

一般的な計算とは少し違うことに注意しましょう。  

 

VBAでの使用例

Sub test()
  Range(“A1”) = 5 * 1
  Range(“B1”) = Range(“A1”) + 1
  Range(“C1”) = Range(“B1”) + Range(“A1”)
End sub
 
解説
 
Range(“A1”) = 5 * 1
→セルA1に「5 * 1」の計算結果を代入します。
 
Range(“B1”) = Range(“A1”) + 1
→セルB1に「セルA1の値 + 1」の計算結果を代入します。
 
Range(“C1”) = Range(“B1”) + Range(“A1”)
→セルC1に「セルB1の値 + セルA1の値」の計算結果を代入します。
 
Range(“A1”)
→これはセルA1の値を表すコードです。
()の中の値がセルの座標を表します。

 

上記のコードように数字同士の計算、セルと数字の計算、セル同士の計算など様々な計算ができます。

また、計算の優先順があることにも注意しましょう。

 

以下の表が優先順です。  

優先順演算子
1^
2–  (引き算ではなく符号反転)
3*、/
4\
5Mod
6+、-

※()で括ることで優先順位の繰り上げができます。  

 

くまさん
くまさん
日常生活での計算よりめんどい・・・
マンモス
マンモス
計算の順番を理解しておかないと、 気づかないうちに計算結果が間違ってることがあるので注意!

VBAの変数とは?

プログラミング界隈では、変数のことを説明するときによく「箱」と表現されます。

たとえばセルA1の値を一時的に箱(変数)にしまっておいて、必要になったら使うというようなイメージです。

プログラミングにおいて変数は基礎中の基礎のため、必ず覚えましょう。

 

まずは変数宣言をする

変数を使うにはまず「変数宣言」する必要があります。 構文は以下のようになります。

Dim 変数名 as データ型    

 

ただし、変数の命名規則に注意しましょう。

使える文字→英数字(全角/半角)、日本語(漢字含む)、アンダーバー(_)
 
注意点
①先頭に数字、アンダーバー(_)は使えない
②予約語は使えない
(VBAで使用する特定のコードのこと。重複防止のためです。)
③長さは半角255文字まで

 

データ型については、以下の記事で詳しく解説しています。

 

変数に値を代入

変数に値を代入する前に、まずは変数を宣言し準備します。

Dim A as Integer

これで変数「A」を使う準備ができました。

変数に値を代入する構文は以下のようになります。

A = 1

これでAに1というデータを代入しました。

また、Rangeオブジェクトなども直接代入できます。

A = Range(“A1”)

この場合、セルA1の値はIntegerの範囲の値でなければならないことに注意しましょう。

Integerの変数にIntegerの範囲を超える値は入力できません。

また、実数を整数型の変数に入れた場合は、四捨五入され強制的に整数になります。

 

もし文字列など入れた場合は「型が一致しません」とエラー発生し、データ型の範囲を超えた値を入れると「オーバーフローエラー」が発生します。

このような場合エラーメッセージに表示されている「デバック」を押すと、エラー発生行が黄色く強調表示されます。

エラーを直したら、「F5キー」を押して継続して実行するか、「F8キー」を押してステップインにて実行しましょう。

 

ステップインとは?
「F8キー」を押すことで1行づつ実行できます。
プログラム冒頭からステップインすることもでき、プログラムの動作を確認しながら実行できます。

 

ただし、LongIntegerの値を入れることはできます。

なぜなら、Longの値の範囲がIntegerの値の範囲をカバーしているからです。

このように上位互換のデータ型は、下位の型の範囲をカバーしているためエラーは発生しません。

 

変数は、他の変数やセルの代入に使用することもできます。

Sub test1()

Dim A as Integer
Dim B as Integer

  A = Range(“A1”)
  Range(“B1”) = A
  B = A

End sub

 

また、以下のように変数宣言を省略して変数を使うこともできます。

ただし、この方法で変数を使用すると全てVariant型になり、おすすめできません。

なぜかというと、想定しているデータと違うデータ型が入ったり、単なるスペルミスで変数になっていたりとバグの温床になるからです。

基本的には変数宣言するようにしましょう。

 

Sub test2()

 Range(“A1”) = A

End sub

 

変数宣言を強制する方法

以下の設定で変数宣言を強制させることができます。

 

①ツールバーよりオプションをクリック

②編集タブの「変数の宣言を強制する」にチェックし「OK」を押す。

③新規のモジュールを作成するとモジュール冒頭に「Option Explicit」の文字が自動で入力されます。

 

これで変数宣言の強制は完了です。

 

変数のスコープ(寿命)

変数にはスコープと呼ばれる寿命があります。

変数のスコープは、変数宣言の方法や場所によって変わってきます。

以下のプログラムのように、モジュールの冒頭に変数宣言した「A」はプロシージャのtest1、test2両方で使用可能です。

つまり、モジュール内であればどのプロシージャからでも使用できます。

 

Option Explicit

Dim A as Integer

Sub test1()

Dim B as Integer

  A=1
  B=2
  Range(“A1”) = A
  Range(“B1”) = B 

End sub

Sub test2()

  Range(“A1”) = B

End sub

 

「A」に対して、プロシージャtest1内に変数宣言した「B」はtest1内でしか使用できません。

プロシージャtest2内で使おうとすると、以下のようにエラーがでて使えません。

 

 

これが変数のスコープです。

モジュール内の冒頭で宣言した変数はモジュール内のプロシージャ全てで使用可能。
プロシージャ内で宣言した変数は、そのプロシージャでしか使用できません。

 

また、以下の例ではtest1、test2内で同名の変数「A」を宣言しています。
しかし、これは名前が同じだけであり、全く違う変数になります。
 
 

Option Explicit

Sub test1()
Dim A as Integer

  A=1
  Range(“A1”) = A 

End sub

Sub test2()
Dim A as Integer

  A=2
  Range(“B1”) = A

End sub

 

タイトルとURLをコピーしました