Podanie wartości z wyfiltrowanego zakresu danych

W jaki sposób można uzyskać informację, jaka wartość została wybrana z wyfiltrowanego zakresu dnaych? Na przykład: mamy 200 wierszy, z których każdy zawiera ncyfrę narastającą względem poprzedniej - 1,2,3,itp. Wyfiltruję np. 25. Jaka funkcja umozliwi mi wyświetlenie w wyznaczonej przez mnie komórce, jaka wartość została wybrana? Problemem jest to, że w zalezności od tego jaką wybiorę cyfrę, inna będzie jej pozycja w zbiorze.

Jest to potrzebne, aby powiązać wybrana wartość z funkcja wyszukiwania pionowego - nie wiem jednak, jaką wynkcją wymusić na EXCEL-u, aby podawał wybraną w drodze filtrowania wartość.

HEELP!!!

Odpowiedzi: 1

Witaj.

Jak dla mnie, to filtrowanie jest niepotrzebnym utrudnieniem! Formuła wyszukująca wręcz go nie potrzebuje. Aby wybierać wartości z listy można użyć 'pola kombi' ( ze sprawdzania poprawności, z paska 'formularze' lub z 'przybornika formantów'). WYSZUKAJ.PIONOWO pozwala użyć tylko jednego kryterium ale są inne sposoby (formuły tablicowe) by kryteriów było więcej.

Opisz swój problem, czego wyszukujesz i w czym, to pomożemy Ci na forum wybrać optymalny wariant.

Pozdrawiam

