Jagodno

Forum osiedla Cztery Pory Roku
Dzisiaj jest pt gru 27, 2024 9:58 pm

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 64 ]  Przejdź na stronę 1, 2, 3, 4  Następna
Autor Wiadomość
 Tytuł: EXCEL-Poradnik
PostZamieszczono: pn lip 12, 2004 6:56 pm 
Offline
Awatar użytkownika

Rejestracja: pt mar 26, 2004 11:22 pm
Posty: 2424
Mieszkaniec osiedla: Nie
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.


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pn lip 12, 2004 8:03 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
W czym tkwi problem?

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pn lip 12, 2004 8:46 pm 
Offline

Rejestracja: ndz kwie 04, 2004 7:46 am
Posty: 142
Lokalizacja: Zawiszy Czarnego 11
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 :?: :?: :?:


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pn lip 12, 2004 8:58 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
jeszcze chwila, jestem blisko

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pn lip 12, 2004 9:38 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
Mam. Gdzie podesłać rozwiązanie?

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pn lip 12, 2004 11:40 pm 
Offline
Awatar użytkownika

Rejestracja: pt mar 26, 2004 11:22 pm
Posty: 2424
Mieszkaniec osiedla: Nie
dzieki dzieki, wyslij na maila mailto:wgalecki@poczta.onet.pl :)


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: wt lip 13, 2004 8:12 am 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
dajcie to ma forum - bo się zainteresowałem


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: wt lip 13, 2004 10:19 am 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
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.

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 11:14 am 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
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.


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 1:28 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
Chyba da się zrobić :idea: . Pobieranie danych z innych plików, nawet wielu nie stanowi problemu. Jedynym problemem może być zmieniająca się nazwa pliku, z którego mają zostać pobrane dane. Nigdy tego nie robiłem i nie bardzo wiem (w tej chwili) jak to zrobić w Visual Basic’u. Bez butelki piwa tego nie rozbiorę :lol: dlatego usiądę dopiero wieczorem i pomyślę. Jak coś wymyślę to dam znać.

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 1:33 pm 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
ok - to możesz kupić na mój koszt w zielonej budce :D


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 3:26 pm 
Offline
Awatar użytkownika

Rejestracja: pn mar 29, 2004 1:38 pm
Posty: 1813
Lokalizacja: Vivaldiego 2 !!!
Da się jeśli nazwa będzie w miare regularna, chociaż trzeba pokombinować. Ale masz Pieszy rację , bez VBA się nie obejdzie.

_________________
------------------------------------
Nie traktuj życia zbyt serio. I tak nie wyjdziesz z niego żywy
Cała Polska w Cieniu Śląska !!!

Obrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 3:41 pm 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
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


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 07, 2005 3:46 pm 
Offline
Awatar użytkownika

Rejestracja: pn mar 29, 2004 1:38 pm
Posty: 1813
Lokalizacja: Vivaldiego 2 !!!
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 ?

_________________
------------------------------------
Nie traktuj życia zbyt serio. I tak nie wyjdziesz z niego żywy
Cała Polska w Cieniu Śląska !!!

Obrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: sob sty 08, 2005 1:55 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
:idea: Mam 8) :idea:
Dopracuję szczegóły i opiszę rozwiązanie.

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: sob sty 08, 2005 3:34 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
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.


8)

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: sob sty 08, 2005 7:22 pm 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
trochę czarna magia - musze chyba poczytać literaturę na ten temat.


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: ndz sty 09, 2005 3:32 pm 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
Wieczorem opiszę krok po kroku każdą linię.

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: czw sty 13, 2005 9:40 pm 
Offline

Rejestracja: czw maja 20, 2004 10:58 am
Posty: 2199
Lokalizacja: C2 - 9
Mieszkaniec osiedla: Tak
wracając do sprawy. bo ostatnio nie zajmowałem się tym nie zajmowałem. mozna liczyć na ten opis???


Na górę
 Wyświetl profil  
 
 Tytuł:
PostZamieszczono: pt sty 14, 2005 2:30 am 
Offline
Awatar użytkownika

Rejestracja: wt kwie 06, 2004 8:54 am
Posty: 793
Lokalizacja: N51 20' 11.8" _________E16 38' 1.0"
Mieszkaniec osiedla: Tak
Oczywiście. Przepraszam, wtedy nie miałem czasu a później zapomniałem :oops:



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 :cry: ) to zapraszam do mnie osobiście. Może wtedy będzie łatwiej.

_________________
Obrazek
no tears to cry, no feelings left
the species has amused itself to death


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 64 ]  Przejdź na stronę 1, 2, 3, 4  Następna

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 38 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Powered by phpBB® Forum Software © phpBB Group