Jagodno http://forum.vivaldiego.wroclaw.pl/ |
|
EXCEL-Poradnik http://forum.vivaldiego.wroclaw.pl/viewtopic.php?f=2&t=403 |
Strona 1 z 4 |
Autor: | witq [ pn lip 12, 2004 6:56 pm ] |
Tytuł: | EXCEL-Poradnik |
tata prosi o pomoc osobe, ktora naprawde dobrze zna sie na excelu, ja nie wiem o tym nic, on wie sporo, ale na czyms sie zacial ![]() z gory wielkie dzieki i piwo ![]() EDIT Krzysztof Marschal: Po ustaleniu z Witkiem zmieniamy temat. Teraz można traktować topik jak poradnik do EXCELA. |
Autor: | Pieszy [ pn lip 12, 2004 8:03 pm ] |
Tytuł: | |
W czym tkwi problem? |
Autor: | Włodek [ pn lip 12, 2004 8:46 pm ] |
Tytuł: | |
Nazwać problem, to rozwiązać go w połowie... Spróbuję. Pracuję w skoroszycie z wieloma arkuszami. Chcę powiązać wartość komórki z inną w zależności od parametru, jakim jest wartość kolejnej , trzeciej komórki. Problem w tym, że chcę to zrobić dla ca 50 parametrów. Funkcja "wybierz" daje tylko 29 możliwości. Jak zrobić to inaczej ![]() ![]() ![]() |
Autor: | Pieszy [ pn lip 12, 2004 8:58 pm ] |
Tytuł: | |
jeszcze chwila, jestem blisko |
Autor: | Pieszy [ pn lip 12, 2004 9:38 pm ] |
Tytuł: | |
Mam. Gdzie podesłać rozwiązanie? |
Autor: | witq [ pn lip 12, 2004 11:40 pm ] |
Tytuł: | |
dzieki dzieki, wyslij na maila mailto:wgalecki@poczta.onet.pl ![]() |
Autor: | dobrzyk [ wt lip 13, 2004 8:12 am ] |
Tytuł: | |
dajcie to ma forum - bo się zainteresowałem |
Autor: | Pieszy [ wt lip 13, 2004 10:19 am ] |
Tytuł: | |
Rozwiązanie może nie jest eleganckie ale za to skuteczne. Oszukałem Excela komendą JEŻELI. Wygląda to mniej więcej tak: =JEŻELI(Arg<30;WYBIERZ(Arg;War1;War2;...,War29);JEŻELI(29>Arg>50;WYBIERZ(Arg-29;War30;War31;...,War50);“Poza zakresem“);0) gdzie: Arg – adres komórki z argumentem, War1 – War50 – adresy komórek z wartościami zależnymi od argumentu. Komenda JEŻELI powoduje sprawdzenie z jakiego zakresu jest argument. Dla argumentu z zakresu 1-29 wykonuje pierwszą komendę WYBIERZ a dla argumentu z zakresu 30-50 drugą. Ważne jest, żeby dla drugiej komendy WYBIERZ argument był pomniejszony o wartość 29. Bardziej eleganckim rozwiązaniem byłoby skorzystanie z makr i Edytora Visual Basic ale tam za każdym razem kiedy się zmieni argument trzeba uruchamiać makro. Roboty przy tym też jest trochę więcej. |
Autor: | dobrzyk [ pt sty 07, 2005 11:14 am ] |
Tytuł: | |
pozwolę - sobie w tym wątku zadać pytanie - może moderator zmieni tytuł na "porady dot. excela" Chcę zrobić tak, aby dane z poszczególnych plików, raporty dzienne, oznaczone odpowiednią nazwą i rozpoznawalne po dacie np. "Raport Dobowy 02_01_2005_R01" eksportować do innego pliku który będzie "zbierał" odpowiednie dane w macierzy. Pewnie trzeba jakieś makro albo zrobić. Nie chcę codziennie używać CTRL+C i CTRL+V - bo dostanę zwyrodnienia palców. |
Autor: | Pieszy [ pt sty 07, 2005 1:28 pm ] |
Tytuł: | |
Chyba da się zrobić ![]() ![]() |
Autor: | dobrzyk [ pt sty 07, 2005 1:33 pm ] |
Tytuł: | |
ok - to możesz kupić na mój koszt w zielonej budce ![]() |
Autor: | rav [ pt sty 07, 2005 3:26 pm ] |
Tytuł: | |
Da się jeśli nazwa będzie w miare regularna, chociaż trzeba pokombinować. Ale masz Pieszy rację , bez VBA się nie obejdzie. |
Autor: | dobrzyk [ pt sty 07, 2005 3:41 pm ] |
Tytuł: | |
tak jak napisałem "Raport Dobowy 02_01_2005_R01" - takie są nazwy - zmienia się data. każdy plik ma taki sam układ. nazwy, arkuszy, itp |
Autor: | rav [ pt sty 07, 2005 3:46 pm ] |
Tytuł: | |
Mógłbym spróbować z tym powalczyć w weekend , tylko chcialbym znac struture pliku wejsciowego (z jakimis danymi z kosmosu oczywiscie) i strukture pliku wynikowego. Rozumiem ze na plik wyjsciowy składaje sie rekordy z plików wejsciowych ? |
Autor: | Pieszy [ sob sty 08, 2005 1:55 pm ] |
Tytuł: | |
![]() ![]() ![]() Dopracuję szczegóły i opiszę rozwiązanie. |
Autor: | Pieszy [ sob sty 08, 2005 3:34 pm ] |
Tytuł: | |
Ok. Przy założeniu, że w katalogu c:\raporty\ znajduje się dowolna liczba plików o nazwach zaczynających się ciągiem znaków „Raport Dobowy”, oraz mających następującą strukturę: .....|....A........|...B....|... 1...|.dana1...|.........|... 2...|.dana2...|.........|... 3...|.dana3...|.........|... 4...|.dana4...|.........|... 5...|.dana5...|.........|... 6...|.dana6...|.........|... 7...|.dana7...|.........|... 8...|.dana8...|.........|... 9...|.dana9...|.........|... 10.|.dana10.|.........|... 11.|..............|.........|... makro, które pozwoli zebrać dane z tych plików w jednym arkuszu, powinno mieć następujący zapis: Private Sub CommandButton1_Click() Set fs = Application.FileSearch With fs .LookIn = "c:\raporty" .Filename = "Raport Dobowy*.xls" If .Execute > 0 Then MsgBox "Odnalazłem " & .FoundFiles.Count & " plików." Msg = "Czy pobrać dane ze znalezionych plików?" Style = vbYesNo + vbQuestion + vbDefaultButton1 Title = "Co Dalej?" Response = MsgBox(Msg, Style, Title) If Response = vbYes Then GoTo pobranie Else GoTo koniec End If pobranie: For i = 1 To .FoundFiles.Count Workbooks.Open .FoundFiles(i) ActiveSheet.Range("B1").Select kolumna = kolumna + 1 Dana1 = ActiveCell.Value Dana2 = ActiveCell.Offset(1, 0).Value Dana3 = ActiveCell.Offset(2, 0).Value Dana4 = ActiveCell.Offset(3, 0).Value Dana5 = ActiveCell.Offset(4, 0).Value Dana6 = ActiveCell.Offset(5, 0).Value Dana7 = ActiveCell.Offset(6, 0).Value Dana8 = ActiveCell.Offset(7, 0).Value Dana9 = ActiveCell.Offset(8, 0).Value Dana10 = ActiveCell.Offset(9, 0).Value ActiveWindow.Close Range("A1").Select ActiveCell.Offset(0, kolumna).Value = Dana1 ActiveCell.Offset(1, kolumna).Value = Dana2 ActiveCell.Offset(2, kolumna).Value = Dana3 ActiveCell.Offset(3, kolumna).Value = Dana4 ActiveCell.Offset(4, kolumna).Value = Dana5 ActiveCell.Offset(5, kolumna).Value = Dana6 ActiveCell.Offset(6, kolumna).Value = Dana7 ActiveCell.Offset(7, kolumna).Value = Dana8 ActiveCell.Offset(8, kolumna).Value = Dana9 ActiveCell.Offset(9, kolumna).Value = Dana10 Next i Else MsgBox "Nie odnalazłem plików z danymi." End If End With koniec: End Sub ------------------------------------ Pytajcie, jeżeli czegoś nie rozumiecie. ![]() |
Autor: | dobrzyk [ sob sty 08, 2005 7:22 pm ] |
Tytuł: | |
trochę czarna magia - musze chyba poczytać literaturę na ten temat. |
Autor: | Pieszy [ ndz sty 09, 2005 3:32 pm ] |
Tytuł: | |
Wieczorem opiszę krok po kroku każdą linię. |
Autor: | dobrzyk [ czw sty 13, 2005 9:40 pm ] |
Tytuł: | |
wracając do sprawy. bo ostatnio nie zajmowałem się tym nie zajmowałem. mozna liczyć na ten opis??? |
Autor: | Pieszy [ pt sty 14, 2005 2:30 am ] |
Tytuł: | |
Oczywiście. Przepraszam, wtedy nie miałem czasu a później zapomniałem ![]() Uruchomienie funkcji poszukiwania plików: Set fs = Application.FileSearch With fs Określenie parametrów poszukiwania. Ścieżka dostępu (catalog): .LookIn = "c:\raporty" I nazwa pliku. Plik zaczyna się ciągiem znaków “Raport Dobowy”. Gwiazdka oznacza dowolny ciąg znaków a „.xls” oznacza rozszerzenie poszukiwanych plików: .Filename = "Raport Dobowy*.xls" Tu zaczyna się duży warunek. Jeżeli wynik poszukiwań jest dodatni, czyli zostały znalezione pliki spełniające podane wyżej kryteria: If .Execute > 0 Then to zostaje wyświetlone okno z informacją o odnalezieniu plików i ich ilości. Tekst ma postać „Odnalazłem x plików” : MsgBox "Odnalazłem " & .FoundFiles.Count & " plików." Tutaj otwiera się okno z pytaniem “Czy pobrać dane ze znalezionych plików?”. Okno ma tytuł „Co dalej?”. Ma 2 przyciski: „Tak” i „Nie”. Jest oknem pytania. Jego domyślną odpowiedzią jest „Tak”.: Msg = "Czy pobrać dane ze znalezionych plików?" Style = vbYesNo + vbQuestion + vbDefaultButton1 Title = "Co Dalej?" Wynikiem pytania zadanego w otwartym oknie jest odpowiedź „Response”: Response = MsgBox(Msg, Style, Title) Tutaj zaczyna się mały warunek. Jeżeli odpowiedzią jest „Tak” to idź do „pobranie”: If Response = vbYes Then GoTo pobranie W przeciwnym wypadku idź do „koniec”: Else GoTo koniec Koniec małego warunku: End If POBRANIE: pobranie: Tu zaczyna się pętla. Będzie wykonana tyle razy ile plików zostało odnalezionych: For i = 1 To .FoundFiles.Count Otwórz odnaleziony plik: Workbooks.Open .FoundFiles(i) Zaznacz w nim komórkę „B1”. ActiveSheet.Range("B1").Select Przy każdym kolejnym wykonaniu pętli wartość „kolumna” zwiększy się o jeden. Pozwoli to na zapisanie danych z każdego następnego pliku w osobnej kolumnie pliku zbiorczego.: kolumna = kolumna + 1 Dana w zaznaczonej komórce „B1” dostaje nazwę Dana1: Dana1 = ActiveCell.Value Dana znajdująca się o jeden wiersz pod „B1” dostaje nazwę Dana2: Dana2 = ActiveCell.Offset(1, 0).Value Dana znajdująca się o dwa wiersze pod „B1” dostaje nazwę Dana3. Każda następna linia określa nazwę kolejnych danych. Offset to nic innego jak przsunięcie – jak w szachach: (a,b) gdzie a to nr wiersza a b to nr kolumny. Zamiast wiersza można zmieniać kolumny lub i jedno i drugie równocześnie. Można też za każdym razem do określenia położenia interesującej nas danej, używać polecenia „ActiveSheet.Range("X").Select” i „N = ActiveCell.Value” , gdzie X oznacza adres komórki z daną a N nazwę danej. Dana3 = ActiveCell.Offset(2, 0).Value Dana4 = ActiveCell.Offset(3, 0).Value Dana5 = ActiveCell.Offset(4, 0).Value Dana6 = ActiveCell.Offset(5, 0).Value Dana7 = ActiveCell.Offset(6, 0).Value Dana8 = ActiveCell.Offset(7, 0).Value Dana9 = ActiveCell.Offset(8, 0).Value Dana10 = ActiveCell.Offset(9, 0).Value Po zebraniu danych zamyka się okno pliku źródłowego: ActiveWindow.Close W oknie pliku zbiorczego zaznaczona zostaje komórka „A1”: Range("A1").Select Komórki znajdujące się w odsunięciu (a,b) od komórki „A1” dostają wartości Dana1, Dana2 itd. Ich adresy podawane są Tak jak przy zbieraniu danych: Offset(a,b), gdzie a to wiersz, b to kolumna (inna dla każdego pliku): ActiveCell.Offset(0, kolumna).Value = Dana1 ActiveCell.Offset(1, kolumna).Value = Dana2 ActiveCell.Offset(2, kolumna).Value = Dana3 ActiveCell.Offset(3, kolumna).Value = Dana4 ActiveCell.Offset(4, kolumna).Value = Dana5 ActiveCell.Offset(5, kolumna).Value = Dana6 ActiveCell.Offset(6, kolumna).Value = Dana7 ActiveCell.Offset(7, kolumna).Value = Dana8 ActiveCell.Offset(8, kolumna).Value = Dana9 ActiveCell.Offset(9, kolumna).Value = Dana10 Koniec pętli. Przejście do kolejnego pliku. Next i Alternatywa dla dużego warunku. Jeżeli nie zostanie odnaleziony choćby jeden plik spełniający warunki poszukiwań: Else To zostaje wyświetlony komunikat: MsgBox "Nie odnalazłem plików z danymi." Koniec dużego warunku: End If „Wyłączenie” funkcji poszukiwań plików: End With KONIEC: koniec: Koniec makra: End Sub Oczywiście to makro wcale nie musi otwierać okien informacyjnych czy też pytać o to, czy pobrać dane z plików. Mozna to poprostu pominąć. Uruchamiane może być przyciskiem zagnieżdżonym w arkuszu pliku zbiorczego lub automatycznie przy otwieraniu tegoż pliku. Mam nadzieję, że ten opis jest na tyle przejrzysty i jasny, że wszystko jest już wiadome. Jeżeli nie (niestety, nie posiadam daru przekazywania wiedzy ![]() |
Strona 1 z 4 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |