Excel 2007: Formatowanie warunkowe, tak aby każdy wiersz pokazywał niskie wartości na żółto, wysokie wartości na czerwono

14

Mam arkusz kalkulacyjny z około 300 wierszami. Każdy wiersz ma około 15 kolumn, a każda komórka zawiera wartość liczbową. Każdy rząd odpowiada produktowi.

Chcę uzyskać program Excel dla każdego produktu, aby podświetlić komórki o najwyższych liczbach na czerwono i najniższych liczbach na żółto, z gradientem dla liczb pomiędzy nimi. Tak się dzieje, jeśli zaznaczę wiersz (konkretnie 15 komórek w wierszu, które zawierają moje dane), a następnie kliknę Formatowanie warunkowe> Skale kolorów> Skala kolorów czerwono-żółta.

Mam jednak 300 wierszy i wybranie każdego wiersza z osobna i ustawienie formatowania warunkowego potrwa zbyt długo. Z drugiej strony, jeśli wybiorę cały zakres i zastosuję formatowanie warunkowe, program Excel obliczy kolory na podstawie całego zakresu, podczas gdy w rzeczywistości chcę, aby były obliczane na podstawie rzędów. Na przykład weź te przykładowe dane:

1 2 3
4 5 6
7 8 9

Dane wyjściowe, które chcę, używając Y dla żółtego, O dla pomarańczowego, R dla czerwonego, to:

Y O R
Y O R
Y O R

Jeśli jednak wybiorę cały zakres i zastosuję formatowanie warunkowe, otrzymam:

Y Y Y
O O O
R R R

Czy istnieje sposób na osiągnięcie tego bez robienia pojedynczych rzędów?

Michael Pavey
źródło
@wizlog: Zgadza się. Najwyższa wartość z rzędu powinna być czerwona, najniższa wartość w tym rzędzie powinna być żółta, a pozostałe wartości powinny znajdować się gdzieś pośrodku (im bliżej najwyższej wartości, tym bardziej czerwony).
Michael Pavey
Podoba mi się to pytanie ... Zobaczę, czy mogę znaleźć odpowiedź ... Prawdopodobnie minie kilka godzin, zanim znów będę mógł pomóc, mam nadzieję, że inni członkowie SuperUser znajdą odpowiedź w odpowiednim czasie ...
wizlog
Też mi się podoba to pytanie. Ale nie widzę innego sposobu podejścia do tego niż użycie makra. Mam jednak nadzieję, że ktoś udowodni, że się mylę.
Ellesa

Odpowiedzi:

15

Oto makro, które tworzy format warunkowy dla każdego wiersza w wybranym zaznaczeniu. Robi to, kopiując format pierwszego wiersza do KAŻDEGO wiersza w zaznaczeniu (jeden po drugim, nie całkowicie). Zamień B1: P1 na odniesienie do pierwszego wiersza w tabeli danych.

Sub NewCF()
    Range("B1:P1").Copy
    For Each r In Selection.Rows
        r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
End Sub

Aby użyć, zaznacz niesformatowane wiersze w zbiorze danych (w moim przypadku B2: P300 ), a następnie uruchom makro. W poniższym przykładzie zwróć uwagę, że maksymalne liczby w pierwszych dwóch wierszach wynoszą odpowiednio 5 i 15 ; obie komórki są ciemnoczerwone .

Jestem jednak pewien, że istnieje szybsze rozwiązanie niż to.

wprowadź opis zdjęcia tutaj

Ellesa
źródło
1
Dzięki, działało to pięknie. To także świetny przykład wartości proszenia o pomoc, gdy nie jestem pewien ... Byłem zniechęcony pomysłem użycia makra, ponieważ założyłem, że będę musiał nauczyć się ustawiać formatowanie warunkowe od zera. Pobieranie makra tylko w celu skopiowania istniejącego formatowania jest o wiele bardziej sprytne :)
Michael Pavey
@MichaelPavey Cieszę się, że mogłem pomóc! I witamy w Superuser! :)
Ellesa
1
+ 1. Jeśli ktoś jest zainteresowany, rozwinąłem
Doug Glancy
To niedorzeczne, że tego typu rzeczy nie są wbudowane w Excela jako funkcję. Czy to rzadkie, aby porównywać wiersze w ten sposób?
Alex
5

