Porównaj zakresy w Excel VBA - łatwe makra Excel

Spisie treści

Poniżej przyjrzymy się programowi w Excel VBA że porównuje wybrany losowo zakresy i wyróżnia komórki, które są unikalne. Jeśli nie znasz jeszcze obszarów, zalecamy najpierw przeczytanie tego przykładu.

Sytuacja:

Uwaga: jedyną unikalną wartością w tym przykładzie jest 3, ponieważ wszystkie inne wartości występują w co najmniej jeszcze jednym obszarze. Aby wybrać zakres ("B2:B7,D3:E6,D8:E9"), przytrzymaj Ctrl i wybierz każdy obszar.

Umieść przycisk polecenia w arkuszu i dodaj następujące wiersze kodu:

1. Najpierw deklarujemy cztery obiekty Range i dwie zmienne typu Integer.

Zakres przyciemnieniaToUse As Range, pojedynczy obszar jako zakres, komórka1 jako zakres, komórka2 jako zakres, i jako liczba całkowita, j jako liczba całkowita

2. Inicjujemy obiekt RangeToUse z wybranym zakresem.

Ustaw zakresDoUżycia = Wybór

3. Dodaj linię, która zmienia kolor tła wszystkich komórek na „Bez wypełnienia”. Dodaj również linię, która usuwa granice wszystkich komórek.

Komórki.Wnętrze.KolorIndeks = 0
Cells.Borders.LineStyle = xlBrak

4. Poinformuj użytkownika, gdy wybiera tylko jeden obszar.

Jeśli Selection.Areas.Count <= 1 Wtedy
MsgBox "Proszę wybrać więcej niż jeden obszar."
W przeciwnym razie
Zakończ, jeśli

Kolejne wiersze kodu (przy 5, 6 i 7) należy dodać między Else i End If.

5. Pokoloruj komórki wybranych obszarów.

rangeToUse.Interior.ColorIndex = 38

6. Obramuj każdy obszar.

Dla każdego pojedynczego obszaru W zasięguDoUżycia.Obszary
singleArea.BorderAround ColorIndex:=1, Waga:=xlThin
Następny pojedynczyObszar

7. Reszta tego programu wygląda następująco.

For i = 1 Do zakresuDoUżycia.Obszary.Liczba
Dla j = i + 1 Do zakresuDoUżycia.Obszary.Liczba
Dla każdej komórki1 In rangeToUse.Areas(i)
Dla każdej komórki2 In rangeToUse.Areas(j)
Jeśli komórka1.Wartość = komórka2.Wartość Wtedy
komórka1.Wnętrze.KolorIndeks = 0
komórka2.Wnętrze.KolorIndex = 0
Zakończ, jeśli
Następna komórka2
Następna komórka1
Następny j
Dalej ja

Wyjaśnienie: może to wyglądać trochę przytłaczająco, ale nie jest to takie trudne. rangeToUse.Areas.Count jest równe 3, więc pierwsze dwie linie kodu zmniejszają się do For i = 1 do 3 oraz For j = i + 1 do 3. Dla i = 1, j = 2, Excel VBA porównuje wszystkie wartości z pierwszego obszaru ze wszystkimi wartościami drugiego obszaru. Dla i = 1, j = 3, Excel VBA porównuje wszystkie wartości pierwszego obszaru ze wszystkimi wartościami trzeciego obszaru. Dla i = 2, j = 3, Excel VBA porównuje wszystkie wartości drugiego obszaru ze wszystkimi wartościami trzeciego obszaru. Jeśli wartości są takie same, ustawia kolor tła obu komórek na „Brak wypełnienia”, ponieważ nie są one niepowtarzalne.

Wynik po kliknięciu przycisku polecenia na arkuszu:

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave