Innehållsförteckning
I den här artikeln visar jag hur du kan analysera situationen i Excel. VBA om en cell innehåller ett värde. Du lär dig att analysera situationen för både alla värden och ett visst värde.
Excel VBA-analys: Om cellen innehåller ett värde (snabbvisning)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo dök upp i fysikprov." End If End Sub
Ladda ner övningsboken
Ladda ner den här arbetsboken för att träna medan du läser den här artikeln.
VBA If Cell Contains Value Then.xlsmExcel VBA-analys: Om cellen innehåller ett värde returnerar du utdata (stegvis analys)
Här har vi en datamängd med betyg för några elever i fysik, kemi och matematik i en skola som heter Sunflower Kindergarten.
De tomma cellerna betyder att studenten inte var med, det vill säga att han eller hon var frånvarande på just det provet. Låt oss nu analysera situationen, oavsett om en cell innehåller ett värde eller inte, med den här datamängden.
⧪ Steg 1: Ange cellen
Först måste vi ange den cell vars värde vi vill analysera. Låt oss analysera om Jennifer Marlo deltog i fysikprovet eller inte.
Därför måste vi kontrollera om cell C12 innehåller ett värde eller inte.
För att göra det måste vi först deklarera cell C12 .
Kodraden för att åstadkomma detta kommer att vara:
Set Cell = Range("C12").Cells(1, 1)
⧪ Steg 2: Kontrollera om cellen innehåller ett värde (inklusive ett visst värde)
Därefter måste vi kontrollera om cellen innehåller ett värde eller inte. Vi utför detta med hjälp av en Om villkoret Kodraden kommer att vara:
Om Cell.Value "" Då
Den här koden utförs om cellen innehåller något värde. Om du vill kontrollera ett värde (t.ex. om cellen innehåller 100 eller inte) använder du det specifika värdet med en Lika med symbol.
Om Cell.Value "" Då
⧪ Steg 3: Tilldelning av uppgiften
Sedan måste du skapa en uppgift som utförs om cellen innehåller ett värde (eller ett visst värde).
Här vill vi visa meddelandet "Jennifer Marlo dök upp på fysikprovet." Så kodraden kommer att vara:
MsgBox "Jennifer Marlo deltog i fysikprovet."
⧪ Steg 4: Avsluta If-blocket
Slutligen måste du förklara att If-blocket avslutas.
Slutar om
Så den fullständiga VBA koden kommer att vara:
⧭ VBA-kod:
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo dök upp i fysikprov." End If End Sub
⧭ Utgång:
Kör koden genom att klicka på Kör Sub/UserForm i verktygsfältet.
Meddelandet kommer att visas "Jennifer Marlo dök upp på fysikprovet." som cellen C12 innehåller ett värde av 50 .
Exempel som involverar Om cellen innehåller ett värde, så får du en specificerad utskrift med Excel VBA
Vi har lärt oss att analysera om en cell innehåller ett värde eller inte i VBA Låt oss nu ta några exempel för att göra förståelsen tydlig.
1. Utveckla ett makro för att filtrera bort ett värde om motsvarande cell innehåller något värde i Excel VBA
Låt oss utveckla en Makro för att filtrera ut de elever som deltog i varje prov.
Det vill säga, vi måste kontrollera de celler som innehåller betygen för varje ämne och se om de innehåller ett värde eller inte.
Om de gör det måste vi ta reda på namnet på motsvarande elev.
Den fullständiga VBA koden för att åstadkomma detta kommer att vara:
⧭ VBA-kod:
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Ange referensen för den första cellen i de filtrerade uppgifterna: ") 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
⧭ Utgång:
Välj datamängd (inklusive den Rubriker ) och kör detta Makro .
Först ombeds du ange referensen till den första cellen där du vill ha de filtrerade uppgifterna. Jag har angett G3 .
Klicka sedan på OK Du får namnen på de studenter som deltog i varje prov (inklusive de som deltog i Rubriker ) i en ny datamängd som börjar från cellen G3 .
2. Skapa en användardefinierad funktion för att sortera ut ett värde om motsvarande cell innehåller ett visst värde i Excel VBA
Nu skapar vi en användardefinierad funktion som returnerar namnen på de elever som fått ett visst betyg i varje ämne.
Proceduren är nästan densamma som ovan. Vi måste kontrollera de celler som innehåller betygen för varje ämne och se om de är lika med ett visst värde eller inte.
Om de är det, returnerar vi namnet på motsvarande elev.
VBA koden kommer att vara:
⧭ VBA-kod:
Funktion 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
⧭ Utgång:
Koden skapar en funktion som heter Celler_med_värden som tar två argument, en Utbud och en Värde .
Låt oss ta reda på vilka elever som fick 100 i varje ämne med hjälp av denna funktion.
Välj ett cellområde i arbetsbladet och ange den här funktionen i den första cellen i området:
=Cells_with_Values(B3:E13,100)
[Här B3:E3 är min datamängd (inklusive Rubriker ) och 100 är mitt matchande värde. Du använder ditt.]
Tryck sedan på CTRL + SHIFT + ENTER ( Formel för arrayer ). Den returnerar en matris som består av namnen på de elever som fick 100 i varje ämne, inklusive Rubriker .
3. Utveckla ett användarformulär för att extrahera ett värde om motsvarande cell innehåller något värde (eller ett specifikt värde) i Excel VBA
Slutligen ska vi utveckla en UserForm för att ta fram namnen på de studenter som deltog (eller fick vissa poäng) i vissa specifika prov.
⧪ Steg 1: Öppna användarformuläret
Gå till Infoga> UserForm i alternativet i VBA för att öppna en ny UserForm . En ny UserForm kallas . Användarformulär1 kommer att öppnas.
⧪ Steg 2: Dra verktyg till användarformuläret
Förutom den UserForm får du den Verktygslåda Flytta markören över Verktygslåda och dra 4 etiketter (Etikett1, Etikett2, Etikett3, Etikett4) och 3 listboxar (ListBox1, ListBox2, ListBox3) och en TextBox (TextBox1) i en rektangulär form över den UserForm .
Dra sedan en annan Etikett (Label5) och en TextBox (TextBox2) till det nedre vänstra hörnet av UserForm .
Dra slutligen en CommandButton (CommandButton1) i det nedre högra hörnet.
Ändra visningarna av Etiketter till Kolumn för uppslag , Returkolumn , Vilket som helst värde eller ett specifikt värde , Värde, och Startcell.
Ändra också visningen av Kommandoknapp1 till OK .
⧪ Steg 3: Skriva kod för ListBox3
Dubbelklicka på ListBox3 . A Privat underförfarande kallas . ListBox3_Click öppnas. Ange följande kod där.
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
⧪ Steg 4: Skriva kod för CommandButton1
Dubbelklicka sedan på Kommandoknapp1 . en annan Privat underförfarande kallas . CommandButton1_Click öppnas. Ange följande kod där.
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 "Markera minst en kolumn för uppslagsverk.", 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 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 Till 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 "Välj antingen ett valfritt värde eller ett specifikt värde.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Message: MsgBox "Ange en giltig cellreferens som startcell.", vbExclamation End Sub
⧪ Steg 5: Skriva kod för att köra användarformuläret
Slutligen infogar du en ny Modul från VBA-verktygsfältet och infoga följande kod där.
Sub Run_UserForm() UserForm1.Caption = "Filtrering av celler som innehåller värden" 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 Ladda UserForm1 UserForm1.Show End Sub
⧪ Steg 6: Kör användarformuläret (slutresultatet)
Din UserForm är nu redo att användas. Välj datamängden från arbetsbladet ( B3:E13 här) (Inklusive den Rubriker ) och kör Makro kallas . Kör_användarformulär .
UserForm kommer att laddas in i arbetsbladet. Från Kolumn för uppslag har jag valt följande Fysik och Matematik , eftersom jag vill få fram de studentnamn som förekom i Fysik och Matematik prov.
Från Returkolumn har jag valt följande Elevens namn eftersom jag vill få fram studenternas namn.
Och från den Vilket som helst värde eller specifikt värde har jag valt följande Vilket som helst värde .
Slutligen, i Startcell box, jag har lagt in G3 .
Klicka sedan på OK Du får namnen på de elever som var med i Fysik och Matematik prov med utgångspunkt från cell G3 .
Om du hade valt Specifikt värde från Vilket som helst värde eller specifikt värde skulle du ha fått en annan TextBox för att ange det specifika värdet.
Här har jag skrivit in 100 .
Klicka på OK . Och du får de elever som fick 100 på Fysik och Kemi .
Saker att komma ihåg
Vi använde en tvådimensionell array för att återge studentnamnen i Användardefinierad funktion som beskrivs i exemplet 2 .