Join関数について

Join関数というものがある

Join関数

前回の記事

akashi-keirin.hatenablog.com

に、 id:imihito さんからコメントをいただいた。曰く、

argsByArray 相当処理として、組み込み関数にJoin 関数というものが有ったりします
```vba
Join(strArray, "! ")
```

ははは。そういえばそんなのあったなー。またしても、

車輪の再発明

ですよ。はははorz

で、やってみた。

Join関数を使ってみる

とりあえず、次のようなコードでやってみる。

リスト1 標準モジュール
Public Sub test()
  Dim a As Variant
  a = Array("アホ", "ボケ", "カス", "デコスケ")    '……(1)'
  Debug.Print Join(a, "! ")    '……(2)'
End Sub

まず、(1)の

a = Array("アホ", "ボケ", "カス", "デコスケ")

で、Variant型変数の a にArray関数を使って配列をぶち込んでおく。

んで、(2)の

Debug.Print Join(a, "! ")

でJoin関数の返り値をイミディエイト・ウインドウに表示してみる。

実行結果

f:id:akashi_keirin:20171111083613j:plain

この通り、配列の各要素のカンチャンに第2引数の「! 」を入れてつなげた文字列が出力された。

まるっきりSplit関数の反対なのね。

リスト1改 標準モジュール

ちょっとだけ付け加える。

Public Sub test()
  Dim a As Variant
  a = Array("アホ", "ボケ", "カス", "デコスケ")
  Debug.Print Join(a, "! ") & "!"    '……(*)'
End Sub

(*)の

Debug.Print Join(a, "! ") & "!"

は、Join関数の返り値に「!」を付け加えている。

実行結果

f:id:akashi_keirin:20171111083621j:plain

要するに、

Dim i As Integer
Dim tmp As String
For i = 0 To UBound(a)
  If i = 0 Then
    tmp = a(i)
  Else
    tmp = tmp & "! " & a(i)
  End If
Next
tmp = tmp & "!"
Debug.Print tmp

と同じ処理が、わづか3行でできてしまうということだ。

一応、実験。

次のコードで検証する。

スト2 標準モジュール
Public Sub test()
  Dim a As Variant
  a = Array("アホ", "ボケ", "カス", "デコスケ")
  Debug.Print Join(a, "! ") & "!"
  Dim i As Integer
  Dim tmp As String
  For i = 0 To UBound(a)
    If i = 0 Then
      tmp = a(i)
    Else
      tmp = tmp & "! " & a(i)
    End If
  Next
  tmp = tmp & "!"
  Debug.Print tmp
End Sub
実行結果

f:id:akashi_keirin:20171111083633j:plain

ハイ、全く同じ実行結果でした。

おわりに

またしても、体系的に学んでいない弱みを露呈してしまった。

@akashi_keirin on Twitter