Najłatwiejszym sposobem na osiągnięcie tego jest przyrostowe kopiowanie / wklejanie. Najpierw sformatuj 1 wiersz tak, jak chcesz. Następnie skopiuj i wklej formatowanie tylko do TYLKO drugiego wiersza. Teraz skopiuj ZARÓWNO rzędy 1 i 2, a następnie wklej formatowanie do wierszy 3 i 4. Spłucz i powtórz, Kopiuj 4, przeszłość 4, kopiuj 8, wklej 8, kopiuj 16, wklej 16. Gdy masz już przyzwoitą ilość, np. 16, wklej go kilka razy, aby uzyskać do 64 lub 128. Następnie możesz je skopiować i wkleić ich formatowanie, a wykładniczo pokrywasz więcej terytorium niż wcześniej.

To nie jest eleganckie, i z mojego doświadczenia wynika, że ​​zasoby wymagane do warunkowego sformatowania jedzącego wiersza zaczynają być zwiększane do około 2500 wierszy ... ale załatwiają sprawę.

Chciałbym tylko, żeby istniała logika, która nie stworzyła osobnego formatu warunkowego dla każdego wiersza, ograniczając zasoby ...

Poultron
źródło
Myślę, że OP powiedział: „Mam jednak 300 wierszy i wybranie każdego wiersza z osobna i ustawienie formatowania warunkowego potrwa zbyt długo”. w pytaniu
Prasanna
@Poultron, dzięki! Aby dodać do tego: Używając Ctrl / Cmd + Shift + Strzałka w górę / w prawo, możesz łatwo wybrać wszystkie poprzednie wiersze i kolumny, więc nie musisz liczyć poprzednich wierszy. Następnie, gdy będziesz gotowy do wklejenia, po prostu umieść kursor w pierwszej komórce poniżej już sformatowanych wierszy i tylko w specjalnym formacie wklejania, rozszerzy się on na tyle wierszy, ile zostało skopiowanych. Ctrl / Cmd + Shift + V zapamięta również ostatnią specjalną pastę, której chcesz użyć, więc cały proces przebiega dość szybko. Po prostu użyłem go w dwóch arkuszach kalkulacyjnych z 600 rzędami każdy.
Oskar Austegard
Zrobiłem to na stole z ~ 100 rzędami i działało pięknie. Wziąłem tylko 7 wersji Format Painter.
mskfisher
0

Właśnie znalazłem ten i inne przykłady tego, jak to zrobić za pomocą VBA i przyszło mi to do głowy, i wymyśliłem stosunkowo szybki i bezbolesny sposób robienia tego samego bez konieczności znajomości lub kopiowania jakiegokolwiek skryptu.

Zastosuj żądane formatowanie warunkowe do dowolnego wiersza, a następnie podświetl cały wiersz. Następnie kliknij prawym przyciskiem myszy w dowolnym miejscu wzdłuż krawędzi (mysz powinna być ikoną Przenieś) i przeciągnij w dół do następnego wiersza. W wyskakującym menu kontekstowym wybierz „Kopiuj tutaj tylko jako formaty”. Teraz powinieneś zastosować format warunkowy do obu wierszy osobno. Następnie kontynuuj robienie tego rekurencyjnie, tyle że teraz możesz zaznaczyć i skopiować 2 lub więcej wierszy jednocześnie.

Nie jest to jednorazowa transakcja jak powyższy kod, ale jest wykładniczo szybsza niż wykonywanie jednej linii na raz. Mam nadzieję że to pomoże.

Chris S.
źródło
0

Możesz także zastosować formatowanie warunków do jednego wiersza. Ponownie podświetl wiersz i kliknij dwukrotnie „Format Painter”, aby go zablokować. Użyj klawisza strzałki w dół, aby zastosować warunek do innych wierszy.

Dla mojej firmy zwykle blokuje makro w programie Excel, więc to działa dla mnie. mam nadzieję, że ci to pomoże.

Genx
źródło