14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【VBA】変数の宣言と代入を1行で行う

Last updated at Posted at 2019-04-24

VBAでは変数の宣言時に初期化兼代入ができない?

――長いこと、そう思っていました。
For文のカウンタもブロックスコープがないから事前に宣言するのに、行数増えて嫌だなって。
オブジェクトの変数ならアーリーバインディングでDim fso as New FileSystemObjectみたいに記述できるけど、Object型で宣言してCreateObject(ProgID)するレイトバインディングじゃどうしても複数行に跨るよなって。
まあNewしてもコンストラクタに引数渡せないから、外から渡す値が必要な初期化処理は別の行になるんですけど。

元々Java屋なので、宣言と初期化が別の行なのは、すごく違和感があったんですよ。
それを見た目だけでも改善する記述法に今更出会えたので、同じことで不満を感じてる人に届けばいいな。

' 通常の書き方
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim str As String
str = "ABC"

' 1行での書き方
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Dim str As String: str = "ABC"

' ループカウンタの宣言も1行でできちゃう!
Dim i As Integer: For i = 0 To Ubound(Split("A/B/C", "/"))
Next

' For Eachでも大丈夫
Dim str As Variant: For Each str In Split("A/B/C", "/")
Next

_は行を分割する記号で、:は行を結合する記号です。1

まあコンストラクタに引数渡せないから、オブジェクトで外から渡す値が必要な初期化処理は別の行になるんですけど。
あとブロックスコープが利いてるわけじゃないので、For文は1行で書いてもFor文抜けた後も変数生きてますけども。
ただ、個人的にはこの書き方のほうが最初にどこで出てきたのかがわかりやすいので、これに気付いてからはこう書いてます。

  1. 方法: コード内でステートメントを分割および連結する (Visual Basic)

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?