Эй, умные люди,
Я надеюсь, что название моего вопроса достаточно подходит, я старался изо всех сил ^^
Я пытаюсь сопоставить 2 строки от столбца A до Z и проверить, имеют ли они один и тот же шаблон внутри. Под шаблоном я подразумеваю, что если в столбце A строки 1 что-то написано, то должно быть что-то написано и в столбце A строки 2. В качестве альтернативы оба могут быть пустыми.
Звучит просто, но оператор if разрешено выполнять только в том случае, если шаблон НЕ соответствует так: что-то написано в A1 и ничего не написано в A2.
Я уверен, что использую слишком сложный метод, но даже после поиска проблемы я не могу найти подходящее простое решение.
Я уверен, что это кусок пирога для вас, ребята, но я просто не могу понять, как его структурировать. (может быть, конкретная проблема пятницы;))
(В коде я пропустил часть цикла, так как думаю, что это не нужно для проблемы)
If Not (A1 = "" And A2 = "") Or Not (Not A1 = "" And Not A2 = "") Then
Boolean = False
End If
Извините за путаницу - я исправил свой комментарий, так как оригинал был неправильным.
Бут должен быть пустым, или в обоих нужно что-то написать. Если это НЕ так, выполните код в операторе if. Разве Not (A1 = "" And A2 = "") OR Not (A1 = "*" And A2 = "*") не достиг бы этого?


Мне трудно понять, что вы хотите сделать с этой строкой кода, но вот мой шанс.
Он вернет Boolean = False, только если A1 пуст, а A2 нет, или если A1 не пуст, а A2 пуст.
If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
Boolean = False
End If
Извините, если код вводит в заблуждение, но это было бы то, что я хотел. Я попробую и дам отзыв через несколько минут ^^ Большое спасибо
Вы можете использовать формулу, подобную приведенной ниже, чтобы оценить, пуста ли каждая ячейка в диапазоне.
=SUMPRODUCT(--(range<>""))=0
и аналогичная формула, чтобы проверить, не пуста ли каждая ячейка:
=SUMPRODUCT(--(range = ""))=0
и примените формулу с помощью VBA или как обычную формулу Excel.
Взято с этой страницы: https://exceljet.net/formula/all-cells-in-range-are-blank
Dim i As Long, result As Boolean
For i = 1 To 25
If Cells(1, i).Value = Cells(2, i).Value Then
result = True
Else
result = False
Exit For
End If
Next i
Вы можете изменить этот код для своих целей, но всякий раз, когда столбец имеет разные значения как в первой, так и во второй строке, результат будет ложным и истинным, если они равны.
Столбцы можно рассматривать как буквы или цифры.
Упрощение вашего логического выражения показывает, что оно всегда имеет значение true, поэтому здесь есть проблема.
Краткий урок булевой алгебры:
NOT(A AND B) = NOT(A) OR NOT(B)
NOT(A OR B) = NOT(A) AND NOT(B)
Применительно к вашему выражению, написав для простоты A1 = "" как A и A2 = "" как B:
Not (A And B) Or Not (Not A And Not B)
= Not(A) Or Not(B) or Not(Not(A)) or Not(Not(B))
= Not(A) Or Not(B) or A or B
= True
То, что вы имеете в виду, я полагаю, что-то вроде:
Not((A and B) or (Not(A) and Not(B)))
Что может быть упрощено, но это ухудшает читабельность (то, что вы хотите проверить, становится менее очевидным).
Наконец, вы не должны писать что-то вроде этого:
If Expression
Boolean = False
скорее:
Boolean = Not(Expression)
Предполагая, что присвоение переменной не является заполнителем для фактического кода.
Еще один о том, что я понимаю:
if (A1<> "" and A2<>"") or (A1= "" and A2 = "") then
Boolean = False
end if
Not (A1 = "" And A2 = "")будет TRUE, если в одном или обоих из A1 и A2 что-то есть.Not (Not A1 = "" And Not A2 = "")будет TRUE, если бит в скобках ложен, т. е. один или оба из A1 и A2 пусты. Я не уверен, что вы пытаетесь сделать.