ohcyR
Dodano
04.08.2006 18:24:56
  • Tulkas77 05.08.2006 00:05:19

    To nie jest takie proste - ciężko to nawet wytłumaczyć :-)) <br />Muszę korzystać z filtrowania, bo nie potrafię sobie poradzić ze stworzeniem r&#243;wnie przydatnego narzędzia. <br /> <br />Zał&#243;żmy taką sytuację: masz 800 wierszy. Wśr&#243;d nich jest 30 argument&#243;w, obok kt&#243;rych występują r&#243;żne dane (np. 30 Miejscowości, a obok każdej z nich r&#243;żne nazwisko). Zależy mi na tm, aby wyfiltrować np. miejscowość nr 3. Dodatkowo, mam napisany skrypt w VB kt&#243;ry na podstawie zawartości np. pola A1 eksportuje zakładkę z wyfiltrowanymi danymi do odrębnego pliku. Jednakże p&#243;ki co, uzytkownik musi dwukrotnie wybrać wyfiltrowaną miejscowość - raz do samego filtrowania, a drugi raz po to, aby skrypt wiedział jaką nadać nazwę plikowi. I ryzyko błędu wzrasta - bo trzeba wykonać dwie czynności, zamiast jednej (korzystają z tego "zieloni" użytkownicy...). Zalezy mi na rozwiązaniu, kt&#243;re będzie odczytywało z wyfiltrowanych danych wartość, kt&#243;ra została wyfiltrowana (czyli np. 3). Problem polega na tym, że w zależności od tego kt&#243;rą wybierzesz wartość, zostaną wyfiltorwane r&#243;żne wiersze - i skąd skrypt ma wiedzieć, o kt&#243;rą wartość chodzi? Przy wartości 3 będą to np. wiersze 4,8,10,22 a przy wartości 32 będą to wiersze 700, 740, 800. <br /> <br />Jak to rozwiązać?

  • ohcyR 05.08.2006 02:19:23

    <P>Hej.</P> <P>Zobacz takie przykladowe makra:</P> <P>Sub test1()<BR>&nbsp; 'podaje wartość z ostatniej komórki w kolumnie A; działa także przy autofiltrze<BR>&nbsp; MsgBox Range("A65536").End(xlUp).Value<BR>End Sub</P> <P>Sub test2()<BR>&nbsp; 'podaje wartość kryterium 1-szj kolumny autofiltra<BR>&nbsp; ' ActiveSheet.AutoFilter.Filters.Item(1).Criteria1<BR>&nbsp;&nbsp;<BR>&nbsp; With ActiveSheet.AutoFilter.Filters.Item(1)<BR>&nbsp;&nbsp;&nbsp; If .On Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'pominięcie znaku '='<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox Mid(.Criteria1, 2)<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox "Nie wybrano kryteriów w autofiltrze dla 1-szej kolumny."<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp; End With<BR>End Sub</P> <P>Napisz, jeśli to nie wystarczy.</P>

  • Jeż 06.08.2006 01:57:29

    Tulkas77 <br />Przepraszam, że może zbyt łopatologicznie. Ale odpowiadam nie tylko Tobie, bo wiele podobnych problem&#243;w zgłoszonych na tym forum czytałem. <br />Wyrzuć w diabły skrypt w VB, o kt&#243;rym wspomniałeś. Zapomnij o filtrach (Autofiltrze i Filtrze zaawansowanym) wbudowanych w Interface użytkownika Excela. Są dobre ale tylko dla lubiących filtrować na piechotę. <br />Wyznacz parę wolnych kolumn w arkuszu, w kt&#243;rym są dane, na formuły, kt&#243;re przy pomocy wbudowanych w Excelu funkcji oznaczą każdy z 800 wierszy wartością PRAWDA lub FAŁSZ wg Twoich kryteri&#243;w i podadzą numery tych wierszy. W wierszu pierwszym pierwszej wolnej kolumny np. AX wpisz formułę składającą się z kilku potrzebnych funkcji. Nie wiem dlaczego modnej funkcji WYSZUKAJ.PIONOWO nie polecam. Nigdy jej nie stosuję. Polecam za to ZNAJDŹ, SZUKAJ.TEKST, FRAGMENT.TEKSTU, JEŻELI, LUB, ORAZ, &amp; (zamiast ZŁĄCZ.TEKSTY), INDEKS, PODAJ.POZYCJĘ, ADR.POŚR, WYBIERZ itd. Formuła będąca kombinacją tych i innych funkcji będzie może skomplikowana, ale powinna być niezmienna. Bo wartości kryteri&#243;w dla niej określisz w wybranych stałych kom&#243;rkach. I te wartości mogą się oczywiście zmieniać. Jeśli sprawdzisz, że formuła jest prawidłowa na kilku wierszach, to skopiujesz ją hurtem do wszystkich pozostałych 800 kom&#243;rek w tej kolumnie. Formuły powinny oznaczać każdy wiersz PRAWDA, gdy dane w wierszu spełniają kryteria, lub FAŁSZ, gdy nie spełniają. I teraz jeśli znasz trochę VBA, to stworzenie kodem pliku, do kt&#243;rego wpisujesz tylko wiersze oznaczone PRAWDA nie będzie problemem. A jeśli znasz słabo, to: <br />(zakładam, że formuły wpisałeś w kolumnie AX) <br />- w kolumnie AY wpisz w wierszu pierwszym: =PODAJ.POZYCJĘ(PRAWDA;AX1:AX800;0), a w drugim: <br />=PODAJ.POZYCJĘ(PRAWDA;ADR.POŚR("AX"&amp;AY1+1&amp;":AX$800");0)+AY1 <br />i tę drugą formułę skopiuj do pozostałych wierszy w kolumnie. Kolumna AY zwr&#243;ci po kolei numery wierszy spełniające kryteria. Ale pod koniec listy numer&#243;w będzie zwracać #N/D! Dlatego w kolumnie kolejnej AZ można dać w pierwszym wierszu: <br />=JEŻELI(CZY.BŁĄD(AY1);"";AY1) i skopiować tę formułę do pozostałych wierszy kolumny AZ. Teraz tylko trzeba zliczyć liczbę wierszy większych od zera np. w kom&#243;rce BA1=LICZ.JEŻELI(AZ1:AZ800;">0") i posługując się funkcją INDEKS można w drugim arkuszu pliku ściągnąć dane tych wierszy, a z niego prostym makrem (tworzenie pliku pomijam): <br />Sub Kopiuj_Dane() <br />Dim k As Integer <br />k = Range("BA1").Value <br />Workbooks("Plik2.xls").Sheets("Arkusz1").Range("A1:AD" &amp; k).Value = _ <br />Workbooks("Plik.xls").Sheets("Arkusz2").Range("A1:AD" &amp; k).Value <br />End Sub <br />Reasumując - jak to wszystko powinno działać? Wpisujesz w kilku (może 30) wybranych kom&#243;rkach wartości kryteri&#243;w. I klikasz przycisk, kt&#243;rym tworzysz plik z wyfiltrowanymi danymi. Wszystko. <br /> <br />Korzystanie z wbudowanych w Excelu funkcji niekt&#243;rym entuzjastom VBA może wydać się nieeleganckie. Wg nich eleganckie jest rozwiązywanie wszystkiego wyłącznie kodem VBA. Znam dobrze VBA, ale uważam, że zawsze trzeba przyjmować rozwiązania najprostsze i najszybciej działające. A funkcje wbudowane w Excelu działają wielokrotnie szybciej od najlepszych makr. W przypadku bazy 800 rekord&#243;w to nie ma większego znaczenia, ale po co męczyć się z pisaniem kodu VBA, jeśli MS dał nam szeroki wachlarz funkcji. <br />Pozdrawiam <br /> <br />PS.Gdyby przyszło do głowy Tobie lub innym stosowanie wszystkiego powyższego do baz danych o dużej liczbie rekord&#243;w np. 40000, to konieczny byłby manewr polegający na tym, że funkcja LICZ.JEŻELI w kom&#243;rce BA1 powinna być wpisywana i kasowana makrem Kopiuj_Dane, bo ta funkcja strasznie spowalniałaby proces przeliczania arkusza, jeśli zlicza wyniki wielu tysięcy formuł, kt&#243;re zmieniają wartości w trakcie zliczania. Dlatego na początku makra należałoby wpisać: <br />Range("BA1").FormulaLocal = "=LICZ.JEŻELI(AZ1:AZ800;">0")" <br />a na końcu tego makra: <br />Range("BA1").Value = ""

  • Koziorozec 07.08.2006 00:33:15

    <BLOCKQUOTE><div>Korzystanie z wbudowanych w Excelu funkcji niektórym entuzjastom VBA może wydać się nieeleganckie. Wg nich eleganckie jest rozwiązywanie wszystkiego wyłącznie kodem VBA. Znam dobrze VBA, ale uważam, że zawsze trzeba przyjmować rozwiązania najprostsze i najszybciej działające. A funkcje wbudowane w Excelu działają wielokrotnie szybciej od najlepszych makr. W przypadku bazy 800 rekordów to nie ma większego znaczenia, ale po co męczyć się z pisaniem kodu VBA, jeśli MS dał nam szeroki wachlarz funkcji.</div></BLOCKQUOTE><br>Ja się zgadzam - w całej "rozciągłości" :) i przybijam "piątkę"! :)<br>Wbudowane funkcje działają o wiele szybciej od VBA, a tam, gdzie nie wystarczają stosuje się VBA.<br>To się tyczy nie tylko Excela, ale również narzędzi zaawansowanych w Accessie - tam, gdzie można - stosuję wbudowane funkcje, gdzie to za mało - VBA.<br>

Tulkas77
Dodano:
02.08.2006 15:15:16
Komentarzy:
1
Strona 1 / 1