Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - Excel VBA - pisanie makra - formatowanie i pętle.

22 Kwi 2014 14:55 1551 1
  • Poziom 1  
    Witam, mam mały problem z rozgryzieniem makra.

    Docelowe działanie:

    Komórki B5 i B6 decydują o ilości produktów oraz ilości elementów z których się będzie składał każdy z elementów (w tej wersji każdy z produktów składa się z tej samej liczby elementów). Po wpisaniu odpowiednich wartości i nacisnięciu przycisku GENERUJ (jeszcze go nie ma) tworzony jest kosztorys jak w załączniku. Przykład jest dla produktów 2 i elementów 3. Pola oznaczone na czerwono są dowolnie modyfikowane.

    Komórki D11 i D12 (plus kolejne w kolumnie D jeśli jest więcej produktów) w zależności od ilości produktów decydują jakie jest formatowanie każdego z produktów, czyli zmiana z USD na PLN w D11 powinno automatycznie zmieniać formatowanie dla komórek : C11, C19-C23 (wartość zależna od liczby elementów) i analogicznie kolumna E19-e23 (wartość zależna od liczby elementów) oraz suma E24 (wartość zależna od liczby elementów)

    Docelowe formatowanie: walutowe, PLN, EUR, USD:

    Selection.NumberFormat = "[$€-2] #,##0" dla EUR
    Selection.NumberFormat = "[$$-409]#,##0" dla USD
    Selection.NumberFormat = "#,##0 $" dla PLN

    Zakres pomocy:
    1. Zmiana formatowania komórek w zależności od ilości produktów i elementów.

    W związku z faktem, że zmiana waluty w komórkach D11,D12 itd. ma odbywać się PO generowaniu i po uzupełnieniu pól z wierszy 1.1, 1.2 2.1, 2.2 itd proces ten powinien wykrywać także możliwość dodania wierszy - kolejnych elementów w którymkolwiek z produktów.

    Pętle zatem zależne od ilości produktów i ilości elementów nie mogą mieć miejsca.

    Poszukuję rozwiązania do wybierania zakresu komórek, najlepiej poprzez wyszukiwanie wierszy dla Produktu X --> wybrane są wiersze w których są komórki X.1 X.2 aż do ostatniej wypełnionej czyli X.Y oraz dodatkowe ewentualnie ręcznie dodane wiersze X.Y+1 itd. Dodatkowo wybrana by była komórka z 1 linii niżej i (kolumna E - oznaczająca Sumę).

    2. Dodatkowo oprócz wymaganej funkcji, prośba o informację gdzie ją umieścić? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ?

    Dodatkowe informacje:
    1. Proces generowania już mam rozplanowany więc nie jest on zakresem wymaganym.
    2. Kursy walut są wpisywane ręcznie - nie potrzeba aktualizacji automatycznej :)
    3. W związku z faktem, że nie znam opcji wyszukiwanie pionowe, poziome itd proszę się nie śmiać i wytyczać palcami.
    4. Lwia część makr do tego arkusza jest tworzona poprzez odczyt zarejestrowanych makr - nagrywam działanie i potem analizuję.
  • Poziom 11  
    Witam,
    generalnie to mam wrażenie, że Twój opis jest bardziej zagmatwany niż to czego faktycznie potrzebujesz.
    Niestety w załączniku nie ma makr, którymi planujesz generować swoje zestawienie i to trochę utrudnia znalezienie właściwego rozwiązania.
    To co mi się na początek rzuca w oczy to układ pliku. Dodanie kolejnych produktów spowoduje przesunięcie generowanego zestawienia w dół, a to zmienia ewentualne przypisanie zakresów. Z tym co prawda można sobie poradzić. Chociaż umieszczenie danych wejściowych byłoby lepsze w innych kolumnach niż dane wyjściowe. Wtedy przy odpowiednim zastosowaniu formatowania warunkowego można by rozwiązać Twój problem bez pisania dodatkowych makr.

    Dla kolumny C należałoby w formatowaniu warunkowym wpisać odpowiednie formuły.
    Aby to zrobić wchodzisz w następujące miejsce na karcie Narzędzia główne:
    Formatowanie warunkowe --> Nowa reguła --> Użyj formuły do określenia komórek, które należy sformatować
    W polu Formatuj wartości, dla których....
    wpisujesz formułę (dla euro): =WYSZUKAJ.PIONOWO(A1;$A:$D;4;0)="EUR"
    dla USD (kolejna reguła): =WYSZUKAJ.PIONOWO(A1;$A:$D;4;0)="USD"

    Tu uwaga: aby to zadziałało w kolumnie A zamiast oznaczeń 1.1, 1.2... , 2.1, .... itp. powinny znaleźć się oznaczenia zbieżne z dla listy produktów czyli 1, 2, itd.

    Ważne jest aby ta formuła była napisana dokładnie w taki sposób oraz dotyczyła kolumny C. Ponadto połączenie listy produktów po kolumnie A z tą częścią (jak rozumiem) generowaną powinno być jednoznaczne (czyli produkt oznaczony 1 to i elementy na liście oznaczone 1 a nie 1.1, 1.2 itd.)

    Formatowanie możesz ustawić sobie dowolnie w zależności od potrzeb.

    To oczywiście dotyczy tylko formatowania dla kolumny C. Dla kolumny E można zrobić analogicznie.