Rozwiązanie 3¶
Treść zadania¶
Stwórz przycisk, który po kliknięciu wpisze w kolumnie C wszystkie wartości z zakresu A1:A10, które występują jednocześnie w zakresie B1:B10. Możesz założyć, że w obu zakresach wartości są unikalne w ramach danego zakresu.
Rozwiązanie¶
Sub CzescWspolna_Click()
Dim dane1, dane2, wynik As Range
Set dane1 = Range("A1:A10")
Set dane2 = Range("B1:B10")
Set wynik = Range("C1")
For Each kom1 In dane1
For Each kom2 In dane2
If kom1.Value = kom2.Value Then
wynik.Value = kom1.Value
Set wynik = wynik.Offset(1, 0)
Exit For
End If
Next kom2
Next kom1
End Sub
Opis rozwiązania¶
1. Deklarowanie zmiennych¶
Dimużywane jest do deklaracji zmiennych.dane1, dane2, wyniksą zmiennymi reprezentującymi zakresy komórek w arkuszu.
2. Ustawianie zakresów¶
Setprzypisuje odniesienie do obiektu do zmiennej.dane1idane2są ustawione na zakresy komórek A1:A10 i B1:B10 odpowiednio, awynikjest ustawiony na komórkę C1.
3. Pętla przez każdą komórkę w zakresie dane1¶
For Eachto pętla, która wykonuje blok kodu dla każdego elementu w kolekcji (tutaj dla każdej komórki w zakresiedane1).
4. Druga pętla przez każdą komórkę w zakresie dane2¶
- To druga pętla
For Eachwewnątrz pierwszej, która przechodzi przez każdą komórkę w zakresiedane2.
5. Porównanie wartości i zapisywanie wyniku¶
If kom1.Value = kom2.Value Then
wynik.Value = kom1.Value
Set wynik = wynik.Offset(1, 0)
Exit For
End If
If kom1.Value = kom2.Value Thensprawdza, czy wartość w komórce zdane1jest taka sama jak wartość w komórce zdane2.- Jeśli wartości są takie same, wartość ta jest umieszczana w komórce wskazanej przez
wynik. Set wynik = wynik.Offset(1, 0)przesuwa zakreswyniko jedną komórkę w dół, by następna wartość wspólna była zapisana w kolejnej komórce.Exit Fornatychmiast kończy wewnętrzną pętlęFor Each, gdy znaleziono dopasowanie, aby uniknąć niepotrzebnego przeszukiwania resztydane2dla tej samej wartościkom1.
6. Koniec pętli¶
Next kom2iNext kom1oznaczają koniec odpowiednich pętliFor Eachi powrót do ich początku, aby przejść do kolejnej komórki w odpowiednich zakresach.
7. Koniec procedury¶
End Suboznacza koniec skryptu (procedury).