Excel jaka funkcja przypisze dane z innego pliku


(duchu) #1

Witam, przepraszam jeśli pisze w złym dziale ale pozmienialo się tu trochę a mnie dawno tu nie bylo,
Mam 2 pliki. W jednym są dane osobowe w drugim niektóre nazwiska np z numerem telefonu jak zrobić by przy danym nazwisku byl numer telefonu z 2 pliku recznie nie ma sensu 500 numerów wpisywać a nie wszystkie nazwiska za w tej bazie by skopowac całość


(krystian3w) #3

Myślę, że chodzi o dopasowanie numeru w dobrym miejscu na podstawie dłuższej listy nazwisk np. jest ich 1000 i nie pasują układem do pliku z nazwiskami i numerami (których jest przykładowo o połowę mniej).

Co do adresu to coś takiego robi Excel 2003:

=[telefony.xls]Arkusz1!$A$1

i dokładną ścieżkę ustawia sobie w łączach z opcji Edycja (zerwanie łącza też mi nie usunęło zaczerpniętych danych).


(Dimatheus) #7

Hej,

A nie lepiej użyć funkcji wyszukiwania pionowego? Robisz coś w tym stylu:
=wyszukaj.pionowo(nazwisko_w_pliku_1;tabela_z_danymi_w_pliku_2;numer_kolumny_w_której_znajduje_sie_numer_telefonu;FAŁSZ_czyli_dopasowanie_dokładne).
Oczywiście najlepiej zerknąć na to na konkretnym przykładzie. Może podwiesisz gdzieś pliki z przykładowymi danymi?

Pozdrawiam,
Dimatheus


(pocolog) #8

Przykładowe pliki to już ustaliliśmy na priv, bo nie może kolega za dużo oficjalnie pisać. Jakaś instytucja państwowa :wink: Tylko Tomek musi dodać na forum xls, czy jak się te nowe pliki z excela rozszerzają.


(Dimatheus) #9

Hej,

Ewentualnie zawsze można coś podobnego pokazać na screenach. Tak jak poniżej.

Plik pierwszy:

Plik drugi:

W pliku pierwszym formuła dla komórki B2 wygląda tak:
=WYSZUKAJ.PIONOWO(A2;[Zeszyt2.xlsx]Arkusz1!$A$2:$C$21;3;FAŁSZ),
zaś dla komórki B3 tak:
=WYSZUKAJ.PIONOWO(A3;[Zeszyt2.xlsx]Arkusz1!$A$2:$C$21;3;FAŁSZ)

Zmienia się oczywiście tylko pierwszy argument funkcji, bo wyszukujemy kolejne nazwiska. Gdy zamkniemy drugi z plików, Excel przemieni formułę na adresowanie bezwzględne do lokalizacji pliku i otrzymamy dla B2 taką formułę:
=WYSZUKAJ.PIONOWO(A2;'C:\Users\Dimatheus\Desktop\[Zeszyt2.xlsx]Arkusz1'!$A$2:$C$21;3;FAŁSZ)

Pozdrawiam,
Dimatheus


(krystian3w) #10

najnowsze 2007 - 2016 *.xlsx (chyba, że to w pliku szablonu (*.xltm / *.xltx), binarny (*.xlsb) lub pliku z aktywnymi makrami (*.xlsm))

https://support.office.com/pl-pl/article/formaty-plików-obsługiwane-w-programie-excel-0943ff2c-6014-4e8d-aaea-b83d51d46247

Chyba prościej do zipa skompresować.


(Dimatheus) #11

Hej,

Ewentualnie podwiesić na zewnętrznym serwerze. :slight_smile:

Najważniejsze to chyba xls, xlsx oraz xlsm - z binarnych raczej mało kto korzysta.

Pozdrawiam,
Dimatheus


(krystian3w) #12

@duchu wrzucił demo na priv i wyszło mi takie coś z użyciem wyszukaj.pionowo / VLOOKUP:

