文字列の結合はよく使用される機能です。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関数を使用して配列値を結合し、コードウィンドウに出力します。
コメントを残す