1

見つけたコードを変更しようとしています。これは、セル値のすべてのインスタンスを検索し、各インスタンスのセル値を 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コマンドの後に実際に入力されるため、機能しません。

4

3 に答える 3

2

それはあなたが探しているものですか?

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 InStr(1, Search_in_col.Cells(i, 1).Value, Search_string, vbTextCompare) > 0 Then
            result = result & " " & Return_val_col.Cells(i, 1).Value
        End If
    Next
    Lookup_concat = Trim(result)
End Function
于 2013-03-28T17:19:57.070 に答える
2

2 つの s を使用しようとしていると思いますIf。範囲内にある文字列に基づいてのみ追加し、文字列がまだ追加されていない場合にのみ追加します。

これを試して:

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 (Instr(1, Search_in_col.Cells(i, 1), Search_string) > 0 )
          And ( InStr(1, result, Return_val_col.Cells(i, 1).Value) = 0 ) Then

         result = result & " " & Return_val_col.Cells(i, 1).Value

      End If

   Next

   Lookup_concat = Trim(result)

End Function
于 2013-03-28T18:20:43.483 に答える
1

何をしているのか正確にはわかりませんがSearch_in_col、間違いなくテストReturn_val_colを使用する必要があります。If Instr() > 0

この結果が 1 より大きい場合は、おそらく何もする必要はありません。この結果が 0 の場合は、連結を行う必要があります。search_in_col.cells(i,1).Valueそれは、なぜ検索パラメーターとして渡しているのかわからない部分ですが、 と連結しReturn_val_col.Cells(i,1).Valueているため、実際には検索パラメーターとして使用している値を連結していません...

'if the cell's value exists in the search_string
If InStr(1, Search_in_col.Cells(i, 1).Value, search_string, vbBinaryCompare) > 0 Then
    'probably you want to do nothing here, since it's already existing
Else:
    'the cell's value does not exist in the search_string, so concatenate it
    result = result & " " & "whatever value you want to append to the result"
End If
于 2013-03-28T18:05:44.063 に答える