Czyli ADR.POŚR między plikami
Podobny temat już na blogu poruszałam (zobacz tutaj), natomiast dotyczył on pobierania danych tylko z innych arkuszy. Było tam dodatkowe utrudnienie, dotyczące kolejności kolumn, natomiast dane konsolidowane były z tego samego pliku. Dzisiaj sytuacja będzie nieco inna: będziemy pobierali dane z innego pliku, z różnych jego arkuszy. Też posłużymy się funkcją ADR.POŚR, jednak do formuły „jakoś” dorzucimy nazwę pliku.
Zaczynamy!
Formatka
Mamy 2 pliki:
- z danymi źródłowymi
- podsumowujący
W pliku z danymi źródłowymi mamy 31 arkuszy, ponumerowanych od 1 do 31. W każdym z nich znajduje się identyczna co do układu tabelka z danymi, które chcemy podsumować w drugim pliku. Dane dotyczą np. liczby pracowników na zmianie dziennej i nocnej w pięciu lokalizacjach: Koło, Września, Luboń. Mosina i Swarzędz.
Tak wyglądają arkusze z danymi źródłowymi (każdy ma identyczny układ, jednak inne dane do pobrania):
A w takiej tabelce będziemy konsolidować dane:
Formuła
Zaczniemy od wpisania sobie nazwy pliku do żółtej komórki E1, którą nazwiemy Plik (o nazywaniu komórek pisałam min. tutaj).
Teraz sama formuła. Wbrew pozorom nie będzie ona jakoś strasznie skomplikowana. Żeby sobie ułatwić życie, w komórce C4, czyli tej, w której będę pisała uniwersalną formułę, wskażę wartość, któa ma się w niej znaleźć, czyli wartość z komórki C4 w arkuszu 1 pliku Dane.xlsx. Dostanę więc taką formułę:
='[Dane.xlsx]1'!$C$4
Zrobiłam to po to, bo nigdy nie pamiętam składni odwołania się do innego pliku. Mieszają mi się apostrofy i nawiasy kwadratowe ;). Będę więc edytowała wstawioną formułę, a zacznę od tego, że wstawię ją w funkcję ADR.POŚR i sparametryzuję nazwę pliku. Czyli tak:
=ADR.POŚR("'["&Plik&"]1'!$C$4")
Połowa sukcesu za nami. Poważnie.
Teraz trzeba tylko sparametryzować adres komórki. Zacznę od najłatwiejszego, czyli numeru wiersza. Zauważmy, że dane pobieramy zawsze tylko z 4 lub 5 wiersza arkusza. Reguła też jest taka, że zawsze dane dotyczące dnia są w wierszu 4., a nocy w 5. Ten numer załatwimy więc prostym JEŻELI, które również dokleimy, ponieważ funkcja ADR.POŚR chce od nas tekst:
=ADR.POŚR("'["&Plik&"]1'!$C$"&JEŻELI($B4="Dzień";4;5))
Komórkę $B4 zablokowałam przed kolumną B, ponieważ tę funkcję docelowo będę kopiowała, a chcę, żeby wtedy kolumna została taka sama, czyli cały czas B.
OK. Teraz gorsza sprawa: kolumna. W zależności od lokalizacji ta kolumna będzie inna. W sumie najprostszym rozwiązaniem byłoby napisanie 5 formuł, dla każdej lokalizacji oddzielnie. I w sumie to jest bardzo dobre rozwiązanie. Ale post byłby trochę krótki, więc pokażę Wam jak to zrobić w jednej formule :). Do tego celu przyjmę pewne założenie: kolumny lokalizacji są wszędzie takie same: zarówno w pliku podsumowującym jak i w plikach źródłowych (sama tworzę ten plik, więc mogę tak pójść na łatwiznę ).
Jeśli tak, to np. Koło zawsze będzie w kolumnie C, czyli trzeciej, itd. Ponieważ literkowe kolumny (A,B,C) kiepsko się zwiększa, więc posłużę się ich numerami. Żeby jednak to zrobić, posłużę się funkcją NR.KOLUMNY i dodatkowo powiem funkcji ADR.POŚR, żeby stosowała odwołanie W1K1, zamiast A1. Będzie trochę jak czarna magia, ale w tym typie odwołania podajemy numeryczne odwołanie zarówno do wiersza, jak i kolumny. Czyli komórka W1K1 to nic innego jak komórka w pierwszym wierszu i w pierwszej kolumnie arkusza, czyli A1. Komórka W4K3 to C4 itd. Żeby funkcja ADR.POŚR to zastosowała, w drugim jej argumencie powinniśmy wpisać 0 (lub FAŁSZ). No i oczywiście uwzględnić literki W i K, które są obowiązkowym elementem tego typu odwołań.
Wszystko do kupy wygląda tak:
=ADR.POŚR("'["&Plik&"]1'!W"&JEŻELI($B4="Dzień";4;5)&"K"&NR.KOLUMNY(C3);0)
Funkcja NR.KOLUMNY dostała od nas argument komórki wyżej (najważniejsze, że ta komórka jest w tej samej kolumnie, z której chcemy pobrać numer), z której pobiera numer kolumny. Dla porządku można byłoby ją zablokować tak: C$3, jednak nie jest to konieczne. Jak chcecie.
I jeszcze jedna istotna sprawa: trzeba pobierać wartości z określonych arkuszy. Aby to zrobić odwołamy się do wartości w kolumnie A, czyli:
Najważniejsze jest to, że po skopiowaniu tej formuły wszystko ładnie pięknie działa :). Zobaczcie przykładowe wartości:
I tyle. Takie to proste, a ja mam nadzieję, że Ci pomogłam i że to rozwiązanie Ci się przyda!
A poniżej plik (tylko skonsolidowany) do pobrania. Pamiętaj o pliku z danymi!
MalinowyExcel Konsolidacja danych z wielu arkuszy innego pliku ADR.POŚR dw.xlsx
I film, w którym krok po kroku pokazuję rozwiązanie: