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

Import pliku txt pobieranie danych wg kryterium

oreczka12 01 Gru 2012 15:42 1953 7
  • #1 01 Gru 2012 15:42
    oreczka12
    Poziom 9  

    Witam
    mam w załączeniu makro które importuje plik txt do Excela, muszę jednak ograniczyć import tylko do wybranych kolumn, tzn jeżeli wybiorę datę( zawsze to bedzie ostatni dzień miesiąca) 30.09.2012 to powinny kopiować się wszystkie kolumny do września, wiem że można wyciągnąć nr miesiąca z tej daty ale jak to zapisać w pętli aby makro wiedziało jakie kolumny zaimportować.
    W załączeniu plik txt i excel.
    Z góry dziękuję za pomoc

    0 7
  • #2 01 Gru 2012 17:10
    marcinj12
    Poziom 40  

    Rozumiem, że linia rozdzielająca linię na tablicę powinna wyglądać tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod
    W plik kutóry załączyłeś dane nie są rozdzielone przecinkiem, tylko spacją...

    Musisz coś więcej o tym pliku tekstowym napisać - czy każda "linia danych" składa się się z dwóch wierszy: nagłówek i dane, czy nagłówek jest jeden, a dane są powtórzone?

    Samo ustalanie zakresu jest proste - jeżeli miesiące są kolejno ułożone, a z przodu masz dwie kolumny, to wyciągasz z daty miesiąc funkcją
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , a z tablicy kalmar wyciągasz elementy od 0 do numer miesiąca + 1

    0
  • #3 01 Gru 2012 17:33
    oreczka12
    Poziom 9  

    plik txt ma tylko jeden nagłówek w jednym wierszu, a w pozostałych wierszach znajdują się dane.
    A co w tedy kiedy będą np podsumowania po każdym kwartale jak jednocześnie je usunąć?
    W załączeniu poprawiony plik txt

    0
  • #5 01 Gru 2012 18:37
    marcinj12
    Poziom 40  

    oreczka12 napisał:
    W załączeniu poprawiony kod ale nie działa mi mam problem z zapisaniem procedury w pętli for
    Bo w tym przykładzie masz
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    , gdzie i zaczyna się od 0, podczas gdy kolumny dla Cells numeruje się od 1. Wystarczy zrobić i+1 w cellsie.

    Jeżeli w pliku będą podsumowania - to zależy, czy będą na pewno w każdym pliku, czy tylko mogą, ale nie muszą być, czy będą po każdym kwartale czy tylko po minionych... Z pliku który załączyłaś to nie wynika.
    Dla każdego przypadku może być inne rozwiązanie - generalnie warunek if sprawdzający, czy data komórka w tablicy powinna być zapisana do pliku czy nie.

    Jeżeli pomiędzy importowanymi komórkami mogą być "dziury" - niektóre komórki nie będą importowana - to wtedy konieczna będzie dodatkowa zmienna z numerem kolumny, do której będziesz tekst wstawiać. Taką zmienną wyzerujesz na początku pętli dla nowej linii, a potem zwiększasz tylko wtedy, kiedy warunek if sprawdzający czy importować komórkę czy nie będzie spełniony.

    0
  • #6 01 Gru 2012 19:24
    oreczka12
    Poziom 9  

    Poprawiłam już i działa kod, ale jak napisać warunek sprawdzający. Plik txt zawsze jest taki sam, zawsze pojawiają się te same kolumny ewentualnie w niektórych miesiącach będzie 0 ale mi chodzi o to aby importować plik tylko do miesiąca który obecnie mamy, niepotrzebne są te zera i tak samo nie potrzebne są podsumowania. Jak zapisać sprawdzenie w takich przypadkach?

    Dodano po 2 [minuty]:

    W załączeniu poprawiony kod bez tego sprawdzenia i usuwania zbędnych kolumn

    0
  • #7 01 Gru 2012 20:28
    marcinj12
    Poziom 40  

    oreczka12 napisał:
    Jak zapisać sprawdzenie w takich przypadkach?
    Trzeba ruszyć głową i trochę pokombinować...
    Skoro masz tablicę z danymi, a w pliku jest co kwartał jest kolumna z podsumowaniem, to co kwartał należy tą kolumnę "przeskoczyć". Będzie ona na stałej pozycji więc, jak już pisałem, można ją pominąć w warunku if...
    W podobny sposób można ustalić, dokąd którego indeksu - zależnego od numeru miesiąca - należy tablice odczytać.
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Z całego kodu jedynie funkcja Fix może wymagać wyjaśnień - obcina ona część ułamkową z liczby z przecinkiem. Reszta to zwykłe "kombinowanie".

    0
  • #8 01 Gru 2012 21:13
    oreczka12
    Poziom 9  

    Dziękuję za pomoc

    0