■ 最新の投稿

VBA小技:ループの『最初の1回だけ処理を変えたい』をクラスで簡潔に!

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のストレスが減ると嬉しいですね。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です