logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

makro do podmiany formatu komórki bez kasowania jej wartosci

daro_p 16 Sty 2016 22:19 1245 16
REKLAMA
  • #1 15341475
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Witam. Nie jestem laikiem w tym temacie ale potrzebuje pomocy kogoś mądrzejszego 😊. Opisze problem. Robię cos na wzór mapy na której nanoszę kody obszarów do analizy ( w formacie 4 cyfry ) - kilkaset obszarów. W innym arkuszu mam zaimportowane dane, gdzie do danych obszarów kodowych zaciągnięte mam kwoty sprzedażowe - z zaznaczoną skala kolorów poprzez autoformatowanie. Na przykład w arkuszu1 w komórce a1 wpisze rejon 4111 - potrzebuje kodu, który przeszuka kolumnę B w arkuszu2 i odnajdzie wartość 4111, następnie skopiuje kolor komórki w tym samym wierszu tylko w kolumnie C ( tam gdzie jest kwota sprzedaży z rejonu 4111) i skopiuje formatowanie koloru do wyjściowej komórki w arkuszu1, ale bez kasowania jej wartości - i tak w pętli dla danego obszaru w arkuszu1 ( gdzie mogą wystąpić tez puste komórki, gdyż arkusz naniesiony będzie na realna mapę 😊 ). Troche to skomplikowane, ale pracuje nad sporym projektem analitycznym ( mapa sprzedaży) i utknąłem na tym etapie. Czy ktos podejmie się pomocy.
  • REKLAMA
  • #2 15341523
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Jest to dość proste przy jednej regule formatowania warunkowego. Trudniej, gdy jest ich więcej. Wklej zrzut ekranu menedżera dla całego arkusza.
  • #3 15341572
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Witam. Postaram się ja będę w pracy, ale najprościej ujmę to tak. Arkusz1 ma mapę w tle. Na to w odpowiednich komórkach wpisuje numery kodowe rejonów ( i to jest układ troche losowy - jak to mapa, nie wszystkie komórki zawierają wartosci). W arkuszu2 gdzie dane są juz w logicznej całości w kolumnie b są numery stref kodowych, a w c dopasowane do nich wartości sprzedaży. Klumna c jest z autofarmatowaniem - kolory od zielonego do czerwonego ( najwyższej sprzedaży do najniższej). Cały problem w tym, aby te kolory skopiować do arkusza1 do danej komórki, ale bez usuwania z niej nr z kodem regionu. Dane sprzedażowe importuje przez SQL, tak wiec kod powinien "odświeżyć" mapę ( zaktualizować kolory).
  • REKLAMA
  • #4 15341587
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Możesz wrzucić plik z przykładowymi danymi (kilka wierszy)? Nie jestem pewien o jaki sposób "kolorowania" chodzi.
  • #5 15345578
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Wysłałem przykładowy plik na PW.
    Napisałeś, że temat jest dosyć prosty - ja też tak myślałem jak zaczynałem projekt :-)
    Z góry dziękuję za wszystkie podpowiedzi.
  • #6 15347672
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Oj, zadałeś bobu :)
    To nie jest formatowanie warunkowe oparte na formule, ale wbudowane...
    Nie wiem, czy jest możliwe przypisać właściwości takiego sposobu formatowania do zmiennych. Założyłem, że nie.

    Rozwiązanie oparłem o Interior.Color = RGB
    Trzeba dopracować obliczenia w formułach oraz kolory, ale i "na kolanie" jakoś w miarę wyszło.

    W związku z tym, że nie ma żadnych poufnych danych, zamieszczam plik na forum. Może komuś przyjdzie do głowy coś prostszego ;)
    Załączniki:
    • Przykład.zip (107.3 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #7 15349460
    Maciej Gonet
    Specjalista - VBA, Excel
    Posty: 2207
    Pomógł: 824
    Ocena: 481
    Nie wiem, w której wersji Excela ma być realizowana ta mapa, ale od wersji 2010 można wykorzystać właściwość DisplayFormat, która uwzględnia formatowanie warunkowe.
  • #8 15350760
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Ślicznie dziękuję za zainteresowanie tematem. Adamas wynik końcowy jest dokładnie tym o co mi chodziło, ale rzeczywiście jeżeli jest prostsza metoda to poproszę. Dzisiaj sprawdziłem dokładnie ile mam rejonów kodowych - około 1400, ale jest to wartość zmienna (różne miasta). Jest z tym trochę zabawy. Zastanawia mnie tylko opcja z formułami - czy jest to niezbędne (chodzi mi o sytuację kiedy liczba rejonów zmieni się np na 500, wtedy trzeba korygować ręcznie formuły). W tym momencie dodatkowo kody uruchamiane są zdarzeniami z poziomu arkusza, ale nie mogę rozgryźć tej linii :-(

    If Not Intersect(Target, Range("A1:O36")) Is Nothing And Target.Count = 1 Then

    Chyba prostszym rozwiązaniem jest uruchamianie kodów "z przycisku" - ma być to narzędzie dla laików ( z 1 guzikiem "odśwież dane")

    Ale brawo za pomysł i poziom wiedzy :-)

    Dodano po 1 [minuty]:

    Wersja Excela to 2007

    Dodano po 3 [godziny] 7 [minuty]:

    Zauważyłem także, że w Twojej propozycji kolor komórek na mapie zmienia się po zmianie zawartości komórki. Zależy mi na tym, aby po imporcie aktualizowała się cała mapa. Poza tym super !!! Dzięki.
    Na pewno jest to baza do moich dalszych eksperymentów :-)
  • #9 15366297
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Kolego Adamas zwracam się jeszcze raz o pomoc. Niestety mam ponad 1400 rejonów kodowych i zmiana formuł na taką ilość danych jest karkołomna. Może uda się to zrobić na zasadzie skopiowania gotowego koloru komórki ( sam wypełnię kolory w kolumnie, w zależności od wartości). Kod powinien go tylko odczytać i skopiować na mapę. Oczywiście po zaimportowaniu nowych danych jestem zmuszony "hurtowo" odświeżyć całość i nadpisać nowe kolory na mapę - znalazłem już fragment gotowca.

    Sub Odswiez()
    Dim cell_ As Range
    For Each cell_ In Worksheets("mapa").Range("A1:AY466")
    If cell_.Value <> "" Then 'kod do kopiowania
    Next
    End Sub

    Czy mogę liczyć na pomoc?
  • #10 15367131
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Da się. Proponuję zostawić procedurę przy zmianie i dodatkowo dopisać makro 'Refresh' (kolorowanie nie jest zdarzeniem arkusza, więc nie spowolni)

    Czy mamy coś nowego, czy działamy na załączniku wyżej?
  • #11 15367724
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Wkleiłem pliczek z "prawie" realnymi danymi- może to ułatwi rozwiązanie problemu.
    Skorygowałem formuły, które odpowiadają wartościom RGB. Dodam, że mapa jest formatu A1, tak więc sięga do zakresu DH860 w arkuszu mapa - spora ilość komórek do sprawdzenia. Oczywiście kod szuka tylko formatowania koloru bez zmiany danych, a komórki puste wartości pomija. Jedyny mankament jaki zauważyłem w tym załączniku , to fakt, że nawet jeżeli wszystkie rejony mają taką samą wartość sprzedaży to i tak kolory zaznaczą min - max wg kolejności. Dodam, że poświęciłem kilka dni na rozwiązanie problemu poprzez wbudowane funkcje autoformatowania na podstawie wartości i niestety przy takich danych to porażka - nie znalazłem sposobu pomimo rozbijania kolorów na czynniki pierwsze.
    Załączniki:
    • Przykład do analizy.rar (182.74 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 15367774
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Spróbuj coś w ten deseń
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod


    Edit: Przyszło mi do głowy... kolory są b.podobne, może wartość sprzedaży wrzucić do komentarzy? Usuwałoby się w zdarzeniu arkusza przy "czyszczeniu" komórki...
  • REKLAMA
  • #13 15368599
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Super pomysł, jezeli byłbyś tak uprzejmy i dodał kod w przykładzie 😊 to będę bardzo wdzięczny.
  • #14 15368901
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    I zapomnieliśmy (uzupełnione) o usuwaniu koloru wypełnienia przy =""

    Dołożyłem dodatkowe makro 'odsMocno', które robi porządek we wszystkich komórkach zakresu, włączając puste - dlatego działa o wiele dłużej niż 'ods'. Przyda się być może od czasu do czasu.
    Załączniki:
    • Przykład do analizy.zip (227.87 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 15377375
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Bomba - działa super. Jest tylko jeszcze jeden drobny "mankament". Mam w kilku miejscach na mapie wpisane dodatkowe opisy - no i one kolorują się na zielono (nie było tego w przykładzie, więc jest to pominięte - wyszło dopiero w pracy). Kod działa prawidłowo, bo szuka "niepustej komórki", ale proszę Cię jeszcze o drobną modyfikację, że jeżeli kod nie odnajdzie zadanej wartości w pliku dane w kolumnie B (czyli napotka jakiś inny tekst, którego nie ma w danych), to także pomija ją w formatowaniu - może przez funkcję "wyszukaj pionowo". Poza tym jest już extra i już prawie mam projekt skończony.:D Jesteś wielki - wielkie dzięki.
  • #16 15377627
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Nie pomyślałem o tym... Usuń w takim razie makro 'odsMocno', ponieważ nie ma racji bytu (i pomyliłem znaki :) ). Poniżej korekta 'ods'.
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod

    Procedura zdarzeniowa arkusza, zdaje się, działa prawidłowo.
  • #17 15378141
    daro_p
    Poziom 17  
    Posty: 218
    Pomógł: 19
    Ocena: 51
    Działa super. Dziękuję.

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w stworzeniu makra w Excelu, które umożliwi mu skopiowanie kolorów komórek z jednego arkusza do drugiego, bez usuwania wartości w tych komórkach. W arkuszu1 użytkownik wprowadza kody obszarów, a w arkuszu2 znajdują się dane sprzedażowe z przypisanymi kolorami. Użytkownik potrzebuje kodu, który przeszuka kolumnę z kodami w arkuszu2, skopiuje kolor odpowiadającej komórki w kolumnie z wartościami sprzedaży i przeniesie go do arkusza1. W dyskusji poruszono różne metody realizacji tego zadania, w tym wykorzystanie właściwości DisplayFormat w Excelu 2010 oraz zastosowanie makr do automatyzacji procesu. Użytkownik otrzymał kilka propozycji kodów VBA, które umożliwiają realizację jego celu, w tym obsługę błędów oraz dodawanie komentarzy do komórek.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA