Hey, da kluge Leute,

Ich hoffe der Titel meiner Frage passt genug, ich habe mein Bestes versucht ^^

Ich versuche, 2 Zeilen von Spalte A bis Z zu vergleichen und zu überprüfen, ob sie das gleiche Muster enthalten. Mit Muster meine ich, wenn in Zeile 1 Spalte A etwas geschrieben ist, muss auch in Zeile 2 Spalte A etwas geschrieben sein. Alternativ können beide leer sein.

Klingt einfach, aber die if-Anweisung darf nur ausgeführt werden, wenn das Muster NICHT so übereinstimmt: etwas, das in A1 geschrieben ist, und nichts, das in A2 geschrieben ist.

Ich bin sicher, dass ich nur eine zu komplizierte Methode verwende, aber selbst nachdem ich das Problem gegoogelt habe, kann ich keine passende, einfache Lösung finden.

Ich bin sicher, es ist ein Kinderspiel für euch, aber ich kann nicht herausfinden, wie ich es strukturieren soll. (vielleicht ein freitagsspezifisches Problem;))

(Im Code habe ich den Loop-Teil übersprungen, da ich denke, dass er für das Problem unnötig ist.)

                If Not (A1 = "" And A2 = "") Or Not (Not A1 = "" And Not A2 = "") Then
                    Boolean = False
                End If
0
G.M 18 Jän. 2019 im 14:27

6 Antworten

Beste Antwort

Wenn Sie Ihren booleschen Ausdruck vereinfachen, wird er immer als wahr ausgewertet. Daher liegt hier ein Problem vor.

Schnelle Boolesche Algebra-Lektion:

NOT(A AND B) = NOT(A) OR NOT(B)
NOT(A OR B) = NOT(A) AND NOT(B)

Wenn Sie auf Ihren Ausdruck angewendet werden, schreiben Sie der Einfachheit halber A1 = "" als A und A2 = "" als 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

Was Sie meinen, ist, glaube ich, so etwas wie:

  Not((A and B) or (Not(A) and Not(B)))

Dies kann vereinfacht werden, beeinträchtigt jedoch die Lesbarkeit (was Sie überprüfen möchten, wird weniger offensichtlich).

Schließlich sollten Sie so etwas nicht schreiben:

If Expression
    Boolean = False

Sondern:

Boolean = Not(Expression)

Angenommen, die Variablenzuweisung ist kein Platzhalter für den tatsächlichen Code.

2
gazoh 18 Jän. 2019 im 11:50
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

Sie können diesen Code für Ihren Zweck ändern. Wenn jedoch eine Spalte in der ersten und zweiten Zeile einen anderen Wert hat, ist das Ergebnis falsch und wahr, wenn sie gleich sind.

Spalten können sowohl als Buchstaben als auch als Zahlen behandelt werden.

1
euskadi 18 Jän. 2019 im 11:45

Es fällt mir schwer herauszufinden, was Sie mit dieser Codezeile machen wollen, aber hier ist mein Schuss darauf. Es wird nur Boolean = False zurückgegeben, wenn A1 leer ist und A2 nicht oder wenn A1 nicht leer ist, aber A2.

If (A1 = "" and A2 <> "") OR (A1 <> "" and A2 = "") Then
    Boolean = False
End If
0
Thryn 18 Jän. 2019 im 11:39

Sie können eine Formel wie die folgende verwenden, um zu bewerten, ob jede Zelle in einem Bereich leer ist.

=SUMPRODUCT(--(range<>""))=0

Und eine ähnliche Formel, um zu überprüfen, ob nicht jede Zelle leer ist:

=SUMPRODUCT(--(range=""))=0

Und wenden Sie die Formel mit VBA oder als normale Excel-Formel an.

Entnommen von dieser Seite: https://exceljet.net/formula/all-cells-in- Bereich-sind-leer

0
F.C. 18 Jän. 2019 im 11:44

Keine Antwort, aber meine Schlussfolgerung ist, dass Ihre Aussage immer als WAHR bewertet wird

enter image description here

Ein etwas anderer Ansatz

Sub x()

Dim b As Boolean

b=(WorksheetFunction.CountBlank(Range("A1:A2")) <> 1)

End Sub
0
SJR 18 Jän. 2019 im 11:59

Noch eine über das, was ich verstehe:

 if (A1<> "" and A2<>"") or  (A1= "" and A2="") then
     Boolean = False
 end if
0
Aaron Pan Vega 18 Jän. 2019 im 12:07