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.

Pobieranie danych z innego pliku .xls do roznych Arkuszy

redxxx 01 Paź 2012 17:48 4608 5
  • #1 01 Paź 2012 17:48
    redxxx
    Poziom 9  

    Witam, jako, że nie zajmuje sie zawodowo programowaniem potrzebuję rady
    otóż Mam 2 pliki excelowe, Pierwszy miesiące.xls i drugi: miasta.xls

    - Plik miesiace.xls jest podzielony na Arkusze[ styczeń, luty, marzec...grudzień ] i jest w nich duzo

    danych i tabel.

    - Plik miasta.xls jest podzielony na Arkusze [ Lodz, Warszawa, Gdansk, Bialystok ] i sa w nich szablony z miejscami na dane, ktore chcialbym zaciągać z poszegolnych miesięcy.

    Dąże do tego aby była mozliwość zaciagniecia danych do poszczegolnych miast z komórek z danego miesiaca

    np:

    Potrzebuje komórek A30. S11, B16, c4 z Arkusza Sierpień do Arkusza Warszawa.
    Potrzebuje komórek A31. S12, B17, c5 z Arkusza Wrzesień do Arkusza Gdańsk.
    Potrzebuje komórek A77. S55, B30, c10 z Arkusza Wrzesień do Arkusza Białystok.

    Przy czym komórki w poszczegolnych miesiacach są na stałych miejscach. tzn.
    Te same komórki bedą uwzględniane z Lipca/ Sierpnia/ Wrzesnia/ itd, dla danego miasta.


    Moglbym zmodyfikowac każde potrzebne pole zastępując funkcja ='[miesiące.xls]luty'!$a$20, lecz mam nadzieję, że jest prostsza droga.:/

    0 5
  • #2 01 Paź 2012 18:46
    Spooner
    Poziom 16  

    Super izi.

    Mając dwa arkusze włączone, klikasz na komórkę która ma się wypełnić danymi, wpisujesz = potem klikasz na komórkę z której mają się dane pobrać. Jak się zaznaczy "chodzącymi mrówkami" to walisz ENTER.

    $ blokujesz wiersz albo kolumnę.
    Następnie przeciągasz zakres

    0
  • #3 01 Paź 2012 20:35
    redxxx
    Poziom 9  

    Fajnie, jakby to dotyczyło paru komórek, a jest ich bardzo dużo. Może trochę źle przedstawiłem sytuację...

    Chodzi mi oto iż w miasta.xls sa szablony z nazwami miejscowosci do którego w danym miesiącu maja być pobrane dane z Arkusza z aktualnym miesiącem.

    np: Jest Lipiec-->pobieram dane do Arkusza Warszawa--(Z pliku miesiące.xls Arkusz: Lipiec) komórki A30. S11, B16, C4, które są wstawiane w różne miejsca na arkuszu.

    Jest Wrzesień-->Pobieram dane do Arkusza Gdańsk-->(Z pliku miesiące.xls Arkusz: Wrzesień)komórki A35. S15, B11, C10

    I z każdym miesiącem jest tworzony raport i dopisywany kolejny arkusz( miesiąc ), dla którego już nie będzie obowiązywać ta funkcja.

    Dodano po 17 [minuty]:

    Adresy komórek danych do pobrania w różnych miesiącach są na tych samych pozycjach, może wiec jakaś funkcja w której co miesiąc bym zmieniał Arkusz z którego ma kopiować dane by zalatwiła sprawe ?

    0
  • Pomocny post
    #4 02 Paź 2012 19:18
    Spooner
    Poziom 16  

    Myślę, że rozwiązanie jest łatwiejsze niż myślę.
    Zacząłem się głowić nad jakimiś makrami a wystarczy Ctrl+H

    Skopiuj arkusz, który cię interesuje, potem Ctrl+H
    W polu szukaj wpisz nazwę arkusza, która ma być zamieniona, a w zamień na wpisujesz nazwę nowego arkusza.

    Zamieni ci wszystkie we formułach, sprawdzałem przed chwilą na Excelu 2007, działa.

    0
  • #5 13 Paź 2012 13:11
    redxxx
    Poziom 9  

    Ok. Rzeczywiscie jest to dobre rozwiązanie,. Postanowiłem jednak pogłowić się nad makrem, bo arkuszy jest sporo.

    Code:
    Sub xxx()
    
    '
    ' xxx Makro
    '

    '
        Range("I63").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C42"
        Range("I70").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C20"
        Range("I77").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C8"
        Range("I78").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C9"
        Range("I79").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C10"
        Range("I85").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C15"
        Range("I111").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C42"
        Range("I112").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C43"
        Range("I119").Select
        ActiveCell.FormulaR1C1 = _
    "=IF('[2012 rozliczenia.xls]Wrzesień'!R30C11+'[2012 rozliczenia.xls]Wrzesień'!R30C12+'[2012 rozliczenia.xls]Wrzesień'!R30C13+'[2012 rozliczenia.xls]Wrzesień'!R30C14<4,0,1)"
        Range("I132").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C16"
        Range("I133").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R30C17"
        Range("I140").Select
        ActiveCell.FormulaR1C1 = _
            "=IF('[2012 rozliczenia.xls]Wrzesień'!R30C7<0,0,'[2012 rozliczenia.xls]Wrzesień'!R30C7)"
       


    Także.. makro wstawia formuły kopiuje wartości do Arkusza (Szczecin).

    Chodzi mi oto aby dalej, zmieniało Arkusz na kolejny ( Koszalin ) i kopiowało wartości z kolejnego wiersza +1( lub jak tutaj poprzedniego -1)

    Code:
    Sheets("RN_Koszalin").Select
    
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R29C42"
       Range("I70").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R29C20"
        Range("I77").Select
        ActiveCell.FormulaR1C1 = "='[2012 rozliczenia.xls]Wrzesień'!R29C8"
       ....

    itd.. j/w

    (Kolejność arkuszy, tak aby były ustawione w podobnej kolejnosci jak wiersze z drugiego pliku mam zamiar ustawić później)

    Można napisać obszerne makro, które będzie sie uruchamiało z pół godziny, lecz zastanawiam sie czy jest może prostszy sposób ? Może jakiś licznik który dodaje do Wiersza +1 ( lub -1 )

    0
  • Pomocny post
    #6 13 Paź 2012 14:10
    marcinj12
    Poziom 40  

    Skoro próbuje Kolega coś sam pokombinować, to trochę pomogę... ;)
    Nie wiem na ile dobrze zrozumiałem całą ideę, więc będziesz musiał trochę dostosować kod do swoich potrzeb.

    Zacznijmy od tego, żeby umieścić kod makra wewnątrz takiego fragmentu kodu (fragment dla makra umieszczonego w zdarzeniu kliknięcia przycisku):

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Dzięki temu na czas wykonywania makra wyłącza się odświeżanie ekranu i przeliczanie formuł, co znacznie skraca czas jego wykonywania. Jednocześnie przy wystąpieniu błędu włączą się one z powrotem. :)

    Teraz "kod właściwy" - jak mógłby od wyglądać?
    Chcesz "przelecieć" wszystkie arkusze z miastami - do tego możesz użyć pętli:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jako że dla każdego arkusza chcesz wstawić jakąś funkcję w te same pola - choć jak widzę w różne komórki - robisz to wewnątrz tej pętli, np. pisząc
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jak widać, możesz tworzyć formuły za pomocą znaczka & doklejając zmieniający się fragment. Pamiętaj, żeby podać pełną ścieżkę dostępu do pliku - w przeciwnym wypadku funkcje będą działać tylko przy otwartym arkuszu z miesiącami.

    Samą zmienną z nazwą miesiąca możesz albo samemu zmieniać w kodzie, albo wpisać ją z palca np. w okienku InputBox przy uruchomieniu makra, albo uzależnić ją od nazwy bieżącego / poprzedniego miesiąca za pomocą funkcji.

    0