

VBAでループ処理を書いていると、
「最初の1回だけは特別な処理をしたい」
そんなシーン、よくありますよね。

例えば、CSVのような文字列を Join
的に組み立てるとき、
str = str & "," & item
だと先頭に余計なカンマがついてしまい、
これを避けるために if文を書いたり、フラグ変数を用意したり…
そんな時に便利なのが、今回紹介するセパレーター制御クラスです!

以下のクラスモジュール(例:clsSep
)を作ってみました:
Option Explicit
' セパレーター
Private gSep As String
' 初回判定フラグ
Private iFlg As Boolean
' 初期化
Public Sub resetFlg(Optional pSep As String = ",")
gSep = pSep
iFlg = False
End Sub
' セパレーター取得(初回は空、以降はセパレータ)
Public Function getSep() As String
If iFlg Then
getSep = gSep
Else
iFlg = True
getSep = ""
End If
End Function
■ 使用例
例えばこんな感じで使えます:
Sub test()
Dim s As String
Dim i As Long
Dim flg As New clsSep
Call flg.resetFlg(",") ' セパレーターをカンマに設定
For i = 1 To 5
s = s & flg.getSep & "No" & i
Next
MsgBox s
End Sub
最初だけ getSep
が空文字を返し、2回目以降はカンマを返してくれるので、
「先頭にセパレーターをつけない問題」がスッキリ解決します。
■ おわりに
このクラスを作ってから、
「1回目だけ…」のためのフラグ管理が不要になり、コードがとてもスッキリしました。
ちょっとした工夫で、VBAのストレスが減ると嬉しいですね。



コメントを残す