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.

EXCEL - makro wyszukujące kryterium i pokazujące zakres

18 Lut 2010 12:19 3872 9
  • Poziom 10  
    Witam, mam "mały kłopot".
    Tworzę arkusz rozliczający koszty, jednak danych jest sporo i chcę ułatwić sobie pracę.
    Arkusz wygląda tak:
    EXCEL - makro wyszukujące kryterium i pokazujące zakres

    Chciałbym aby:

    1) w formularzu "lista firm" wyświetlała się lista firm (np. ABEL, AGROS NOVA, ALGIDA), jednak formatując formant i podając zakres kryteriów w postaci $B$6;$B$19;$B$32 wyskakuje mi błąd "błędny zakres kryteriów"

    2) Jeżeli już lista firm będzie działać, to po wybraniu np. firmy AGROS NOVA i kliknięciu WYSZUKAJ wyskakiwał tylko zakres wierszy od 19 do 31, a np po wybraniu ALGIDA zakres wierszy od 32 do 44

    3) po kliknięciu PEŁNA LISTA wyświetla się pełna lista firm.

    Nadmienię że próbowałem filtry zaawansowane, ale nie za bardzo mi wychodzi, arkusz ma ok 1500 wierszy, więc kręcenie kółkiem jest już męczące.
    Bardzo proszę o pomoc i z góry dziękuję za łopatologiczne wytłumaczenie (VBA nie znam w ogóle)

    Pozdrawiam
    Marcel
  • Pomocny post
    Moderator Programowanie
    1) Lista musi mieć ciągły zakres. Najlepiej wykorzystać do tego osobny arkusz. Trochę można zautomatyzować (patrz załącznik). Założyłem, że nazwa firmy w Arkusz1 występuje co 13 wierszy.

    2) W przykładzie wykorzystałem VBA (Select Case) i ukrywanie/odkrywanie wierszy

    3) j.w.
  • Poziom 10  
    Właśnie o coś takiego mi chodziło. Mam jeszcze pytanie czysto techniczne.
    Mamy kod VBA:
    Code:
    Sub UkrOdk()
    
    Select Case Range("A1")
      Case 1
        Rows("6:18").EntireRow.Hidden = False
        Rows("19:57").EntireRow.Hidden = True
      Case 2
        Rows("6:18").EntireRow.Hidden = True
        Rows("19:31").EntireRow.Hidden = False
        Rows("32:57").EntireRow.Hidden = True
      Case 3
        Rows("6:31").EntireRow.Hidden = True
        Rows("32:44").EntireRow.Hidden = False
        Rows("45:57").EntireRow.Hidden = True
      Case 4
        Rows("6:44").EntireRow.Hidden = True
        Rows("45:57").EntireRow.Hidden = False
      Case Else
        Rows.EntireRow.Hidden = False
    End Select
    End Sub


    Rozumiem że zakresy ukrywania i odkrywania wierszy muszę "z palca" uzupełnić w skrypcie? W taki sposób:
    Code:

    Sub UkrOdk()
    Select Case Range("A1")
      Case 1
        Rows("6:18").EntireRow.Hidden = False
        Rows("19:71").EntireRow.Hidden = True
      Case 2
        Rows("6:18").EntireRow.Hidden = True
        Rows("19:31").EntireRow.Hidden = False
        Rows("32:71").EntireRow.Hidden = True
      Case 3
        Rows("6:31").EntireRow.Hidden = True
        Rows("32:44").EntireRow.Hidden = False
        Rows("45:71").EntireRow.Hidden = True
      Case 4
        Rows("6:44").EntireRow.Hidden = True
        Rows("45:57").EntireRow.Hidden = False
        Rows("58:71").EntireRow.Hidden = True
      Case 5
        Rows("6:57").EntireRow.Hidden = True
        Rows("58:71").EntireRow.Hidden = False
      Case Else
        Rows.EntireRow.Hidden = False
    End Select
    End Sub


    Mam tych firm ok 130, nie wiem też czy w ciągu roku nie będą dochodziły nowe
  • Pomocny post
    Moderator Programowanie
    Pewnie dałoby się to "zmechanizować", ale z drugiej strony w każdym Case masz tylko max trzy linijki kodu. Ewentualnie w przykładowym Arkusz2 można dorobić sobie ściągę.

    EXCEL - makro wyszukujące kryterium i pokazujące zakres
  • Poziom 10  
    No w sumie tak, i tak zaoszczędzę dzieki temu sporo czasu.

    Dzięki wielkie.
  • Pomocny post
    Moderator Programowanie
    Jak już pisałem, można pokombinować z automatyzacją. W załączniku jeden ze sposobów.

    Edit 18:44 zmiana załącznika...
  • Poziom 10  
    Gienialnie, zaimplementowałem już u siebie w arkuszu. Kod przejrzysty i prosty.

    Wielkie dzięki, jestem pod wrażeniem.
  • Poziom 10  
    Piszę jeden post pod drugim ponieważ urodził się kłopot.
    Skrypt działa doskonale, jednak wcześniej nie dodałem że zakładek z firmami będzie 12 (Styczeń, Luty, Marzec ... itd).

    Nie za bardzo wiem jak to przenieść na kolejne zakładki. Skrypt VBA próbuję zostawić tak jak jest, na zakładce Luty jako łącze formantu daję Styczeń!$A$2 (bo tak mam zrobione w skrypcie), ale nie uzyskuję porządanego efektu :-(
  • Pomocny post
    Moderator Programowanie
    Trochę przerobiłem. Działa pod warunkami:

    1) lista firm pobierana jest z arkusza "Sty". Jeśli w innych arkuszach (miesiącach) będą różnice należy do tworzenia listy użyć makr.

    2) Arkusze muszą mieć taki sam układ (wspólne makro)

    3) Indeks (łącze komórki pola kombi) jest wspólny dla wszystkich arkuszy.
  • Poziom 10  
    Super, dzięki. Pobieranie firm już przerobiłem wcześniej, także z tym nie ma problemu. Firmy są w zakładce Lista i z tamtąd "eksportują" się na zakładki miesięcy.

    Wszystko działa aż miło. Jeszcze raz "pomocnik"