VBA возвращает все результаты, соответствующие нескольким критериям

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь создать код VBA, который соответствует как минимум 2 критериям. Я хотел бы вернуть строки, где в столбце C есть «ACMA», а в столбце T — «0».

введите описание изображения здесь

Он должен быть указан, как показано ниже, на другом листе:

введите описание изображения здесь

Я перепробовал все формулы в Интернете и коды других пользователей, но это не работает. Не могли бы вы указать мне правильный путь?

Комментарии:

1. Я полагаю, что многие проблемы, которые вы видите, вызваны тем фактом, что вы ищете 0 в ячейке. Во многих случаях пустая ячейка также будет оцениваться 0 как . Возможно, стоит рассмотреть альтернативную систему нумерации или добавить третий критерий, который cell <> "" .

Ответ №1:

Как упоминалось в @CLR, вам нужно будет проверить, возвращает ли столбец T 0, потому что он пустой или потому, что он на самом деле равен 0. Для этого решения я проверил длину значения в ячейке <> 0 (т. Е. Пустой).

 Sub ReturnMatches()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lastRow1 As Long, newRow2 As Long
Dim x As Long

'don't know the names of your sheets so adjust accordingly
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

'determine last row of data sheet
lastRow1 = ws1.Cells(ws1.Rows.Count, 3).End(xlUp).Row

For x = 2 To lastRow1
    
    'check to see if it is a match
    'for T, also check length of value in cell <> 0 (i.e. blank)
    If _
        ws1.Cells(x, 3) = "ACMA" And _
        ws1.Cells(x, 20) = 0 And Len(ws1.Cells(x, 20).Value) <> 0 Then
        
        'define first blank row of 2nd sheet
        newRow2 = ws2.Cells(ws1.Rows.Count, 1).End(xlUp).Row   1
        
        'copy matching information to first blank row
        ws2.Cells(newRow2, 1) = "ACMA"
        ws2.Cells(newRow2, 2) = ws1.Cells(x, 4)
        
    End If
    
Next x

End Sub