MW211 EXIT

devlog
ExcelVBA/任意の文字列たちを結合するが空文字は除く
2019年08月29日
例えば任意の複数の文字列を区切り文字で結合したい場合に
以下のようにすればよい。
┌──────────────────────────────────────┐
│CSV結果 = Join(Array(文字列1, 文字列2, 文字列3), ",")                       │
└──────────────────────────────────────┘
非常にお手軽なのだが難点があって、文字列が空文字の場合にも
「,,」みたいに結合されてしまう。(CSV的にはOKかもしれないが)

これを簡単に解決する方法はないようなので、関数を作った。
┌──────────────────────────────────────┐
│CSV結果 = 引数をCSV結合(文字列1, 文字列2, 文字列3)                          │
├──────────────────────────────────────┤
│Public Function 引数をCSV結合(ParamArray 配列()) As String                  │
│    Dim 結果 As Variant, 値 As Variant                                      │
│    For Each 値 In 配列                                                     │
│        If 値 <> "" Then                                                    │
│            Call 配列末尾追加(結果, 値)                                     │
│        End If                                                              │
│    Next 値                                                                 │
│    If IsArray(結果) Then                                                   │
│        引数をCSV結合 = Join(結果, ",")                                     │
│    Else                                                                    │
│        引数をCSV結合 = ""                                                  │
│    End If                                                                  │
│End Function                                                                │
├──────────────────────────────────────┤
│Private Sub 配列末尾追加(ByRef 配列 As Variant, _                           │
│                         ByVal 追加要素 As Variant)                         │
│    On Error GoTo l_Catch                                                   │
│    If IsArray(配列) Then                                                   │
│        ReDim Preserve 配列(UBound(配列) + 1)                               │
│    Else                                                                    │
│        ReDim 配列(0)                                                       │
│    End If                                                                  │
│    配列(UBound(配列)) = 追加要素                                           │
│    Exit Sub                                                                │
│l_Catch:                                                                    │
│    ReDim 配列(0)                                                           │
│    配列(UBound(配列)) = 追加要素                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA