#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 работать с этим, и это золото. Если у кого-нибудь есть предложения по сжатию этого, дайте мне знать.