"Excel VBA": Jei ląstelėje yra reikšmė, tada grąžinkite nurodytą išvestį

  • Pasidalinti
Hugh West

Šiame straipsnyje parodysiu, kaip galite analizuoti situaciją "Excel" programoje. VBA jei ląstelėje yra reikšmė. Išmoksite analizuoti situaciją tiek bet kokios reikšmės, tiek konkrečios reikšmės atveju.

"Excel" VBA analizė: Jei ląstelėje yra reikšmė, tada (greitas vaizdas)

 Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo appeared in Physics exam." End If End Sub 

Atsisiųsti praktikos sąsiuvinį

Atsisiųskite šį pratybų sąsiuvinį, kad galėtumėte atlikti pratimus skaitydami šį straipsnį.

VBA Jei ląstelėje yra reikšmė Then.xlsm

"Excel" VBA analizė: Jei ląstelėje yra reikšmė, tada grąžinkite išvestį (žingsnis po žingsnio analizė)

Čia turime duomenų rinkinį, kuriame pateikiami kai kurių mokyklos "Saulėgrąžų darželis" mokinių fizikos, chemijos ir matematikos pažymiai.

Tušti langeliai reiškia, kad studentas nepasirodė, t. y. nedalyvavo tame konkrečiame egzamine. Dabar išanalizuokime situaciją, ar ląstelėje yra reikšmė, ar ne, su šiuo duomenų rinkiniu.

⧪ 1 žingsnis: ląstelės deklaravimas

Pirmiausia turime deklaruoti langelį, kurio reikšmę norime analizuoti. Paanalizuokime, ar Jennifer Marlo dalyvavo fizikos egzamine, ar ne.

Todėl reikia patikrinti, ar ląstelė C12 yra reikšmė arba ne.

Norėdami tai padaryti, pirmiausia turime deklaruoti ląstelę C12 .

Šiam tikslui pasiekti bus sukurta tokia kodo eilutė:

 Set Cell = Range("C12").Cells(1, 1) 

⧪ 2 veiksmas: tikrinimas, ar ląstelėje yra reikšmė (įskaitant konkrečią reikšmę)

Toliau turime patikrinti, ar ląstelėje yra reikšmė, ar ne. Tai atliksime naudodami Jei sąlyga . Kodo eilutė bus tokia:

 Jei Cell.Value "" Tada 

Šis kodas bus vykdomas, jei ląstelėje yra bet kokia reikšmė. Norėdami patikrinti reikšmę (pvz., ar ląstelėje yra 100, ar ne), naudokite konkrečią reikšmę su Lygus simbolis.

 Jei Cell.Value "" Tada 

⧪ 3 žingsnis: užduoties paskirstymas

Tada reikia nustatyti užduotį, kuri bus vykdoma, jei ląstelėje yra reikšmė (arba tam tikra reikšmė).

Čia norime rodyti pranešimą "Jennifer Marlo dalyvavo fizikos egzamine." . Taigi kodo eilutė bus tokia:

 MsgBox "Jennifer Marlo pasirodė fizikos egzamine." 

⧪ 4 veiksmas: "If" bloko užbaigimas

Galiausiai turite deklaruoti bloko If pabaigą.

 End If 

Taigi visas VBA kodas bus:

⧭ VBA kodas:

 Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo appeared in Physics exam." End If End Sub 

⧭ Išėjimas:

Paleiskite šį kodą spustelėję Paleisti Sub/UserForm įrankių juostoje esantis mygtukas.

Bus rodomas pranešimas "Jennifer Marlo dalyvavo fizikos egzamine." kaip ląstelė C12 yra reikšmė, kurios 50 .

Pavyzdžiai, susiję su Jei ląstelėje yra reikšmė, tada nurodyta išvestis su "Excel VBA

Išmokome analizuoti, ar ląstelėje yra reikšmė, ar ne. VBA . Dabar panagrinėkime keletą pavyzdžių, kad supratimas būtų aiškesnis.

1. Makrokomandos, skirtos filtruoti reikšmę, jei atitinkamoje ląstelėje yra kokia nors reikšmė, kūrimas Excel VBA