=WYSZUKAJ.PIONOWO(C2;[baza stara.xls]Zeszyt1!.$C$2:$Y$9999;23;0)

[baza stara.xls]Zeszyt1!.$C$2:$Y$9999” - zaznaczenie fragmentu na starej bazie z zablokowaniem zmiany obszaru $.

Tylko nie wiem jak uratować te dwa ręcznie wpisane numery (kolumną poboczną / makrem). Chyba wystarczająco zadziała aktywne inteligentne sortowanie i ustawienie go na widoczność pustych pół.


Na początku próbowałem ogarnąć jak to działa i dlaczego Calc głupieje i wszędzie zgłaszał błąd.


(Dimatheus) #13

Hej,

  • Ale ostatecznie wszystko działa poprawnie?
  • W kolumnie C starej bazy znajdują się nazwiska?

Pozdrawiam,
Dimatheus


(krystian3w) #14

W kolumnie C są pesele (obu); po 5 i 3 rekordach trudno określić czy w bazie są osoby bez niego i mają w miarę unikalne nazwisko (wolałem nie sprawdzać co się dzieje jak jest dziesięciu Kowalskich i każdy z innym numerem i może dwóch z takim samym imieniem, wtedy pewnie pomógł by zakres zamiast konkretnej komórki do momentu aż obie się nie powtórzą).

I ogólnie wygląda, że działa.


(duchu) #15

Witam,
Nie wiem coś robię nie tak bo mi nie działa wrzucam pliki może ktoś mi zrobi a jak do docelowego pliku wsadzę czarna magia dla mnie ta funkca

Przesyłam ci linki do plików
baza docelowa http://uploadfile.pl/pokaz/1408042---1mox.html
baza stara http://uploadfile.pl/pokaz/1408043---kla2.html

Jeszcze jedną sprawę mam jak już zawracam wam głowę :wink: starałem się funkcję datę zrobić
przykład
w dniu 12.01.2010 było szkolenie które jest ważne 10 lat czyli żeby obok w kolumnie z automatu wyliczyło mi że ma być 12.01.2010 czytałem coś że trzeba miesiące dodawać nie wiem łatwiej było mi wpisywać recznie bo tylko parę takich sytuacji miałem ale tak na przyszłość może mi się przyda
z góry dziękuję za fatygę


(Dimatheus) #16

Hej,

Do pliku dodałem odpowiednie formuły. Załączam poniżej w spakowanym archiwum.
Pliki.zip (10,0 KB)

Generalnie można w formule dodać jeszcze jeden warunek, żeby w przypadku, gdy nie uda się znaleźć odpowiednich danych pojawiał się komunikat, że dane nie zostały znalezione. Wtedy zamiast takiej formuły:
=WYSZUKAJ.PIONOWO(C2;'[stara baza.xls]Sheet1'!$C$2:$Z$13;23;FAŁSZ)
będzie taka:
=JEŻELI.BŁĄD(WYSZUKAJ.PIONOWO(C2;'[stara baza.xls]Sheet1'!$C$2:$Z$13;23;FAŁSZ);"Brak danych w bazie")

Tutaj w sumie można łatwo dodać 10 lat korzystając z formuły DATA, wyglądać ona będzie tak (przy założeniu, że data wykonania badań jest w kolumnie X, a długość ważności badań definiujemy wartością lat w komórce AC2):
=DATA(ROK(X2)+$AC$2;MIESIĄC(X2);DZIEŃ(X2))

