Spis treści
W tym artykule pokażę Ci, jak możesz przeanalizować sytuację w Excelu VBA jeśli komórka zawiera wartość. Nauczysz się analizować sytuację zarówno dla dowolnej wartości, jak i konkretnej wartości.
Excel VBA Analiza: Jeśli komórka zawiera wartość to (Szybki podgląd)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo pojawiła się na egzaminie z fizyki." End If End Sub
Pobierz Zeszyt ćwiczeń
Pobierz ten zeszyt ćwiczeń, aby ćwiczyć podczas czytania tego artykułu.
VBA If Cell Contains Value Then.xlsmExcel VBA Analiza: Jeśli komórka zawiera wartość to zwróć wyjście (Analiza krok po kroku)
Mamy tu zbiór danych z ocenami niektórych uczniów z fizyki, chemii i matematyki w szkole o nazwie Słonecznikowe Przedszkole.
Puste komórki oznaczają, że student nie pojawił się, czyli był nieobecny na tym konkretnym egzaminie. Teraz przeanalizujmy sytuację, czy dana komórka zawiera wartość, czy nie, przy tym zestawie danych.
⧪ Krok 1: Deklarowanie komórki
Najpierw musimy zadeklarować komórkę, której wartość chcemy analizować. Przeanalizujmy, czy Jennifer Marlo pojawiła się na egzaminie z fizyki, czy nie.
Dlatego musimy sprawdzić, czy komórka C12 zawiera wartość lub nie.
Aby to zrobić, najpierw musimy zadeklarować komórkę C12 .
Linią kodu do osiągnięcia tego celu będzie:
Set Cell = Range("C12").Cells(1, 1)
⧪ Krok 2: Sprawdzenie, czy komórka zawiera wartość (w tym konkretną wartość)
Następnie musimy sprawdzić, czy komórka zawiera wartość, czy też nie. Wykonamy to za pomocą polecenia Jeżeli stan . linią kodu będzie:
If Cell.Value "" Then
Ten kod zostanie wykonany, jeśli komórka zawiera jakąkolwiek wartość. Aby sprawdzić jakąś wartość (np. czy zawiera 100 czy nie), należy użyć tej konkretnej wartości z an Równa się symbol.
If Cell.Value "" Then
⧪ Krok 3: Przydzielanie zadań
Następnie musisz ustawić zadanie, które zostanie wykonane, jeśli komórka zawiera wartość (lub określoną wartość).
Tutaj chcemy wyświetlić komunikat "Jennifer Marlo pojawiła się na egzaminie z fizyki". . więc linia kodu będzie:
MsgBox "Jennifer Marlo pojawiła się na egzaminie z fizyki."
⧪ Krok 4: Zakończenie bloku If
Na koniec trzeba zadeklarować zakończenie bloku If.
End If
Tak więc kompletny VBA kod będzie:
⧭ Kod VBA:
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo pojawiła się na egzaminie z fizyki." End If End Sub
⧭ Wyjście:
Uruchom ten kod klikając na Uruchom Sub/UserForm na pasku narzędzi.
Pojawi się komunikat "Jennifer Marlo pojawiła się na egzaminie z fizyki". jako komórka C12 zawiera wartość, z 50 .
Przykłady zastosowania polecenia Jeżeli komórka zawiera wartość, to określone wyjście w Excelu VBA
Nauczyliśmy się analizować czy komórka zawiera wartość czy nie w VBA A teraz przeanalizujmy kilka przykładów, aby zrozumienie było jasne.
1) Opracowanie makra do filtrowania wartości, jeśli odpowiadająca komórka zawiera dowolną wartość, a następnie w Excelu VBA
Opracujmy Makro aby odfiltrować studentów, którzy pojawili się na każdym z egzaminów.
Czyli musimy sprawdzić komórki zawierające oceny każdego z przedmiotów i zobaczyć czy zawierają wartość czy nie.
Jeśli tak, to musimy uporządkować nazwisko odpowiedniego ucznia.
Całość VBA kodem do osiągnięcia tego celu będzie:
⧭ Kod VBA:
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Enter the Reference of the First Cell of the Filtered Data: ") 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 "" Then.Range(Starting_Cell).Cells(Count, i - 1) = Selection.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 2 Next i End Sub
⧭ Wyjście:
Wybierz zestaw danych (w tym Nagłówki ) i uruchomić to Makro .
Najpierw zostaniesz poproszony o wpisanie odwołania do pierwszej komórki, w której chcesz mieć filtrowane dane. Ja wpisałem G3 .
Następnie kliknij OK . poznasz nazwiska uczniów, którzy pojawili się na każdym z egzaminów (m.in. Nagłówki ) w nowym zbiorze danych, począwszy od komórki G3 .
2. tworzenie funkcji zdefiniowanej przez użytkownika do sortowania wartości, jeśli odpowiednia komórka zawiera określoną wartość, a następnie w Excelu VBA
Teraz stworzymy funkcję zdefiniowaną przez użytkownika, która zwróci nazwiska studentów, którzy uzyskali określoną ocenę z każdego z przedmiotów.
Procedura jest prawie taka sama jak powyżej. Musimy sprawdzić komórki zawierające oceny z każdego z przedmiotów i zobaczyć, czy są one równe określonej wartości, czy nie.
Jeśli są, to zwrócimy nazwisko odpowiedniego ucznia.
Na stronie VBA kod będzie:
⧭ Kod VBA:
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
⧭ Wyjście:
Kod tworzy funkcję o nazwie Cells_with_Values który przyjmuje dwa argumenty, a mianowicie Zakres i Wartość .
Znajdźmy uczniów, którzy uzyskali 100 z każdego przedmiotu, używając tej funkcji.
Wybierz zakres komórek w swoim arkuszu i wprowadź tę funkcję w pierwszej komórce zakresu:
=Cells_with_Values(B3:E13,100)
[tutaj B3:E3 to mój zestaw danych (w tym. Nagłówki ) oraz 100 to moja wartość dopasowania, ty użyj swojej].
Następnie naciśnij CTRL + SHIFT + ENTER ( Wzór na tablicę Zwróci ona tablicę składającą się z nazwisk uczniów, którzy uzyskali 100 z każdego przedmiotu, w tym. Nagłówki .
3) Tworzenie formularza użytkownika w celu wyciągnięcia wartości, jeśli odpowiadająca komórka zawiera dowolną wartość (lub określoną wartość) w Excelu VBA
Na koniec opracujemy UserForm aby wyodrębnić nazwiska studentów, którzy pojawili się (lub otrzymali określone oceny) w pewnych określonych egzaminach.
⧪ Krok 1: Otwarcie formularza użytkownika
Idź do Insert> UserForm opcja w VBA aby otworzyć nowy UserForm . A nowy UserForm o nazwie UserForm1 zostanie otwarty.
⧪ Krok 2: Przeciąganie narzędzi do formularza użytkownika
Poza tym. UserForm , dostaniesz Skrzynka narzędziowa Przesuń kursor na Skrzynka narzędziowa i ciągnąć 4 etykiety (Label1, Label2, Label3, Label4) oraz 3 ListBoxy (ListBox1, ListBox2, ListBox3) i TextBox (TextBox1) w kształcie prostokąta nad UserForm .
Następnie przeciągnij kolejną Etykieta (Label5) i TextBox (TextBox2) do lewego dolnego rogu UserForm .
Na koniec przeciągnij CommandButton (CommandButton1) w prawym dolnym rogu.
Zmienić wskazania Etykiety do Kolumna Lookup , Kolumna powrotu , Dowolna wartość lub określona wartość , Wartość, oraz Komórka startowa.
Należy również zmienić sposób wyświetlania CommandButton1 do OK .
⧪ Krok 3: Napisanie kodu dla ListBox3
Kliknij dwukrotnie na ListBox3 . A Podprocedura prywatna o nazwie ListBox3_Click otworzy się, wprowadź tam następujący 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
⧪ Krok 4: Napisanie kodu dla CommandButton1
Następnie kliknij dwukrotnie na CommandButton1 . Inny Podprocedura prywatna o nazwie CommandButton1_Click otworzy się, wprowadź tam następujący 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 Then.If 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 "Enter a Valid Cell Reference as the Starting Cell.", vbExclamation End Sub
⧪ Krok 5: Napisanie kodu do uruchomienia formularza UserForm
Na koniec wstawiamy nowy Moduł od Pasek narzędzi VBA i wstawić tam następujący kod.
Sub Run_UserForm() UserForm1.Caption = "Filtrowanie komórek zawierających wartości" UserForm1.ListBox1.BorderStyle = fmBorderStyle UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyle = fmBorderStyle UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox3.BorderStyle = fmBorderStyle UserForm1.ListBox3.ListStyle = fmListStyleOption For i = 1 To.Selection.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 "Dowolna wartość" UserForm1.ListBox3.AddItem "Konkretna wartość" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False Załaduj UserForm1 UserForm1.Show End Sub
⧪ Krok 6: Uruchomienie UserForm (wyjście końcowe)
Twoja UserForm jest gotowy do użycia. Wybierz zestaw danych z arkusza ( B3:E13 tutaj) (m.in. Nagłówki ) i uruchomić Makro o nazwie Run_UserForm .
Na stronie UserForm zostanie wczytany do arkusza. z Kolumna Lookup w tabeli, wybrałem Fizyka oraz Matematyka ponieważ chcę uzyskać nazwiska uczniów, którzy pojawili się w Fizyka oraz Matematyka egzaminy.
Z. Kolumna powrotu w tabeli, wybrałem Imię i nazwisko ucznia , bo chcę uzyskać nazwiska uczniów.
I od Dowolna wartość lub określona wartość w tabeli, wybrałem Dowolna wartość .
Wreszcie, w Komórka początkowa pudełko, umieściłem G3 .
Następnie kliknij OK . dostaniesz nazwiska uczniów, którzy pojawili się w Fizyka oraz Matematyka egzaminy zaczynające się od komórki G3 .
Gdybyś wybrał Wartość szczegółowa od Dowolna wartość lub określona wartość tabeli, otrzymalibyście kolejny TextBox aby wprowadzić określoną wartość.
Tutaj wpisałem 100 .
Kliknij OK . And you'll get the students who got 100 w Fizyka oraz Chemia .
Rzeczy do zapamiętania
Użyliśmy dwuwymiarowej tablicy, aby zwrócić nazwiska uczniów w Funkcja zdefiniowana przez użytkownika opisany w przykładzie 2 .