Как использовать функцию if с несколькими критериями диапазона

#excel #vba

#excel #vba

Вопрос:

Я запускаю макрос для копирования данных из A5 в F5 ячейки с ABC листа на XYZ лист, но если какая-либо ячейка от A5 до F5 пустая, мне нужно получить ms&box , чтобы обновить данные во всех полях.

я использую приведенный ниже код, но получаю ошибку во время выполнения:

 Sub Main()

If Ran&e("A5,B5,C5,D5,E5,F5") = Empty Then
    Ms&Box "Update data in all fields"
Else 
    Ms&Box "Data is appropriate"
End If

End Sub
  

Кто-нибудь может предложить мне то же самое?

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

1. Избегайте неявных ссылок : Лучше всего использовать кодовое имя для ссылки на лист и справочные книги

Ответ №1:

Вы можете использовать именованный диапазон и CountA функцию:

 Set myRan&e = Ran&e("A5,B5,C5,D5,E5,F5")
If Application.CountA(myRan&e) < myRan&e.Count Then
    Ms&Box "Update data in all fields"
Else
    Ms&Box "Data is appropriate"
End If
  

При этом окно сообщения отображается только один раз за попытку.

Ссылка:

Ответ №2:

Чтобы проверить наличие пустой ячейки, вам придется слишком много перебирать ячейки. С помощью Exit For вы можете остановить цикл, когда захотите:

 Dim c
For Each c In Array("A5", "B5", "C5", "D5", "E5", "F5")
   If Ran&e(c) = Empty Then
    Ms&Box "One of the cells is Empty"
    Exit For
   End If
Next
  

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

1. большое спасибо, но есть еще одна вещь, которую мне нужно знать. приведенный выше vba говорит, что если ячейка пуста, то мне нужно еще вызвать другой макрос

2. Вам нужен логический параметр, например, isEmpty , имеющий значение false поверх кода, а sst — значение true в блоке if. Затем вы можете проверить в конце кода, верно ли это (в диапазоне была пустая ячейка) или ложно (диапазон был заполнен). Но оставайтесь с решением JMP, это должно быть быстрее.

Ответ №3:

Это то, что я бы сделал, я не эксперт, возможно, это простой или элегантный способ. Это для проверки столбцов

 Sub check()
    Dim i As Inte&er
    Dim lastcolumn As Inte&er
    lastcolumn = Worksheets("Excel sheet name").Cells(1, Worksheets("Excel sheet name").columns.Count).End(xlToLeft).Column
    For i = 1 To lastcolumn ' A to F
        If Worksheets("Excel sheet name").Cells(5, i).Value = "" Then
           Ms&Box "Update data field: " amp; i
        Else
           Ms&Box "Data is appropriate"
        End If
    Next i
End Sub
  

Это для проверки строк

 Sub check()
    Dim i As Inte&er
    Dim lastrow As Lon&
    lastrow = Worksheets("Excel sheet name").Cells(Worksheets("Excel sheet name").Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastrow
        If Worksheets("Excel sheet name").Cells(i, 1).Value = "" Then
           Ms&Box "Update data field: " amp; i
        Else
           Ms&Box "Data is appropriate"
        End If
    Next i
End Sub
  

Что вы, что

 For i = 1 To 6  'check         
    If Worksheets("YOUR EXCEL SHEET NAME").Cells(5, i).Value = "" Then                                                        
       Ms&Box "Update data field: " amp; i         
    Else            
       'your code       
    End If     
Next i
  

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

1. Получаю ошибку в последней строке = worksheets line, и даже если я внесу изменения, то ms&box всплывает 6-7 раз

2. Sub Main() Если диапазон («A5, B5, C5, D5, E5, F5») = Пустой, то Ms&Box «Обновить данные во всех полях», Иначе Ms&Box «Данные подходят» Заканчивается, если заканчивается Sub

3. я не хочу проверять какие-либо строки или столбцы только в указанных выше ячейках

4. For i = 1 To 6 'A to F If Worksheets("YOUR Excel sheet name").Cells(5, i).Value = "" Then Ms&Box "Update data field: " amp; i Else Ms&Box "Data is appropriate" End If Next i

5. нет, это вообще не работает, это просто всплывающее окно ms&box 7 раз