2015-05-18 2 views
0

В настоящее время у меня есть BD с почти 1500 строками. Каждая строка имеет строку разных символов (все внутри одной и той же ячейки), в некоторых случаях в каждой строке есть похожие слова. Например:Найти строки, содержащие нужные мне слова

Row 1: Tempera for children of color red 10 grams 
Row 2: Tempera for adults color black 50 grams 
Row 3: Tempera for children of color yellow 10 grams 
Row 4: Tempera for adults color black 10 grams 

Я пытаюсь создать макрос, в котором необходимо ввести два или несколько слов, и что эти слова ищутся в каждой строке, а затем, я объясняю, которые являются строки, содержащие два или более слова. Например:

Если записей Я слова:

  • "черная темпера": Строки 2, 4
  • "дети": Строки 1, 3
  • "10 темперы": Строки 1, 3 и 4
+1

Если у вас не более двух критерии поиска, вы можете использовать 'автофильтр 'функция. Зачем делать большие сделки с VBA? – Physikbuddha

ответ

1

вы можете использовать следующий код:

Private Function SearchForOneStringInArr(oneString As String, arr() As String) As Boolean 
    Dim i 
    For i = 0 To UBound(arr) 
     If InStr(1, LCase(oneString), LCase(arr(i))) = 0 Then 
      SearchForOneStringInArr = False 
      Exit Function 
     End If 
    Next 
SearchForOneStringInArr = True 
End Function 
Public Function mySearch(rng As Range, toSearch As String) As String 
    Dim i As Integer, cell As Range 
    i = 1 
    Dim strArr() As String 
    Dim resultStr As String 
    resultStr = "Rows:" 
    strArr = Split(toSearch, " ") 
    For Each cell In rng.Cells 
     If SearchForOneStringInArr(cell.Value, strArr) = True Then 
      resultStr = resultStr & Str(i) & " , " 
     End If 
     i = i + 1 
    Next 
    mySearch = resultStr 
End Function 

используют следующую формулу:

=mySearch(A1:A4, "black tempera") 
=mySearch(A1:A4, "children") 
=mySearch(A1:A4, "10 tempera") 
1

Это может быть не совсем то, что вы ищете, но один подход, а не писать макрос с нуля будет использовать функцию конкатенации как this one с формулой массива: -

=myconcat(",",IF((1+ISBLANK(B1)-ISERROR(SEARCH(B1,$A$1:$A$4)))*(2-ISBLANK(B1)-ISBLANK(C1))*(1+ISBLANK(C1)-ISERROR(SEARCH(C1,$A$1:$A$4))),ROW($A$1:$A$4),"")) 

где строки для поиска находятся в формате A1: A4, а слова для поиска находятся в B1 и C1.

Формула должна быть введена в D1 с CtrlСдвигEnter и потянул вниз.

enter image description here