Inhaltsverzeichnis
In diesem Artikel zeige ich Ihnen, wie Sie die Situation in Excel analysieren können VBA Sie werden lernen, die Situation sowohl für einen beliebigen Wert als auch für einen bestimmten Wert zu analysieren.
Excel VBA-Analyse: Wenn Zelle einen Wert enthält dann (Schnellansicht)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo ist in der Physikprüfung erschienen." End If End Sub
Download Arbeitsbuch Praxis
Laden Sie dieses Übungsheft herunter, um zu üben, während Sie diesen Artikel lesen.
VBA If Cell Contains Value Then.xlsmExcel VBA-Analyse: Wenn die Zelle einen Wert enthält, geben Sie die Ergebnisse zurück (Schritt-für-Schritt-Analyse)
Hier haben wir einen Datensatz mit den Noten einiger Schüler in den Fächern Physik, Chemie und Mathematik in einer Schule namens Sonnenblumen-Kindergarten.
Die leeren Zellen bedeuten, dass der Schüler nicht erschienen ist, d. h. bei der betreffenden Prüfung nicht anwesend war. Analysieren wir nun die Situation, ob eine Zelle einen Wert enthält oder nicht, mit diesem Datensatz.
⧪ Schritt 1: Deklaration der Zelle
Zuerst müssen wir die Zelle deklarieren, deren Wert wir analysieren wollen. Analysieren wir, ob Jennifer Marlo zur Physikprüfung erschienen ist oder nicht.
Daher müssen wir prüfen, ob die Zelle C12 einen Wert enthält oder nicht.
Zu diesem Zweck müssen wir zunächst die Zelle C12 .
Die Codezeile, die dies bewerkstelligen soll, lautet:
Set Cell = Range("C12").Cells(1, 1)
⧪ Schritt 2: Prüfen, ob die Zelle einen Wert enthält (einschließlich eines bestimmten Wertes)
Als Nächstes müssen wir prüfen, ob die Zelle einen Wert enthält oder nicht. Wir führen dies mit einer Wenn Bedingung Die Codezeile lautet dann:
Wenn Zelle.Wert "" Dann
Dieser Code wird ausgeführt, wenn die Zelle einen beliebigen Wert enthält. Um einen Wert zu prüfen (z. B. ob sie 100 enthält oder nicht), verwenden Sie diesen spezifischen Wert mit einer Gleichbedeutend mit Symbol.
Wenn Zelle.Wert "" Dann
⧪ Schritt 3: Zuteilung der Aufgabe
Dann müssen Sie eine Aufgabe einrichten, die ausgeführt wird, wenn die Zelle einen Wert (oder einen bestimmten Wert) enthält.
Hier wollen wir die Meldung anzeigen "Jennifer Marlo ist in der Physikprüfung erschienen." Die Code-Zeile wird also lauten:
MsgBox "Jennifer Marlo ist zur Physikprüfung erschienen."
⧪ Schritt 4: Beenden des If-Blocks
Schließlich müssen Sie ein Ende des If-Blocks angeben.
Ende wenn
Die vollständige VBA Code sein wird:
⧭ VBA-Code:
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo ist in der Physikprüfung erschienen." End If End Sub
⧭ Ausgabe:
Führen Sie diesen Code aus, indem Sie auf die Schaltfläche Sub/UserForm ausführen in der Symbolleiste.
Es wird die folgende Meldung angezeigt "Jennifer Marlo ist in der Physikprüfung erschienen." wie die Zelle C12 einen Wert enthält, von 50 .
Beispiele für die Verwendung von Wenn Zelle enthält einen Wert dann eine bestimmte Ausgabe mit Excel VBA
Wir haben gelernt zu analysieren, ob eine Zelle einen Wert enthält oder nicht in VBA Lassen Sie uns nun einige Beispiele untersuchen, um das Verständnis zu verdeutlichen.
1. ein Makro zu entwickeln, um einen Wert herauszufiltern, wenn die entsprechende Zelle einen Wert enthält, in Excel VBA
Entwickeln wir eine Makro um die Schüler herauszufiltern, die an jeder der Prüfungen teilgenommen haben.
Das heißt, wir müssen die Zellen, die die Noten der einzelnen Fächer enthalten, daraufhin überprüfen, ob sie einen Wert enthalten oder nicht.
Wenn ja, müssen wir den Namen des entsprechenden Schülers herausfinden.
Die vollständige VBA Code, um dies zu erreichen, wird sein:
⧭ VBA-Code:
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Geben Sie die Referenz der ersten Zelle der gefilterten Daten ein: ") For i = 2 To Selection.Columns.Count Range(Starting_Cell).Cells(1, i - 1) = Selection.Cells(1, i) Next i Count = 2 For i = 2 To Selection.Columns.Count For j = 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If Cell.Value "" ThenRange(Starting_Cell).Cells(Count, i - 1) = Selection.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 2 Next i End Sub
⧭ Ausgabe:
Wählen Sie den Datensatz (einschließlich der Kopfzeilen ) und führen Sie dies aus Makro .
Zunächst werden Sie aufgefordert, die Referenz der ersten Zelle einzugeben, in der Sie die gefilterten Daten haben möchten. Ich habe eingegeben G3 .
Dann klicken Sie auf OK Sie erhalten die Namen der Schüler, die an den einzelnen Prüfungen teilgenommen haben (einschließlich der Kopfzeilen ) in einem neuen Datensatz ab der Zelle G3 .
2. eine benutzerdefinierte Funktion zum Aussortieren eines Wertes erstellen, wenn die entsprechende Zelle einen bestimmten Wert enthält, in Excel VBA
Jetzt werden wir eine benutzerdefinierte Funktion erstellen, die die Namen der Schüler zurückgibt, die in jedem der Fächer eine bestimmte Note erhalten haben.
Die Vorgehensweise ist fast dieselbe wie oben: Wir müssen die Zellen mit den Noten der einzelnen Fächer daraufhin überprüfen, ob sie gleich einem bestimmten Wert sind oder nicht.
Wenn ja, geben wir den Namen des entsprechenden Schülers zurück.
Die VBA Code sein wird:
⧭ VBA-Code:
Function Cells_with_Values(Rng As Range, Data As Variant) Dim Output() As Variant ReDim Output(Rng.Rows.Count, Rng.Columns.Count - 1) For i = 0 To Rng.Columns.Count - 2 Output(0, i) = Rng.Cells(1, i + 2) Next i Count = 1 For i = 2 To Rng.Columns.Count For j = 2 To Rng.Rows.Count Set Cell = Rng.Cells(j, i) If Cell.Value = Data Then Output(Count, i - 2) =Rng.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 1 Next i For i = LBound(Output, 1) To UBound(Output, 1) For j = LBound(Output, 2) To UBound(Output, 2) If Output(i, j) = 0 Then Output(i, j) = "" End If Next j Next i Cells_with_Values = Output End Function
⧭ Ausgabe:
Der Code erstellt eine Funktion namens Zellen_mit_Werten die zwei Argumente benötigt, eine Bereich und eine Wert .
Ermitteln wir mit dieser Funktion die Schüler, die in jedem der Fächer 100 Punkte erreicht haben.
Wählen Sie einen Bereich von Zellen in Ihrem Arbeitsblatt aus und geben Sie diese Funktion in die erste Zelle des Bereichs ein:
=Cells_with_Values(B3:E13,100)
[Hier B3:E3 ist mein Datensatz (einschließlich der Kopfzeilen ) und 100 ist mein passender Wert, Sie verwenden Ihren].
Dann drücken Sie STRG + UMSCHALT + EINGABE ( Array-Formel Es wird ein Array zurückgegeben, das die Namen der Schüler enthält, die in jedem Fach 100 Punkte erreicht haben, einschließlich der Kopfzeilen .
3. eine UserForm zu entwickeln, um einen Wert zu extrahieren, wenn die entsprechende Zelle einen beliebigen Wert (oder einen bestimmten Wert) in Excel VBA enthält
Schließlich werden wir eine UserForm um die Namen von Schülern zu extrahieren, die an bestimmten Prüfungen teilgenommen (oder bestimmte Noten erhalten) haben.
⧪ Schritt 1: Öffnen der UserForm
Gehen Sie zum Einfügen> UserForm Option in der VBA Editor zum Öffnen eines neuen UserForm Eine neue UserForm genannt. BenutzerFormular1 geöffnet werden.
⧪ Schritt 2: Ziehen von Werkzeugen auf die UserForm
Neben dem UserForm erhalten Sie die Werkzeugkasten Bewegen Sie den Cursor über das Feld Werkzeugkasten und ziehen 4 Etiketten (Label1, Label2, Label3, Label4) und 3 ListBoxen (ListBox1, ListBox2, ListBox3) und eine TextBox (TextBox1) in einer rechteckigen Form über dem UserForm .
Ziehen Sie dann eine weitere Etikett (Etikett5) und eine TextBox (TextBox2) in die linke untere Ecke des UserForm .
Ziehen Sie schließlich eine CommandButton (CommandButton1) in der rechten unteren Ecke.
Ändern Sie die Anzeigen der Etiketten zu Nachschlagewerk-Spalte , Rückgabespalte , Beliebiger Wert oder ein bestimmter Wert , Wert, und Startzelle.
Ändern Sie auch die Anzeige der BefehlSchaltfläche1 zu OK .
⧪ Schritt 3: Code für ListBox3 schreiben
Doppelklick auf ListenBox3 . A Private Unterprozedur genannt. ListBox3_Klick Geben Sie dort den folgenden Code ein.
Private Sub ListBox3_Click() If UserForm1.ListBox3.Selected(0) = True Then UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False ElseIf UserForm1.ListBox3.Selected(1) = True Then UserForm1.Label4.Visible = True UserForm1.TextBox1.Visible = True End If End Sub
⧪ Schritt 4: Code für CommandButton1 schreiben
Doppelklicken Sie dann auf BefehlSchaltfläche1 . eine andere Private Unterprozedur genannt. BefehlButton1_Klick Geben Sie dort den folgenden Code ein.
Private Sub CommandButton1_Click() On Error GoTo Message Starting_Cell = UserForm1.TextBox2.Text Count1 = 1 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then Range(Starting_Cell).Cells(1, Count1) = Selection.Cells(1, i) Count1 = Count1 + 1 End If Next i If Count1 = 1 Then MsgBox "Wählen Sie mindestens eine Lookup-Spalte aus.", vbExclamation ExitSub End If Data_Selected = 0 For i = 1 To Selection.Columns.Count If UserForm1.ListBox2.Selected(i - 1) = True Then Data_Selected = i Exit For End If Next i If Data_Selected = 0 Then MsgBox "Select One Return Column.", vbExclamation Exit Sub End If Count2 = 1 Count3 = 2 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then For j= 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If UserForm1.ListBox3.Selected(0) = True Then If Cell.Value "" Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If ElseIf UserForm1.ListBox3.Selected(1) = True ThenIf Cell.Value = UserForm1.TextBox1.Text Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If Else MsgBox "Select Either Any Value or Specific Value.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Message: MsgBox "Geben Sie einen gültigen Zellbezug als Startzelle ein.", vbExclamation End Sub
⧪ Schritt 5: Schreiben des Codes zum Ausführen der UserForm
Schließlich fügen Sie eine neue Modul von der VBA-Symbolleiste und fügen Sie dort den folgenden Code ein.
Sub Run_UserForm() UserForm1.Caption = "Filtering Cells that Contain Values" UserForm1.ListBox1.BorderStyle = fmBorderStyleSingle UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyle = fmBorderStyleSingle UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox3.BorderStyle = fmBorderStyleSingle UserForm1.ListBox3.ListStyle = fmListStyleOption For i = 1 ToSelection.Columns.Count UserForm1.ListBox1.AddItem Selection.Cells(1, i) UserForm1.ListBox2.AddItem Selection.Cells(1, i) Next i UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti UserForm1.ListBox3.AddItem "Beliebiger Wert" UserForm1.ListBox3.AddItem "Spezifischer Wert" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Load UserForm1 UserForm1.Show End Sub
⧪ Schritt 6: Ausführen der UserForm (Die endgültige Ausgabe)
Ihr UserForm ist nun einsatzbereit. Wählen Sie den Datensatz aus dem Arbeitsblatt ( B3:E13 hier) (einschließlich der Kopfzeilen ) und führen Sie die Makro genannt. Run_UserForm .
Die UserForm wird in das Arbeitsblatt geladen. Aus dem Nachschlagewerk-Spalte Tabelle, habe ich ausgewählt Physik und Mathematik denn ich möchte die Namen der Schüler erhalten, die in Physik und Mathematik Prüfungen.
Von der Rückgabespalte Tabelle, habe ich ausgewählt Name des Schülers denn ich möchte die Namen der Schüler erhalten.
Und aus dem Beliebiger Wert oder bestimmter Wert Tabelle, habe ich ausgewählt Beliebiger Wert .
Schließlich, in der Startzelle Box, habe ich die G3 .
Dann klicken Sie auf OK Sie erhalten die Namen der Schüler, die in Physik und Mathematik Prüfungen ausgehend von der Zelle G3 .
Wenn Sie ausgewählt hätten Spezifischer Wert von der Beliebiger Wert oder bestimmter Wert Tabelle, hätten Sie eine weitere Textfeld um den spezifischen Wert einzugeben.
Hier habe ich eingegeben 100 .
Klicken Sie auf OK Und Sie bekommen die Studenten, die die 100 in Physik und Chemie .
Dinge zum Merken
Wir haben ein zweidimensionales Array verwendet, um die Namen der Schüler in der Datei Benutzerdefinierte Funktion beschrieben im Beispiel 2 .