C言語やJAVAなどで欠かせないインクリメントやデクリメントですが、ExcelやAccessなどで使用するVBAでも使えるか、調べてみました。
・インクリメント
変数の値を1増やす演算 例:i++、++i
・デクリメント
変数の値を1減らす演算 例:i--、--i
VBAでインクリメントやデクリメントは使えない?
VBAにはインクリメントやデクリメントという概念がなく、使えません。
試しに、i++やi--と書くと以下のエラーメッセージが出ます。
コンパイルエラー:
修正候補:式
++iやi--と書くと以下のエラーメッセージが出ます。
コンパイル エラー:
修正候補: 行番号 または 行ラベル または ステートメント または ステートメントの最後
VBAでインクリメントやデクリメントが使えない理由としては、
VBA(Visual Basic for Applications)はBASICというプログラミング言語がルーツなので、インクリメントやデクリメントが存在するC言語がルーツのプログラミング言語とは、歴史が異なるからです。
参考:VBA(Visual Basic for Applications)年表 (1964) BASIC ↓ (1985) QuickBASIC ↓ (1991) Microsoft Visual Basic ↓ (1993) Visual Basic for Applications |
代替案について
気になる代替案ですが、残念ながら有効なものはありませんでした。
加算代入演算子や減算代入演算子は?
試してみましたが、インクリメントやデクリメントと似たことができる加算代入演算子や減算代入演算子ではうまくいきませんでした。
(参考)
・加算代入演算子
変数の値に右辺の値を加算する演算 例:i+=1
・減算代入演算子
変数の値に右辺の値を減算する演算 例:i-=1
以下、エラーメッセージです。
コンパイルエラー:
修正候補:式
インクリメントやデクリメントと同様に、C言語がルーツのプログラミング言語で使用できる加算代入演算子や減算代入演算子についても、概念がないようですね。
関数を作ってみるのは?
無理やり捻りだすとするのであらば、インクリメントやデクリメントする関数を作るのはどうでしょう。
例えば、以下の関数「Increment(ByRef)」でインクリメントできます。
'呼び出し元の関数
Public Function TestIncrement()
Dim i As Int
i = 0
~
Increment i
~
End Function
'インクリメント用関数
Sub Increment(ByRef i)
i = i + 1
End Sub
ただこれははっきり言ってしまえば、自己満足なコードです。
あまり分かりやすくなったとは言いづらいですし、作った本人はいいでしょうが、他の人がコードを見たとき読みにくいコードになるでしょうね。。
以上、今回はインクリメントやデクリメントがVBAでも使えるか、また代替案は何かないか調べてみました。
以下がそのまとめです。
・VBAにインクリメントやデクリメントという概念はない ・代替案で有効なものもないため、 i = i + 1 という一般的な書き方をするのが良い |
そもそもVBAのルーツであるBASICはあくまで初心者向けの言語のため、いくらインクリメントやデクリメントが分かりやすく効率的だからといって、現状でもi = i + 1と1行で処理できるのですから、これ以上知識が必要となる機能追加は望まれないのかもしれませんね。