2016-10-18 6 views
-1

Что я ищу это -Excel VBA Если range.value = что-то тогда

Если значение в диапазоне ячеек равно некоторое значение или же значение, то он должен показать «Позитивный» другой «Отрицательный Но. когда я пишу, как показано ниже синтаксиса, он выдает ошибку -

If range("F3:H5").value = "X" then 

Msgbox "Positive result" 

else 

Msgbox "Negative result" 

end if 
+0

"Он выдает ошибку" не приносит никакой пользы. «Он выбрасывает ошибку несоответствия типа» дает нам еще кое-что для работы. – jsheeran

ответ

0

Вам нужно что-то вроде:

Dim found As Boolean 
found = False 
For Each cell In Range("F3:h5").Cells 
    if cell.Value = "X" Then 
     found = True 
    end if 
Next 

If found = True Then 
    Msgbox "Positive result" 
else 
    Msgbox "Negative result" 
End if 
+0

спасибо, но у меня есть несколько диапазонов, которые я не могу запустить в цикле. есть ли способ, в котором я могу напрямую его проверить? без каких-либо петель –

+1

Я так не думаю. Это отвечает на вопрос, как было заявлено в любом случае. Цикл For/Next представляет собой тривиальное количество дополнительного кода, чтобы сделать эту работу. – Paul

0

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

Function EvalRange(inRng As Range, inVal As Variant) As Variant 

    Dim CntAll, CntMatch As Double 

    CntAll = Application.Count(inRng) 
    CntMatch = Application.CountIf(inRng, inVal) 

    If CntAll = CntMatch Then 
     EvalRange = "Positive Result" 
     Else: EvalRange = "Negative Result" 
    End If 

    End Function 
+0

Примечание: я не добавил обработку ошибок/исключений, поскольку это решение просто для иллюстрации. Предполагая, что пользователь внесет необходимые изменения для этой цели. – ArindamD

+0

Это не правильный синтаксис написания прикладных функций. т.е. Application.count. –

+0

Попробуйте это, чтобы увидеть результат. Я целенаправленно избегал использования «Worksheetfunction» и использовал «Приложение» для использования функции. В двух словах утверждение вроде Application.Count более стабильно, чем Worksheetfunction.Count – ArindamD

0
VBA.MsgBox VBA.IIf(Evaluate("=SUMPRODUCT(--(F3:H5 = ""X""))"), "Positive result", "Negative result") 

"" X "" двойные кавычки из-за двух внешних цитат

F3: Н5 = "" X "" представляет собой массив булевых результатов F3 = X, F4 = Х и т.д.

- отрицательные обороты булевы до 0/1; другая отрицательная «спина» до 1/0

IIf, Оценить, СУМПРОВАТЬ ... Функции. Извините, GIYF.

+3

Было бы лучше, если вы немного объясните свой код. –

+0

Добро пожаловать в StackOverflow. Обычно лучше объяснять решение, а не просто размещать несколько строк анонимного кода. Вы можете прочитать [Как написать хороший ответ] (https://stackoverflow.com/help/how-to-answer), а также [Объяснение полностью основанных на кодах ответов] (https://meta.stackexchange.com/вопросы/114762/объяснения-entirely-% E2% 80% 8C% E2% 80% 8Bcode на основе-ответы). –

0

Это должно служить цели:

Sub string_validation() 

    Dim cel As Range 

    For Each cel In Range("F3:H8") 
     If cel.Value = "hassle" Then 
      MsgBox "Positive result" 
     Else 
      MsgBox "Negative result" 
     End If 
    Next cel 

End Sub 
Смежные вопросы