Это правильно в документации ...
False всегда возвращается, если выражение содержит более одной переменной.
Функция IsEmpty
Вот функция, которая должна делать то, что вы ожидаете:
Function AreAllEmpty(Target As Range) As Boolean
Dim r As Range
For Each r In Target
If Not IsEmpty(r) Then
AreAllEmpty = False
Exit Function
End If
Next
AreAllEmpty = True
End Function
Использование:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox AreAllEmpty(Target)
End Sub