Ну, данных нет, поэтому я создал свой собственный.Я сделал только диапазон данных, начиная с A1
и 5 столбцов.Заголовок в столбце B: XYZ
![enter image description here](https://i.stack.imgur.com/rDOkp.jpg)
Красные ячейки - пустые.Мы хотим что-то сделать, чтобы все пустые ячейки в диапазоне, кроме тех в столбце, где заголовок равен XYZ
.
Итак, мой код сначала получает последнюю строку диапазона, затем выбирает сразувсе пустые ячейки, а затем, 1 на 1, он проверяет, является ли заголовок XYZ
или нет.Если нет, то он что-то делает (в моем коде просто печатать адрес этих пустых ячеек).
Dim sCell As Range
Dim LastRow As Long
Dim i As Long
Dim arColumns As Variant
arColumns = Array("A", "B", "C", "D", "E")
'we need to get the real last row of complete range
'so we need to check all columns because it could be
'that last cell of a column is a blank
For i = 0 To UBound(arColumns) Step 1
If Range(arColumns(i) & Rows.Count).End(xlUp).Row > LastRow Then
LastRow = Range(arColumns(i) & Rows.Count).End(xlUp).Row
End If
Next i
Range("A1:E" & LastRow).SpecialCells(xlCellTypeBlanks).Select 'we select all blank cells only
For Each sCell In Selection
If Cells(1, sCell.Column).Value <> "XYZ" Then
'If first cell in this same column IS NOT = XYZ then do something
'You can add to skip extra columns adding OR conditions to IF
Debug.Print sCell.Address(False, False)
End If
Next sCell
При выполнении этого кода выводятся только адреса пустых ячеек, но ни один из них не находится в столбце B,потому что заголовок в столбце B равен XYZ
.
C2
D2
A3
E3
A5
C8
E9
E10
D11
A13
C15
C17
E17
A19
D19
A23
E23
Хорошо, что вы можете добавить дополнительные проверки в части IF с условиями OR / AND, если они вам нужны.Что-то вроде If Cells(1, sCell.Column).Value <> "XYZ" Or Cells(1, sCell.Column).Value="ABC" Then
пропустит пустую ячейку, если заголовок будет XYZ
или ABC
Надеюсь, вы сможете адаптировать это к вашим потребностям.