Pobieranie danych z jednej tabeli i wyświetlanie ich w drugi

Użytkowanie arkusza kalkulacyjnego
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Pobieranie danych z jednej tabeli i wyświetlanie ich w drugi

Post autor: koneser69 »

W załączniku przesyłam plik. Zawiera on dwa arkusze. W arkuszu1 jest poniższa tabela z danymi:
______ A B C A D B B
Nazwa1 1 4 7 5 10 8 2
Nazwa2 2 5 8 6 11 9 3
Nazwa3 3 6 9 7 12 1 4

Jak zrobić aby jak wpiszę w arkuszu2 np Nazwa1 to z automatu pobiorą się posortowane wartości z kolumny o nazwie A oraz C oczywiście z wiersza Nazwa1?
Czyli dla Nazwa1 ma pobrać A i C a więc: 1, 5, 7
Załączniki
test1.ods
(9.02 KiB) Pobrany 186 razy
OpenOffice 4.1.2 Windows 7
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: Rafkus »

Troszkę skomplikowany temat, więc mogę mieć problemy z wyjaśnieniem...
Potrzebujesz mieć zwrócone wybrane wartości z niektórych kolumn. Uzyskałem to przy pomocy formuły macierzowej (zatwierdzona przez jednoczesne wciśnięcie klawiszy CTRL+SHIFT+ENTER):

Kod: Zaznacz cały

=MIN.K( JEŻELI( ($B$1:$H$1="A")+($B$1:$H$1="C");  INDEKS(Zakres;  PODAJ.POZYCJĘ(Nazwa;   $A$1:$A$4;   0));  "");   KOLUMNA(A1))  
Jak to działa:
Funkcja PODAJ.POZYCJĘ zgodnie z nazwą podaje na której pozycji znajduje się poszukiwana nazwa. Nazwa to tak naprawdę komórka do której wpisujesz swój wybór.
Funkcja INDEKS ze wszystkich danych dostarczy tylko jeden wiersz danych z całego Zakresu (twój Zakres to $B$1:$H$4) wskazany przez funkcję PODAJ.POZYCJĘ
Funkcja JEŻELI wykluczy dane, które nie będą zgodne z warunkiem: ($B$1:$H$1="A")+($B$1:$H$1="C") czyli będą wybrane wartości z kolumn A i C w innych kolumnach wartość zostanie zastąpiona tekstem "" (tekst o długości 0 znaków)
Funkcja MIN.K zwraca najmniejszą n-wartość określaną przez KOLUMNA(A1).

W załączniku zastosowane rozwiązanie
Ostatnio zmieniony śr sty 06, 2021 4:57 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód: Usunięcie pliku, poniżej zamieszczono nową wersję
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: koneser69 »

thx działa. Mam jeszcze pytanie dlaczego jak w Arkusz1 dodam nową kolumnę za pomocą "Wstaw kolumnę" tak, że obecna kolumna A przesunęła się na do kolumny B to formuła przestaje działać?

Czy można te dane pobrać z innego arkusza?

Kod: Zaznacz cały

Arkusz1.$C$1:Arkusz1.$I$1="A")+(Arkusz1.$C$1:Arkusz1.$I$1="C")
Chodzi mi o wartość A i C. W załączonym pliku dodałem Arkusz3 i tam chciałbym wpisywać wartości jakie mają zostać uwzględnione.


Czy jeżeli w nowo dodanej kolumnie A dodam kolejny parametr dla wartości NazwaX to czy można jakoś pobierać dane z automatu dla NazwaX parametr1 i NazwaX parametr2
Załączniki
test1_3.ods
(9.49 KiB) Pobrany 156 razy
OpenOffice 4.1.2 Windows 7
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: Rafkus »

dlaczego jak w Arkusz1 dodam nową kolumnę za pomocą "Wstaw kolumnę" tak, że obecna kolumna A przesunęła się na do kolumny B to formuła przestaje działać?
"Przestaje działać" bo zmieniają się dane formuły. W skrócie oryginalna formuła wygląda tak:

Kod: Zaznacz cały