Sukurkime Makro atrinkti mokinius, kurie dalyvavo kiekviename iš egzaminų.

Tai reiškia, kad turime patikrinti langelius, kuriuose yra kiekvieno dalyko pažymiai, ir patikrinti, ar juose yra reikšmė, ar ne.

Jei taip, turime nustatyti atitinkamo mokinio vardą ir pavardę.

Visas VBA Kodas, skirtas šiam tikslui pasiekti, bus toks:

⧭ VBA kodas:

 Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox ("Įveskite pirmojo filtruotų duomenų langelio nuorodą: ") 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 

⧭ Išėjimas:

Pasirinkite duomenų rinkinį (įskaitant Antraštės ) ir paleiskite šį Makro .

Pirmiausia turėsite įvesti pirmosios ląstelės, kurioje norite filtruoti duomenis, nuorodą. Aš įvedžiau G3 .

Tada spustelėkite GERAI . Gausite mokinių, dalyvavusių kiekviename iš egzaminų, vardus ir pavardes (įskaitant Antraštės ) naujoje duomenų aibėje, pradedant nuo ląstelės G3 .

2. Vartotojo apibrėžtos funkcijos, skirtos reikšmei išrūšiuoti, jei atitinkamame ląstelėje yra tam tikra reikšmė, sukūrimas "Excel" VBA

Dabar sukursime vartotojo apibrėžtą funkciją, kuri grąžins mokinių, gavusių tam tikrą įvertinimą iš kiekvieno dalyko, vardus.

Procedūra beveik tokia pati kaip ir pirmiau. Turime patikrinti langelius, kuriuose yra kiekvieno dalyko pažymiai, ir patikrinti, ar jie yra lygūs tam tikrai vertei, ar ne.

Jei taip, tuomet grąžinsime atitinkamo mokinio vardą.

Svetainė VBA kodas bus:

⧭ VBA kodas:

 Funkcija 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 

⧭ Išėjimas:

Kodas sukuria funkciją, vadinamą Cells_with_Values kuris priima du argumentus, a Diapazonas ir Vertė .

Naudodamiesi šia funkcija sužinokime, kurie mokiniai iš kiekvieno dalyko gavo 100 balų.

Darbalapyje pasirinkite ląstelių intervalą ir įveskite šią funkciją į pirmąją intervalo ląstelę:

=Cells_with_Values(B3:E13,100)

[Čia B3:E3 yra mano duomenų rinkinys (įskaitant Antraštės ) ir 100 yra mano atitikmuo. Jūs naudokite savo atitikmenį.]

Tada paspauskite CTRL + SHIFT + ENTER ( Masyvo formulė ). Jis grąžins masyvą, sudarytą iš mokinių, gavusių 100 balų iš kiekvieno dalyko, vardų ir pavardžių, įskaitant Antraštės .

3. Vartotojo formos sukūrimas, siekiant išgauti reikšmę, jei atitinkamoje ląstelėje yra bet kokia reikšmė (arba tam tikra reikšmė), naudojant "Excel VBA

Galiausiai sukursime Naudotojo forma išgauti mokinių, kurie laikė tam tikrus egzaminus (arba gavo tam tikrus įvertinimus), vardus ir pavardes.

⧪ 1 žingsnis: naudotojo formos atidarymas

Eikite į Insert> UserForm parinktį VBA redaktorius, kad atidarytumėte naują Naudotojo forma . Naujas Naudotojo forma vadinamas . Naudotojo forma1 bus atidarytas.

⧪ 2 žingsnis: įrankių vilkimas į naudotojo formą

Be to. Naudotojo forma , gausite Įrankių dėžutė . Perkelkite žymeklį virš Įrankių dėžutė ir vilkite 4 etiketės (Label1, Label2, Label3, Label4) ir 3 sąrašo langeliai (ListBox1, ListBox2, ListBox3) ir Teksto langelis (TextBox1) stačiakampio formos virš Naudotojo forma .

