Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - Kopiowanie sekwencji wierszy z pliku txt i wyszukiwanie z kolumn

Martini82 11 Lut 2015 18:04 756 4
  • #1 11 Lut 2015 18:04
    Martini82
    Poziom 8  

    Cześć,

    nadal próbuję sił w VBA. Idzie jak krew z nosa.

    Tym razem potrzebuję odczytać wartość komórki lub sekwencji z ciągu znaków,
    która zaczyna się na konkretną cyfrę (znak) "7".

    Dla rozjaśnienia.

    Mam zestaw danych w pliku kod.txt, który zawiera zestawy:
    - złożone z kilku wierszy (ilość zmienna, raz są trzy raz więcej)
    - poszczególne grupy zawsze zaczynające się ciągiem pięciocyfrowym 11xxx,
    - każda grupa zawiera wiersz rozpoczynający się od "333" czy raczej " 333".

    W obrębie wiersza rozpoczynającego sie od " 333" występują 5cyfrowe ciągi znaków, a wśród nich ten, którego szukam czyli "7xxxx".

    Szukam sposobu, aby w dowolnej komórce dowolnego arkusza otrzymać ten 5cyfrowy ciąg znaków czyli np. w komórce "A1" arkusza "Wynik" znalazł się 7xxxx.
    (te x się zmieniają), pochodzący z wskazanego "11xxx".
    Dla przykładu w załączniku, potrzebuję znaleźć dla 11406, w wierszu z 333 ciąg 70005.

    Obecnie utknąłem na wybraniu danych pobranych i skopiowanych do jednego arkusza z pliku txt.
    Zamysł jest taki:
    - do kolumny A skopiować wszystkie rekordy, które rozpoczynają się od cyfr "11",
    - w kolumnie B wyodrębnić z całego ciągu tylko 5 cyfr otrzymując zestaw "11xxx",
    - do kolumny C skopiować wszystkie rekordy, które rozpoczynają się od cyfr "333",
    - "rozłożyć" ciągi wiersza "333" porozdzielane spacją do osobnych kolejnych po C kolumn,

    powstanie tabela, gdzie każda grupa 333 będzie zestawiona z 11xxx, z ktorego pochodzi,

    - dalej należy wśród kolumn odszukać zestaw 7xxxx i skopiować.

    Zależy mi na tym wyszukaniu, bo ilość tych zestawów w ramach wiersza "333" ulega zmianie, więc nie mogę ufać funkcji wyszukaj.pionowo ze wskazaniem konkretnej kolumny.

    Mam nadzieję, że w miarę jasno przedstawiłem problem.
    Na razie mam taki kod (niestety w trzech makrach):

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Proszę o podpowiedź.

  • Pomocny post
    #2 11 Lut 2015 19:36
    marek_s1
    Poziom 13  

    Witam,

    Dobrze zacząłeś z tym wczytywaniem pliku, trzeba było to kontynuować.

    Proponuję wyszukiwanie załatwić kodem, np:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    W wyniku dostaniesz listę w komórkach A1 i dalszych, w postaci (przykładowe wiersze):

    11406;70005
    11414;79999
    11423;70001
    11643;70000
    11652;70000
    11653;7////


    Kod można uzupełnić od dokładne sprawdzanie wyszukanych ciągów albo czy w linii nie ma ich więcej.

    Warunek If Right(t, 1) = ";" sprawdza czy w grupie znaleziono linię 333. Jeśli nie to po średniku będzie pusty ciąg.

  • #3 12 Lut 2015 16:20
    Martini82
    Poziom 8  

    marek_s1 fajnie to chodzi,
    i jest dużo prościej, będę próbował w ten deseń.

    a jeżeli chciałbym dodać jeszcze grupę 4xxxx?

    Jak zamieniam zamiast 7 wychodzą głupoty

    Jest jeszcze problem, że czasem dla danej grupy 1xxxx nie ma wierszy 333 i 555
    jest jakby pusty, co wówczas?

  • Pomocny post
    #4 12 Lut 2015 18:54
    marek_s1
    Poziom 13  

    Zamień w odpowiednim miejscu kod na poniższy:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Wynikiem jest:

    11406;42005;70005
    11414;42005;79999
    11423;44013;70001
    11433;;70000
    11438;;79999
    11433;

    Jeżeli w grupie 11*** nie ma podgrupy 333 to zwracane jest tylko oznaczenie grupy

  • #5 18 Lut 2015 13:01
    Martini82
    Poziom 8  

    Super!!!

    Bardzo dziękuję, działa znakomicie, przez chwilę wydawało mi się, że będzie to skomplikowane.

    Gdyby kogoś w przyszłość interesował cały kod to proszę:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Wynik daje trzy kolumny: 11xxx;4xxxx;7xxxx

    jeżeli danej grupy nie ma w pliku źródłowym np. 4xxxx wynik: 11xxx;;7xxxx

    a jeżeli brak jest wszystkich grup: 1xxxx;;

    O to właśnie chodziło. Chylę czoła, a Temat uważam za zakończony.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME