2015-05-19 3 views
0

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

Если coulmn А не пусто, то столбец B или столбца с в той же строке не должно быть пустым. У меня есть этот код

With Sheets(1).Range("A" & Rows.Count).End(xlUp).Offset(1) 
    If Range("B1:B50").Value = "" Range("C1:50").Value = ""Or Then 
     MsgBox "B or C must have a value" 
    End If 
End With 

Сейчас он работает только в том случае, если Range B1.B50 полностью заполнен.

+0

Это зависит от того, что вы хотите сделать. Вы можете просто использовать функцию COUNTA в диапазоне в B и C на основе диапазона в A. Если они одинаковы, то у вас одинаковое количество записей в каждом. То, что ваш код не рассматривает, - это если ячейки, расположенные рядом с ячейками в столбце A, имеют значение. Я думаю, что это было бы более выгодно, тогда вы можете вывести сообщение в точности, какие ячейки должны иметь значение. –

+0

Вы ищете специально для решения VBA? Это также можно сделать с помощью формул. – zx8754

ответ

0
LastRow = Cells.Find("*", SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row 
Range("A1").Select 
Do Until ActiveCell.Row = LastRow + 1 
If IsEmpty(ActiveCell) = False Then 
    If IsEmpty(Cells(ActiveCell.Row, 2)) = True Or IsEmpty(Cells(ActiveCell.Row, 3)) = True Then 
    MsgBox "Row " & ActiveCell.Row & " has no value in Column B or C" 
    End If 
End If 
ActiveCell.Offset(1, 0).Select 
Loop 

Это может сработать. Он получает последнюю ячейку с записью, а затем проходит через каждую строку, проверяя, есть ли значение в B или C, когда A не пусто

+0

Спасибо, что он отлично работает! Могу ли я сделать, если IsEmpty (ячейки (ActiveCell.Row, 2)) = True Затем IsEmpty (ячейки (ActiveCell.Row, 3)) = False? – angular2neewbie

+0

@ jojou96 Что бы вы хотели получить/получить с помощью этой формулы? насколько я знаю 'isempty()' вы можете читать только не true или false – Luke

0

Код ниже будет отмечать ячейки значением «! Err», предлагайте это вместо длинного сообщения, так как пользователь сможет увидеть непосредственно на листе ячейки с ошибкой.

Const kErr As String = "!Err" 
Dim lRowCnt As Long 
Dim lRow As Long 
Dim bCellEmpty 
Dim b As Byte 

bCellEmpty = False 
lRowCnt = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row 
With Sheets(1) 
    For lRow = 1 To lRowCnt 
     If .Cells(lRow, 1).Value <> Empty Then 
      For b = 2 To 3 
       With .Cells(lRow, b) 
        If .Value = Empty Then 
         .Value = kErr 
         bCellEmpty = True 
End If: End With: Next: End If: Next: End With 
If bCellEmpty Then MsgBox "Cells marked with: """ & kErr & """ C must have a value" 
Смежные вопросы