2015-11-07 2 views
0

У меня есть следующий код ниже,фильтр моего массива на колонке 3 для конкретного слова

Я хочу, чтобы фильтровать массив (не лист) для слова «телефон», который сидит в колонке 3 массива. Затем выход переместится в мой лист адресата («L»)

как изменить следующий код, чтобы отфильтровать слово? Я должен указать, что хочу фильтровать массив, а не лист.

Sub Example1() 
Dim arrValues() As Variant 
Dim lastRow As Long 
Dim filteredArray() 
Dim lRow As Long 
Dim lCount As Long 
Dim alength As Long 
lastRow = Sheets("Raw Data").UsedRange.Rows(Sheets("Raw Data").UsedRange.Rows.Count).Row 
arrValues = Sheets("Raw Data").Range(Cells(2, 1), Cells(lastRow, 21)).Value 
ReDim filteredArray(1 To UBound(arrValues), 1 To 1) 
alength = UBound(arrValues) 
For lCount = 1 To UBound(arrValues) Step 1 
    lRow = lRow + 1 
    filteredArray(lRow, 1) = arrValues(lCount, 1) 
Next 
Sheets("L").Range("A2:U" & 1 + alength) = filteredArray 
End Sub 

ответ

1

Вы могли бы сделать что-то вроде этого:

Sub Example1() 
    Dim arrValues() As Variant 
    Dim lastRow As Long 
    Dim filteredArray() 
    Dim lRow As Long 
    Dim lCount As Long 
    Dim tempArray() 

    lastRow = Sheets("Raw Data").UsedRange.Rows(Sheets("Raw Data").UsedRange.Rows.Count).Row 
    arrValues = Sheets("Raw Data").Range(Cells(2, 1), Cells(lastRow, 21)).Value 

    ' First use a temporary array with just one dimension 
    ReDim tempArray(1 To UBound(arrValues)) 
    For lCount = 1 To UBound(arrValues) 
     If arrValues(lCount, 3) = "phone" Then 
      lRow = lRow + 1 
      tempArray(lRow) = arrValues(lCount, 1) 
     End If 
    Next 

    ' Now we know how large the filteredArray needs to be: copy the found values into it 
    ReDim filteredArray(1 To lRow, 1 To 1) 
    For lCount = 1 To lRow 
     filteredArray(lCount, 1) = tempArray(lCount) 
    Next 

    Sheets("L").Range("A2:U" & 1 + lRow) = filteredArray 
End Sub 
+0

@ trincot Эй спасибо за ответ, это выглядит очень хорошо, если бы я был тогда отфильтровать столбец 3 для слова «телефон» и хочу вернуть всю строку массива - это этот бит кода, который мне нужно будет изменить в Range? tempArray (lRow) = arrValues ​​(lCount, 2) – Ingram

+0

Нет, вы бы вытащили условие 'if ... =" phone "и всегда выполняли то, что сейчас находится в этом блоке. Если я могу сказать, то, что вы сделали здесь, можно сделать с помощью формул Excel только без необходимости использования макросов. Я не буду вдаваться в это здесь, потому что это другой вопрос, а не тривиальный, но я настоятельно предлагаю его искать. Немакровое решение должно быть предпочтительным, так как оно не нуждается в подтверждении от пользователя для запуска, а также не маркирует книгу как измененную при применении фильтра, в результате чего вы хотите сохранить изменения? ... и т.д. – trincot

Смежные вопросы