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¶
Dim
używane jest do deklaracji zmiennych.dane1, dane2, wynik
są zmiennymi reprezentującymi zakresy komórek w arkuszu.
2. Ustawianie zakresów¶
Set
przypisuje odniesienie do obiektu do zmiennej.dane1
idane2
są ustawione na zakresy komórek A1:A10 i B1:B10 odpowiednio, awynik
jest ustawiony na komórkę C1.
3. Pętla przez każdą komórkę w zakresie dane1¶
For Each
to 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 Each
wewną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 Then
sprawdza, czy wartość w komórce zdane1
jest 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 zakreswynik
o jedną komórkę w dół, by następna wartość wspólna była zapisana w kolejnej komórce.Exit For
natychmiast kończy wewnętrzną pętlęFor Each
, gdy znaleziono dopasowanie, aby uniknąć niepotrzebnego przeszukiwania resztydane2
dla tej samej wartościkom1
.
6. Koniec pętli¶
Next kom2
iNext kom1
oznaczają koniec odpowiednich pętliFor Each
i powrót do ich początku, aby przejść do kolejnej komórki w odpowiednich zakresach.
7. Koniec procedury¶
End Sub
oznacza koniec skryptu (procedury).