=MIN.K(  Dane;   KOLUMNA(A1)) 
Wstawiając nową kolumnę A Formuły tworzące Dane zmieniają się poprawnie - to nie one powodują błąd.
Problem tworzy polecenie KOLUMNA(A1) - zwraca którą wartość z danych ma zwrócić, w tej chwili wynikiem tef formuły jest 1 zatem cała formuła ma zwrócić pierwszą najmniejszą wartość z Danych.
Po dodaniu nowej kolumny A to polecenie ulega zmianie na KOLUMNA(B1) - i w tej chwili wynikiem tego polecenia jest 2, zatem cała formuła ma zwrócić drugą najmniejszą wartość z Danych.
Czy można te dane pobrać z innego arkusza?
Tak:

Kod: Zaznacz cały

($C$1:$I$1=$Arkusz3.$A$2)+($C$1:$I$1=$Arkusz3.$A$3)
----------------------------------------------------
Edytowane:
Po zastanowieniu proponuję zmienić warunek na:

Kod: Zaznacz cały

LICZ.JEŻELI(Arkusz3.$A$2:$A$5;   $C$1:$I$1)
myślę, że jest prostszy do wpisania...
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: Rafkus »

Czy jeżeli w nowo dodanej kolumnie A dodam kolejny parametr dla wartości NazwaX to czy można jakoś pobierać dane z automatu dla NazwaX parametr1 i NazwaX parametr2
proponuję dodać jeszcze jeszcze jedną kolumnę i połączyć w niej parametr & NazwaX i podobnie taką połączoną frazę wyszukiwać w funkcji PODAJ.POZYCJĘ:

Kod: Zaznacz cały

=MIN.K(JEŻELI(LICZ.JEŻELI(Arkusz3.$A$2:$A$5;  $D$2:$J$2);   INDEKS($D$3:$J$9;   PODAJ.POZYCJĘ($D$14 & $C$14;  $B$3:$B$9;  0));   "");   D$1)
W załączniku prezentowane rozwiązanie.
Załączniki
test1_4.ods
(12.5 KiB) Pobrany 151 razy
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: koneser69 »

thx za odpowiedzi. W załączniku przesyłam plik. Dodałem do niego możliwość exportu wybranego zakresu wydruku do pdf. W tym celu należy pozwolić na wykonanie makra i uruchomić makro export_to_pdf.

Przygotowałem również w kolumnie B12 pole w którym chciałbym wpisywać kolejne wartości 1,2,3 itd. I tak dla jedynki pobiera mi Nazwa1 po czym dane się zmieniają następnie exportuje je do pdf, no i tak muszę powtórzyć tą czynność dla każdej pozycji.

Czy można ten mechanizm jakoś zautomatyzować? Tak aby z automatu wpisywały się kolejne wartości po czym wykonywał export do pdfa?
Załączniki
test1_5.ods
(12.9 KiB) Pobrany 166 razy
OpenOffice 4.1.2 Windows 7
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: Rafkus »

Dziś tak na szybko, aby zautomatyzować to musiałbyś do swojego makra dodać pętlę, np taką:

Kod: Zaznacz cały

Sub pentla
  Dim oSheets As Variant
  Dim oObj1 As Variant
  Dim pierwszy, ostatni, i As integer

  oSheets = ThisComponent.getSheets()
  oObj1 = oSheets.getByName("Arkusz1")
  
  pierwszy = oObj1.getCellRangeByName("B12").Value	'od którego wiersza oraz nr aktualnego wiersza
  ostatni = oObj1.getCellRangeByName("C12").Value	'do którego wiersza

  for i = pierwszy to ostatni
     oObj1.getCellRangeByName("B12").Value = i		'zmień numer wyświetlanego rekordu 
     
     export_pdf		'tutaj twoje makro drukujące
     
  next i   
End Sub
W swoim makrze musisz dopracować nazywanie dokumentów PDF, bo w tej chwili będzie tworzył/nadpisywał tylko jeden ten sam plik.
Czy ty chcesz tak drukować po jednym rekordzie czy też aby utworzyła się najpierw cała tabela przetworzonych danych?
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Re: Pobieranie danych z jednej tabeli i wyświetlanie ich w d

Post autor: koneser69 »

Makro miało ty tak działać, że będzie zmieniało numer w komórce B12 na kolejny powiedzmy od 1 do 20. Po zmianie numeru dane widoczne w obszarze wydruku muszą się zmienić ponieważ to obszar wydruku jest eksportowany do pdf.
OpenOffice 4.1.2 Windows 7
ODPOWIEDZ