Excel VBA: Om cellen innehåller ett värde återger du ett specificerat resultat

  • Dela Detta
Hugh West

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.xlsm

Excel 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 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 .

Hugh West är en mycket erfaren Excel-tränare och analytiker med över 10 års erfarenhet i branschen. Han har en kandidatexamen i redovisning och ekonomi och en magisterexamen i företagsekonomi. Hugh har en passion för undervisning och har utvecklat ett unikt undervisningssätt som är lätt att följa och förstå. Hans expertkunskap om Excel har hjälpt tusentals studenter och yrkesverksamma över hela världen att förbättra sina färdigheter och utmärka sig i sina karriärer. Genom sin blogg delar Hugh med sig av sin kunskap med världen, och erbjuder gratis Excel-handledning och onlineutbildning för att hjälpa individer och företag att nå sin fulla potential.