Tada vilkite kitą Etiketė (Label5) ir Teksto langelis (TextBox2) į apatinį kairįjį kampą Naudotojo forma .

Galiausiai vilkite Komandos mygtukas (CommandButton1) į apatinį dešinįjį kampą.

Pakeiskite rodmenis Etiketės į Paieškos stulpelis , Grąžinimo stulpelis , Bet kokia reikšmė arba konkreti reikšmė , Vertė, ir Pradinė ląstelė.

Taip pat pakeiskite rodinio CommandButton1 į GERAI .

⧪ 3 žingsnis: "ListBox3" kodo rašymas

Dukart spustelėkite ListBox3 . A Privati paprocedūra vadinamas . ListBox3_Click Atsidarys langas. Jame įveskite šį kodą.

 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 

⧪ 4 veiksmas: "CommandButton1" kodo rašymas

Tada dukart spustelėkite CommandButton1 . Privati paprocedūra vadinamas . CommandButton1_Click Atsidarys langas. Jame įveskite šį kodą.

 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) 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 "Pasirinkite bet kokią reikšmę arba konkrečią reikšmę.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Message: MsgBox "Enter a Valid Cell Reference as the Starting Cell.", vbExclamation End Sub 

⧪ 5 žingsnis: naudotojo formos paleidimo kodo rašymas

Galiausiai įterpkite naują Modulis VBA įrankių juosta ir įterpkite šį kodą.

 Sub Run_UserForm() UserForm1.Caption = "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 "Any Value" UserForm1.ListBox3.AddItem "Specific value" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Load UserForm1 UserForm1 UserForm1.Show End Sub 

⧪ 6 veiksmas: naudotojo formos paleidimas (galutinis rezultatas)

Jūsų Naudotojo forma dabar jau galima naudoti. Pasirinkite duomenų rinkinį iš darbalapio ( B3:E13 čia) (įskaitant Antraštės ) ir paleiskite Makro vadinamas . Run_UserForm .

Svetainė Naudotojo forma bus įkeltas į darbalapį. Paieškos stulpelis lentelėje pasirinkau Fizika ir Matematika , nes noriu gauti mokinių vardus, kurie pasirodė Fizika ir Matematika egzaminai.

Grąžinimo stulpelis lentelėje pasirinkau Mokinio vardas ir pavardė , nes noriu gauti mokinių vardus.

Ir iš Bet kokia vertė arba konkreti vertė lentelėje pasirinkau Bet kokia vertė .

Galiausiai Pradinė ląstelė langelį, aš įdėjau G3 .

Tada spustelėkite GERAI . Gausite mokinių, kurie pasirodė Fizika ir Matematika egzaminai, pradedant nuo ląstelės G3 .

Jei būtumėte pasirinkę Konkreti vertė Bet kokia vertė arba konkreti vertė lentelę, būtumėte gavę dar vieną Tekstinis langelis įvesti konkrečią vertę.

Čia įvedžiau 100 .

Spustelėkite GERAI . Ir jūs gausite mokinių, kurie gavo 100 svetainėje Fizika ir Chemija .

Dalykai, kuriuos reikia prisiminti

Naudojome dvimatį masyvą, kad grąžintume mokinių vardus iš Vartotojo apibrėžta funkcija aprašyta pavyzdyje 2 .

Hugh Westas yra labai patyręs Excel treneris ir analitikas, turintis daugiau nei 10 metų patirtį šioje srityje. Jis yra įgijęs apskaitos ir finansų bakalauro bei verslo administravimo magistro laipsnius. Hugh turi aistrą mokymui ir sukūrė unikalų mokymo metodą, kurį lengva sekti ir suprasti. Jo ekspertinės žinios apie „Excel“ padėjo tūkstančiams studentų ir specialistų visame pasaulyje tobulinti savo įgūdžius ir tobulėti savo karjeroje. Savo tinklaraštyje Hugh dalijasi savo žiniomis su pasauliu, siūlydamas nemokamus „Excel“ vadovėlius ir internetinius mokymus, kad padėtų asmenims ir įmonėms išnaudoti visą savo potencialą.