2013-03-28 6 views
1

찾은 코드를 수정하려고합니다. 셀 값의 모든 인스턴스를 검색 한 다음 각 인스턴스의 셀 값을 하나의 셀로 반환하는 VBA 함수입니다. 이미 발견되지 않은 값만 반환하려고 시도하고 있으므로 중복을 포함하지 않는 셀로 끝납니다.Excel 매크로 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 함수 (내가 이해할 수있는)에 가장 가깝습니다. 그리고 아마 VBA에 PHP 기술을 적용하려고 시도하는 것이 잘못 될 것입니다. 내 생각에 결과 문자열은 실제로 내 Instr 명령이 작동하지 않는 이유 때문에 채워진다.

답변

2

두 개의 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 
+0

완벽한, 고마워요! 응답이 늦어서 미안해, 나는 지난 주부터 일하지 않았다. – JoeP

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 
1

아니 정확히 Search_in_colReturn_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 
+0

좋은 설명, 감사합니다. 나는 이미 사전 답변을 받아 들였지만, 이것은 확실히 도움이 될 것입니다. – JoeP