Сравнение двух строк ячеек для вывода хороших или плохих результатов

#excel #vba #excel-formula #excel-2016

#excel #vba #excel-формула #excel-2016

Вопрос:

Ниже приведен мой код VBA, над которым я ломал голову. У меня есть 4 разных значения для сравнения, чтобы получить желаемый результат, и несколько вещей для сравнения. Если бы кто-нибудь мог мне помочь с этим, это было бы здорово.

 Public Sub cts_04_cmac_2_check()
    'CTS04CSPRWY CMAC 2 Check
    If (Sheet1.Range("A62") = "2.3.4/42/24/B1") And (Sheet1.Range("A63") = "2.3.4/42/1/B1") Then
            Sheet1.Range("C3").Value2 = "Good"
        Else
            Sheet1.Range("C3").Value2 = "Invalid"
    End If
    'End of CTS04CSPRWY CMAC 2 Check
End Sub
 

На самом деле я бы хотел включить операторы or:

 Public Sub cts_04_cmac_2_check()
    'CTS04CSPRWY CMAC 2 Check
    If (Sheet1.Range("A62") = "2.3.4/42/24/B1" Or Sheet1.Range("A62") = "2.3.4/42/24/B2) And (Sheet1.Range("A63") = "2.3.4/42/1/B1" Or Sheet1.Range("A63") = "2.3.4/42/1/B2") Then
            Sheet1.Range("C3").Value2 = "Good"
        Else
            Sheet1.Range("C3").Value2 = "Invalid"
    End If
    'End of CTS04CSPRWY CMAC 2 Check
End Sub
 

При этом сравниваются 2 значения с таблицей индексов массивов, которая изменяется в зависимости от выбора.

Еще один вопрос: могу ли я продолжать добавлять дополнительные операторы If после end if? Мне нужно выполнить около 256 проверок с помощью аналогичного кода, приведенного выше.

Он сравнивает эти 2 формулы:

=ИНДЕКС (‘Данные коллективного узла’!A2: AQ1048576, СОВПАДЕНИЕ (I3, ‘Данные коллективного узла’!A2:A230, 0),15) = ИНДЕКС (‘Данные коллективного узла’!A2: AQ1048576, СОВПАДЕНИЕ (I3, ‘Данные коллективного узла’!A2: A230, 0),26) введите описание изображения здесь

На основе этого значения

введите описание изображения здесь

чтобы получить «хорошо» или «плохо» в ячейках проверки CMTS C3, введите здесь описание изображения

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

1. Вы можете использовать цикл for для 256 проверки

2. Что такое 4 значения и что означает сравнение нескольких объектов ?

3. Таким образом, каждая проверка будет проходить между каждым «CMAC», у меня 3×56 значений «CMAC», и каждое значение будет содержать 2 строковых значения, поэтому я хотел бы иметь 2 проверки. Это сравнение «Это ИЛИ это внутри этой ячейки?» И «это ИЛИ это внутри ЭТОЙ ячейки», если это правда, перейдите к размещению «Good» в C3. Но мне нужно, чтобы это продолжало делать это для многих других значений. Он проверяет местоположение для меня, чтобы сказать мне, хорошо это или нет.

4. Может помочь скриншот. Я не совсем уверен, о чем вы спрашиваете.

Ответ №1:

Этот код выполняет в основном то же самое, что и ваш собственный, просто сокращенный, как вы просили:

 If (
     (  Sheet1.Range("A62") = "2.3.4/42/24/B1" And Sheet1.Range("A63") = "2.3.4/42/1/B1") Or _
     (  Sheet1.Range("A62") = "2.3.4/42/24/A1" And Sheet1.Range("A63") = "2.3.4/42/1/A1") Or _
     (  Sheet1.Range("A62") = "2.3.4/42/24/C1" And Sheet1.Range("A63") = "2.3.4/42/1/C1") _
   ) Then
        Sheet1.Range("C2").Value2 = "Good"
    Else
        Sheet1.Range("C2").Value2 = "Invalid"
End If
 

Ответ №2:

Я выяснил, как это исправить, спасибо, что отслеживаете это и быстро реагируете!

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("$I$3")) Is Nothing Then
    Call ctscheck
    End If
End Sub

Public Sub ctscheck()
'CTS04CSPRWY CMAC 2 Check
    If (Sheet1.Range("A62") = "2.3.4/42/24/B1") And (Sheet1.Range("A63") = "2.3.4/42/1/B1") Then
            Sheet1.Range("C2").Value2 = "Good"
        ElseIf (Sheet1.Range("A62") = "2.3.4/42/24/A1") And (Sheet1.Range("A63") = "2.3.4/42/1/A1") Then
            Sheet1.Range("C2").Value2 = "Good"
        ElseIf (Sheet1.Range("A62") = "2.3.4/42/24/C1") And (Sheet1.Range("A63") = "2.3.4/42/1/C1") Then
            Sheet1.Range("C2").Value2 = "Good"
        Else
            Sheet1.Range("C2").Value2 = "Invalid"
    End If
'End of CTS04CSPRWY CMAC 2 Check
End Sub
 

Просто нужно заставить операторы OR работать с этим, и это золото. Если у кого-нибудь есть предложения по сжатию этого, дайте мне знать.