Inhoudsopgave
In dit artikel laat ik u zien hoe u de situatie kunt analyseren in Excel VBA als een cel een waarde bevat. Je leert de situatie te analyseren voor zowel een willekeurige waarde als een bepaalde waarde.
Excel VBA-analyse: Als cel een waarde bevat dan (snelle weergave)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo verscheen in Physics exam." End If End Sub
Download Praktijk Werkboek
Download dit oefenwerkboek om te oefenen terwijl u dit artikel leest.
VBA Als cel waarde bevat dan.xlsmExcel VBA-analyse: Als cel een waarde bevat, geef dan uitvoer terug (stapsgewijze analyse)
Hier hebben we een dataset met de cijfers van enkele leerlingen in natuurkunde, scheikunde en wiskunde op een school genaamd Sunflower Kindergarten.
De lege cellen betekenen dat de student niet verscheen, dat wil zeggen, afwezig was in dat bepaalde examen. Laten we nu de situatie analyseren, of een cel een waarde bevat of niet, met deze dataset.
⧪ Stap 1: Declareren van de cel
Eerst moeten we de cel aangeven waarvan we de waarde willen analyseren. Laten we analyseren of Jennifer Marlo al dan niet aan het examen natuurkunde heeft deelgenomen.
Daarom moeten we controleren of cel C12 een waarde bevat of niet.
Om dat te doen, moeten we eerst de cel C12 .
De regel code om dit te bereiken zal zijn:
Set Cel = Bereik("C12").Cellen(1, 1)
⧪ Stap 2: Controleren of de cel een waarde bevat (inclusief een bepaalde waarde)
Vervolgens moeten we controleren of de cel een waarde bevat of niet. We voeren dit uit met een Als voorwaarde De regel code zal zijn:
Als Cell.Value "" Dan
Deze code wordt uitgevoerd als de cel een willekeurige waarde bevat. Om een waarde te controleren (bijvoorbeeld of deze 100 bevat of niet), gebruikt u die specifieke waarde met een Gelijk aan symbool.
Als Cell.Value "" Dan
⧪ Stap 3: De taak toewijzen
Dan moet je een taak instellen die wordt uitgevoerd als de cel een waarde bevat (of een specifieke waarde).
Hier willen we het bericht "Jennifer Marlo verscheen in Natuurkunde examen." Dus de regel code zal zijn:
MsgBox "Jennifer Marlo verscheen in Natuurkunde examen."
⧪ Stap 4: Het If-blok beëindigen
Tenslotte moet u een einde aan het If-blok aangeven.
End If
Dus de volledige VBA code zal zijn:
⧭ VBA-code:
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo verscheen in Physics exam." End If End Sub
⧭ Uitgang:
Voer deze code uit door op de Sub/UserForm uitvoeren knop op de werkbalk.
Het bericht verschijnt "Jennifer Marlo verscheen in Natuurkunde examen." als de cel C12 bevat een waarde, van 50 .
Voorbeelden van If Cell Contains a Value Dan een gespecificeerde uitvoer met Excel VBA
We hebben geleerd te analyseren of een cel een waarde bevat of niet in VBA Laten we nu enkele voorbeelden bekijken om het begrip duidelijk te maken.
1. Een Macro ontwikkelen om een waarde uit te filteren als de corresponderende cel een waarde bevat in Excel VBA
Laten we een Macro om de studenten die aan elk van de examens deelnamen eruit te filteren.
Dat wil zeggen dat we de cellen met de cijfers van elk van de vakken moeten controleren en kijken of ze een waarde bevatten of niet.
Zo ja, dan moeten we de naam van de betreffende student uitzoeken.
De volledige VBA code om dit te bereiken zal zijn:
⧭ VBA-code:
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Voer de referentie van de eerste cel van de gefilterde gegevens in: ") 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
⧭ Uitgang:
Selecteer de gegevensreeks (inclusief de Koppen ) en voer dit uit Macro .
Eerst wordt u gevraagd de referentie in te voeren van de eerste cel waar u de gefilterde gegevens wilt hebben. Ik heb ingevoerd G3 .
Klik dan op OK U krijgt de namen van de studenten die in elk van de examens zijn verschenen (inclusief de Koppen ) in een nieuwe gegevensreeks vanaf cel G3 .
2. Een door de gebruiker gedefinieerde functie maken om een waarde te sorteren als de overeenkomstige cel een specifieke waarde bevat in Excel VBA
Nu maken we een gebruikersgedefinieerde functie die de namen oplevert van de leerlingen die een bepaald cijfer hebben gehaald in elk van de vakken.
De procedure is bijna dezelfde als hierboven. We moeten de cellen met de cijfers van elk van de vakken controleren en kijken of ze gelijk zijn aan een bepaalde waarde of niet.
Zo ja, dan geven we de naam van de overeenkomstige leerling terug.
De VBA code zal zijn:
⧭ VBA-code:
Functie 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
⧭ Uitgang:
De code creëert een functie genaamd Cellen_met_waarden die twee argumenten neemt, een Bereik en een Waarde .
Laten we met deze functie uitzoeken welke leerlingen in elk van de vakken 100 hebben gehaald.
Selecteer een cellenbereik in uw werkblad en voer deze functie in de eerste cel van het bereik in:
=Cells_with_Values(B3:E13,100)
[Hier B3:E3 is mijn dataset (inclusief de Koppen ) en 100 is mijn overeenkomstige waarde. Gebruik jij die van jou.]
Druk dan op CTRL + SHIFT + ENTER ( Matrixformule ). Het levert een matrix op met de namen van de leerlingen die voor elk vak 100 hebben gehaald, inclusief de Koppen .
3. Een UserForm ontwikkelen om een waarde te extraheren als de corresponderende cel een willekeurige waarde bevat (of een specifieke waarde) in Excel VBA
Tot slot zullen we een UserForm om de namen van studenten die aan bepaalde examens hebben deelgenomen (of specifieke cijfers hebben behaald) eruit te halen.
⧪ Stap 1: Het gebruikersformulier openen
Ga naar de Invoegen> UserForm optie in de VBA editor om een nieuwe UserForm Een nieuwe UserForm genaamd UserForm1 wordt geopend.
⧪ Stap 2: Tools naar het UserForm slepen
Naast de UserForm krijg je de Gereedschapskist Beweeg uw cursor over de Gereedschapskist en sleep 4 labels (Label1, Label2, Label3, Label4) en 3 ListBoxen (ListBox1, ListBox2, ListBox3) en een TextBox (TextBox1) in een rechthoekige vorm over de UserForm .
Sleep dan een andere Label (Label5) en een TextBox (TextBox2) naar de linkerbenedenhoek van de UserForm .
Sleep tenslotte een CommandButton (CommandButton1) naar de rechter benedenhoek.
De weergave van de Labels naar Opzoekkolom , Terugkerende Kolom , Een willekeurige waarde of een specifieke waarde , Waarde, en Starting Cell.
Verander ook de weergave van de Commandoknop1 naar OK .
⧪ Stap 3: Code schrijven voor ListBox3
Dubbelklik op ListBox3 . A Private Subprocedure genaamd ListBox3_Click zal openen. Voer daar de volgende code in.
Private Sub ListBox3_Click() Als UserForm1.ListBox3.Selected(0) = True Dan UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Elsef UserForm1.ListBox3.Selected(1) = True Dan UserForm1.Label4.Visible = True UserForm1.TextBox1.Visible = True End If End Sub
⧪ Stap 4: Code schrijven voor CommandButton1
Dubbelklik dan op Commandoknop1 een andere Private Subprocedure genaamd CommandButton1_Click zal openen. Voer daar de volgende code in.
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 "Select at least One Lookup Column.", 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) Als UserForm1.ListBox3.Selected(0) = True Dan Als Cell.Value "" Dan Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If ElseIf UserForm1.ListBox3.Selected(1) = True DanAls Cell.Value = UserForm1.TextBox1.Text Dan Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If 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 "Voer een geldige celverwijzing in als startcel.", vbExclamation End Sub
⧪ Stap 5: Code schrijven voor de UserForm
Voeg tenslotte een nieuwe Module van de VBA werkbalk en voeg daar de volgende code in.
Sub Run_UserForm() UserForm1.Caption = "Cellen filteren die waarden bevatten" 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 "Any Value" UserForm1.ListBox3.AddItem "Specific value" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Load UserForm1 UserForm1.Show End Sub
⧪ Stap 6: De UserForm uitvoeren (de uiteindelijke uitvoer)
Uw UserForm is nu klaar voor gebruik. Selecteer de gegevensset van het werkblad ( B3:E13 hier) (Inclusief de Koppen ) en voer de Macro genaamd Run_UserForm .
De UserForm wordt geladen in het werkblad. Van de Opzoekkolom tabel, heb ik geselecteerd Natuurkunde en Wiskunde want ik wil de namen van de studenten die verschenen zijn in Natuurkunde en Wiskunde examens.
Van de Terugkerende Kolom tabel, heb ik geselecteerd Naam student omdat ik de namen van de studenten wil hebben.
En van de Elke waarde of specifieke waarde tabel, heb ik geselecteerd Elke waarde .
Tot slot, in de Beginnende cel doos, heb ik G3 .
Klik dan op OK Je krijgt de namen van de studenten die verschenen zijn in Natuurkunde en Wiskunde examens vanaf cel G3 .
Als u had gekozen voor Specifieke waarde van de Elke waarde of specifieke waarde tabel, zou je een andere TextBox om de specifieke waarde in te voeren.
Hier heb ik ingevoerd 100 .
Klik op OK En je krijgt de studenten die... 100 in Natuurkunde en Chemie .
Dingen om te onthouden
We gebruikten een tweedimensionale array om de studentennamen in de Door de gebruiker gedefinieerde functie beschreven in voorbeeld 2 .