見つけたコードを変更しようとしています。これは、セル値のすべてのインスタンスを検索し、各インスタンスのセル値を 1 つのセルに返す VBA 関数です。まだ見つかっていない値のみを返そうとしているため、重複を含まないセルになってしまいます。
元のコード:
Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If Search_in_col.Cells(i, 1) = Search_string Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
コードをこれに変更しました。読みやすくするために、編集を同じ行に保持する代わりにインデントしました
Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If Search_in_col.Cells(i, 1) = Search_string
And Not (InStr(1, result, Return_val_col.Cells(i, 1).Value)) Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function
このバージョンは PHP 関数に最も近いものであり!strstr
(私は理解しています)、おそらく PHP の手法を VBA に適用しようとしているのが間違っているところです。私の考えでは、結果の文字列はInstr
コマンドの後に実際に入力されるため、機能しません。