VBAで文字列を結合する方法

文字列の結合はよく使用される機能です。VBAコードでは「+」または「&」演算子を使用できます。これは理解しやすい機能です。

VBAは、次の結合演算子をサポートしています。

変数A=5および変数B=10と仮定すると、-

演算子説明
+数値である2つの値を変数として追加するA + B = 15
&2つの値を結合するA & B = 510

例1

次の例からVBScriptで使用可能な結合演算子を理解してみましょう-

Private Sub Constant_demo_Click()
Dim a as Integer : a = 5
Dim b as Integer : b = 10
Dim c as Integer
c = a + b
msgbox ("Concatenated value:1 is " &c) 'Numeric addition
c = a & b
msgbox ("Concatenated value:2 is " &c) 'Concatenate two numbers
End Sub

上記のコードを実行すると、次のような結果が得られます。

Concatenated value:1 is 15
Concatenated value:2 is 510

変数A=”Microsoft”、変数B=”VBScript”と仮定すると、-

演算子説明
+2つの値を結合するA + B =MicrosoftVBScrip
&2つの値を結合するA & B =MicrosoftVBScrip

注意点:結合の操作は、数値と文字列に使用できます。出力はコンテキストによって異なります。変数の場合、数値または文字列を保存します。

例2

次の例を実行し、次の関数を追加してボタンを作成し、VBAで使用可能なすべての論理演算子を理解します。

Private Sub Constant_demo_Click()
Dim a as String : a = "Microsoft"
Dim b as String : b = "VBScript"
Dim c as String
c = a + b
msgbox("Concatenated value:1 is " &c) 'addition of two Strings
c = a & b
msgbox("Concatenated value:2 is " &c) 'Concatenate two String
End Sub

上記のコードを実行すると、次のような結果が得られます。

Concatenated value:1 is MicrosoftVBScript
Concatenated value:2 is MicrosoftVBScript

簡単でしょう? ただし、実際の使用にはいくつかのテクニックがあります。

例:次のデータから佐藤の注文番号を抽出し、英字のコンマで結合します。

コードは次となります。

Sub demo1()
Dim vntArr, i, strMsg
vntArr = [a1].CurrentRegion.Value
For i = 2 To UBound(vntArr)
If vntArr(i, 1) = "佐藤" Then
If Len(strMsg) = 0 Then
strMsg = vntArr(i, 2)
Else
strMsg = strMsg & "," & vntArr(i, 2)
End If
End If
Next
Debug.Print strMsg
End Sub

コードの分析

3行目のコードは、データを配列にロードします。

4〜12行目のコードは、2行目からループでデータを処理します。

5行目のコードは、最初の列に従って名前が[佐藤]であるかどうかを判別します。

strMsgが空白の場合、条件を満たすデータが見つかったことを意味します。7行目のコードは、注文番号をstrMsg変数に直接保存します。

strMsgが空白ではない場合、9行目のコードは、注文番号をstrMsg変数に保存し、区切り文字としてコンマを追加します。

次の図に示すように、13行目のコードは、すべての注文番号をイミディエイトウィンドウに出力します。

コードの実行は複雑ではありません。6行目から10行目は、最初の注文番号に特別な処理が必要であるため、コードの行数は比較的多いように見えます。

実際、この問題に対処するため、他の方法を使用できます。コードは次のとなります。

Sub demo2()
Dim vntArr, i, strMsg
vntArr = [a1].CurrentRegion.Value
For i = 2 To UBound(vntArr)
If vntArr(i, 1) = "佐藤" Then strMsg = strMsg & "," & vntArr(i, 2)
Next
Debug.Print Mid(strMsg, 2)
End Sub

コードの分析

5行目のコードは、最初の注文番号に特別な処理を実行しないため、ループが終わった後、strMsg変数の値はKA12394、SS97826、EDG9999になります。7行目のコードが結果を出力する場合、切り捨てにMid関数を使用して、最初の余計なコンマを削除します。

コードの行数とプログラミングロジック全体から見ると、demo2はより簡潔です。

Joinはアレイの高速結合を実現できます。アレイの使用は可能です。 コードは次のとなります。

Sub demo3()
Dim vntArr, i, strMsg, vntRes(), n
vntArr = [a1].CurrentRegion.Value
n = 0
For i = 2 To UBound(vntArr)
If vntArr(i, 1) = "佐藤" Then
ReDim Preserve vntRes(n)
vntRes(n) = vntArr(i, 2)
n = n + 1
End If
Next
Debug.Print Join(vntRes, ",")
End Sub

コードの分析

7行目のコードは、上記の動的配列を再作成し、既存の配列値を保存します。

8行目のコードは、注文番号を配列に格納します。

12行目のコードは、Join関数を使用して配列値を結合し、コードウィンドウに出力します。

Share

コメントを残す

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