Aczkolwiek pomyślałem, że w sytuacji, gdy badania będą wykonane w dniu 29 lutego (na przykład w dniu 2012-02-29), to dodanie 10 lat spowoduje, że pojawi się data ważności 2022-03-01. Da się to ominąć, stosując dodatkowe formuły zabezpieczające, która po wykryciu, że mamy datę 29 lutego i ustawioną ilość lat na wielokrotność 4, zmodyfikują formułę tak, by pojawiła się data 29 lutego, a w przypadku ilości lat nie będących wielokrotnością 4, wskaże datę 28 lutego. Wtedy będzie to wyglądać mniej więcej tak:
=JEŻELI(ORAZ(DZIEŃ(X2)=29;MIESIĄC(X2)=2;MOD($AC$2;4)=0);DATA(ROK(X2)+$AC$2;MIESIĄC(X2);DZIEŃ(X2));JEŻELI(ORAZ(DZIEŃ(X2)=29;MIESIĄC(X2)=2;MOD($AC$2;4)<>0);DATA(ROK(X2)+$AC$2;MIESIĄC(X2);DZIEŃ(X2)-1);DATA(ROK(X2)+$AC$2;MIESIĄC(X2);DZIEŃ(X2))))

W pliku bazy w komórkach zaznaczonych na żółto znajduje się taka zmodyfikowana formuła, w dwóch niższych komórkach formuła bez zabezpieczeń związanych z rokiem przestępnym.

Mam nadzieję, że jest to w miarę jasne.

Pozdrawiam,
Dimatheus


(duchu) #17

Dziękuję bardzo o to chodziło :wink: teraz i ja zrozumiałem funkcję wyszukaj pionowo :wink:

Dziękuję bardzo za pomoc.
hmmm muszę jakiś kurs zrobić sobie z funkcji fajne są i przydatne a człowiek nie wie nawet że automat może za niego to zrobić a nie męczy się.

Jak tak szalejemy to jeszcze jedna do głowy rzecz mi przychodzi jak zrobić by w nowej bazie w zakładce jakiejś nowej np termin ważności badań wyświetłały mi się osoby w którym np za 6 miesięcy kończą się badania i była możliwość że jak przejdzie badania i wpiszę dane w tej zakładce co wyświetla się by dane synchronizowały się z bazą główną i znikał automatycznie z tej listy

ale to już nadprogramowe ;p
choć ciekawe było by to


(Dimatheus) #18

Hej,

Tutaj już musielibyśmy zastosować VBA i napisać makro, które robiłoby takie zestawienie. Jeśli chodzi o same funkcje Excela, to można posiłkować się na przykład filtrowaniem danych oraz formatowaniem warunkowym. Dodaję formułę do formatowania warunkowego o treści:
=AA2-DZIŚ()<30
i na czerwono podświetlają się wszystkie badania, których termin kończy się poniżej 30 dni od bieżącej daty. :slight_smile:

Zmieniony plik w załączniku.
baza docelowa.zip (5,6 KB)

Pozdrawiam,
Dimatheus


(duchu) #19

Dziękuję za pomoc znalazłem parę błędów pracując na docelowej bazie

  1. jak korzystam z funkcji wyszukaj pionowo (w pliku w 1 arkuszu aktualna baza dane pobierane z 2 arkusza ) jak usuwam ten już niepotrzebny arkusz to tracę wszystkie dane w nowej bazie…

(krystian3w) #20

Trzeba wtedy zrobić najlepiej kopię i wypróbować opcje:

Edycja > Łącza

Jak się nic magicznego nie stanie to skopiuje dane i przekształci je z formuł na tekstowe / liczbowe.

Albo gdzieś indziej poszukać opcji przekształcenia ich.


(duchu) #21

hmmm

nie mam połączenia i nie ma co rozłączyć a te przekształcenie rozsypuje dane …


(krystian3w) #22

(duchu) #23

co bym bez was zrobił :wink:


(Dimatheus) #24

Hej,

Można też posłużyć się kopiowaniem - zaznaczasz zakres z danymi zaciągniętymi przez funkcje, kopiujesz je używając Ctrl+C, następnie wklejasz specjalnie wybierając opcję Wartości.

image

Ewentualnie zerwanie łącz. Zakładka Dane i przycisk Edytuj linki. W wyświetlonym oknie wybierasz opcję Przerwij link i formuły przerabiają się na wartości. :slight_smile:

image

Pozdrawiam,
Dimatheus