Excel Makro VBA Bukan Instr

Saya mencoba mengubah kode yang saya temukan. Ini adalah fungsi VBA yang mencari semua contoh nilai sel, lalu mengembalikan nilai sel dari setiap contoh ke dalam satu sel. Saya mencoba untuk hanya mengembalikan nilai yang belum ditemukan dan oleh karena itu berakhir dengan sel yang tidak mengandung duplikat.

Kode Asli:

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

Saya telah memodifikasi kodenya menjadi ini, saya telah membuat indentasi hasil editnya alih-alih menyimpannya di baris yang sama agar lebih mudah dibaca

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

Versi ini adalah yang paling dekat dengan fungsi PHP !strstr (yang saya mengerti) dan mungkin mencoba menerapkan teknik PHP ke VBA adalah kesalahan saya. Pikiran saya adalah bahwa string hasil benar-benar terisi SETELAH perintah Instr saya, itulah sebabnya tidak berfungsi.


person JoeP    schedule 28.03.2013    source sumber


Jawaban (3)


Saya yakin Anda mencoba menggunakan dua Ifs. Anda hanya ingin menambahkan berdasarkan string yang berada dalam suatu rentang dan juga hanya jika string tersebut belum ditambahkan.

Coba ini:

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
person Motes    schedule 28.03.2013
comment
Sempurna, terima kasih! Maaf atas slow respon, saya belum masuk kerja sejak minggu lalu - person JoeP; 02.04.2013

Apakah itu yang kamu cari?

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
person Community    schedule 28.03.2013

Tidak begitu yakin apa yang Anda lakukan dengan Search_in_col dan Return_val_col tetapi Anda pasti perlu menggunakan tes If Instr() > 0.

Jika hasilnya > 1, maka Anda mungkin tidak perlu melakukan apa pun. Jika hasilnya 0, maka Anda perlu melakukan penggabungan. Itu bagian di mana saya tidak yakin mengapa Anda meneruskan search_in_col.cells(i,1).Value sebagai parameter pencarian, tetapi kemudian menggabungkannya dengan Return_val_col.Cells(i,1).Value, jadi Anda tidak benar-benar menggabungkan nilai yang Anda gunakan sebagai parameter pencarian...

'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
person David Zemens    schedule 28.03.2013
comment
Penjelasan yang bagus, terima kasih. Saya sudah menerima jawaban sebelumnya, tapi ini tentu sangat membantu - person JoeP; 02.04.2013