Excel i VBA - formatowanie warunkowe inaczej

Kiedyś już pisałem jak można formatować komórki w excelu za pomocą funkcji formatowania warunkowego. W większości przypadków jest to zupełnie wystarczająca umiejętność.
Jest jednak sposób który zabezpieczy dodatkowo nasze arkusze przed nieumyślnym skasowaniem lub nadpisaniem reguł formatowania, tym bardziej że do edytora Visual Basic osoby z nim nieobeznane bardzo niechętnie zaglądają :) nawet gdybyśmy nie zabezpieczyli dostępu do odczytania samego makra.

W dalszym ciągu będziemy korzystać z przykładu omówionego poprzednio nieco go tylko poszerzając.

vba_fw__r_dane.png

Wiemy już jak określić ostatnią kolumnę i ostatni wiersz.

vba_fw__r_granice.png

Tym razem chcę wprowadzić coś nowszego polegającego na użyciu pętli for…next wewnątrz której będzie kilka instrukcji warunkowych if i w zależności od wartości w komórce wykona się instrukcja zmieniająca kolor tła komórki

Cells(wiersz, kolumna).Interior.ColorIndex = indeks_koloru

indeks_koloru - to wartość powinna być w przedziale od 1 do 56

Ponieważ nie wiemy jakie kolory są dostępne pod jakim indeksem to sobie trochę pomożemy generując tabelę kolorów. Zrobimy to w kolumnie ósmej. Po wklejeniu poniższego kodu do okna Visual Basic. Czyli w Excelu za pomocą Lewy Alt + F11 uruchamiamy VBA wybieramy Arkusz1 i wklejamy ten kod

Sub kolory ()
For w = 1 To 56
Cells(w, 7).Value = w
Cells(w, 8).Interior.ColorIndex = w
Next
End Sub

W liniach wewnątrz pętli for znajdują się instrukcje, które kolejno:
1 wstawiają wartość w kolumnę 7
2 zmieniają kolor tła komórki w koluminie 8

Wszystko po to by można było zidentyfikować jaki indeks odpowiada danemu kolorowi.

Będzie to wyglądać mniej więcej tak

kolor-index.png

Kiedy już wiemy jaki kod ma dany kolor możemy przejść do sedna

Wpiszmy następujący przykładowy kod.


Sub kolory()

For w = 1 To 16
If Cells(w, 2).Value < 5 Then
Cells(w, 1).Interior.ColorIndex = 33
End If
If Cells(w, 2).Value > 5 And Cells(w, 2).Value < 10 Then
Cells(w, 1).Interior.ColorIndex = 26
End If
If Cells(w, 2).Value > 10 Then
Cells(w, 1).Interior.ColorIndex = 3
End If
If Cells(w, 2).Value = 5 Then
Cells(w, 1).Interior.ColorIndex = 3
End If
If Cells(w, 2).Value = 10 Then
Cells(w, 1).Interior.ColorIndex = 44
End If
Next

Po uruchomieniu tego makra dostaniemy coś takiego

makro_kolory.png

Aby pogrubić tekst w danej komórce stosujemy polecenie


Cells(w, 1).Font.Bold = True

To na razie tyle :)

Nieco więcej przeczytasz klikając w ten link Excel i VBA - formatowanie warunkowe

onlyregistered1.png Przydała Ci się ta informacja? Subskrybuj mój kanał RSS, by być na bieżąco z nowymi wiadomościami.

----------------------------------------------------------
KOCHANI CZYTELNICY ! Obecnie nie prowadzę aktywnej opieki nad tą stroną. Dużo z zawartych tu informacji zdezaktualizowało się i nie będzie tak pomocne jak dawniej. Mam nadzieję że znajdziecie tu jednak coś przydatnego. Gdyby były jakieś szczególne prośby z Waszej strony to możecie kierować je na email dartu@wp.pl Postaram się odpisać, chociaż nie obiecuję że nastąpi to szybko. Dariusz Tupaj 23.02.2019
----------------------------------------------------------

Leave a Reply