Jak zrobić takie proste makro w Excelu?

(c)RaSz
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 6 maja 2005, o 02:19
Płeć: Mężczyzna
Lokalizacja: Sadyba
Podziękował: 2 razy
Pomógł: 1 raz

Jak zrobić takie proste makro w Excelu?

Post autor: (c)RaSz »

Coś mi ten Excel robi wbrew, i już zapomniałem, jak go zmusić do posłuchu... A chciałbym wyprodukować Excelowe makro, dość proste - ale utknąłem! Opiszę pokrótce - co ono robić powinno:
1 - Skoczyć do komórki o adresie (stałym) F2, i zwiększyć jej wartość (liczbową) o 1... -
2 - Następnie z komórki C2 pobrać wynik formuły, wartość tekstową - która będzie adresem (zmieniającym się!) komórki, do której, w następnym kroku należy "skoczyć"...
3 - no i skoczyć właśnie do owej, wskazywanej przez zawartość C2 komórki, i zaznaczyć ją, oraz jeszcze dwie dalsze, znajdujące się na lewo od niej. Przykładowo: ów adres, zapisany w C2 - będzie brzmiał E156 - więc makro powinno wówczas zaznaczyć trzy kolejne komórki C156:E156 - po czym skopiować ich zawartość, a następnie
4 - a następnie wykonać akcję wklej specjalnie - poczynając od C156 - i wkleić, ale tylko wynik formuły. Czyli: w oznaczonych komórkach C156:E156 - ma to spowodować zastąpienie całej, zawartej tam (jakiejś-tam...) formuły - już gotowym wynikiem jej działania. Zawartość tej formuły, w owych komórkach (czyli: co ona takiego robi) - jest tu bez znaczenia.
5 - Na końcu kursor (czyli: wybór "aktualnej" komórki) - mógłby wylądować w końcu owej, świeżo "przekonwertowanej" komórki, czyli E156, zaś makro byłoby gotowe do ponownej akcji, czyli dokonania podobnej konwersji - w następnej już linii...
6 - Makro można by wywoływać "gorącym klawiszem" ^K - albo też, jeszcze lepiej - w jakiejś pętli, pozwalającej wykonać ową akcję n razy pod rząd...

Czy ktoś mógłby rzucić jakąś wskazówką? Bowiem te makabra które wyprodukowałem wprawdzie działają, ale... ciągle w stałej linii, czyli konwertują wciąż jedną, i tę samą trójkę komórek, zamiast posuwać się, w każdym kroku - o jedną linię w dół...

O - [you] - może Ty wiesz, jak się robi takie proste makra w Excelu?!
Fibik
Użytkownik
Użytkownik
Posty: 971
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 75 razy

Jak zrobić takie proste makro w Excelu?

Post autor: Fibik »

Ja wiem, ale coś innego: musisz wyrzucić excela i zrobić to w jakimś paskalu, albo innym programistycznym programidle, które jest stworzone do takich manewrów, a i szybkość działania będzie z 400 razy większa, niechybnie.
Awatar użytkownika
abrasax
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 20 maja 2005, o 13:19
Płeć: Kobieta
Lokalizacja: Zabrze
Podziękował: 1 raz
Pomógł: 161 razy

Jak zrobić takie proste makro w Excelu?

Post autor: abrasax »

Zobacz swoje już zarejestrowane makro w edytorze Visual Basica. Jeżeli ciągle konwertuje te same wiersze, trzeba zastąpić stały adres komórek zmiennymi. Użyj ActiveCell (np. żeby wyciągnąć wartość aktywnej komórki wpisujesz ActiveCell.Value). Muszisz pokombinować. Jakbyś miał problemy, to podeślij mi ten plik.
(c)RaSz
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 6 maja 2005, o 02:19
Płeć: Mężczyzna
Lokalizacja: Sadyba
Podziękował: 2 razy
Pomógł: 1 raz

Jak zrobić takie proste makro w Excelu?

Post autor: (c)RaSz »

Śliczne dzięki @wszystkim - ale mam nadzieję, że dołożycie jeszcze parę słów, bo nadal jestem w kropce... Excela raczej nie porzucę, jako że dłubanina ma charakter rozwojowy, a do tego historyczny – czyli: jakiś czas temu zrobiłem prosty arkusz, realizujący niewielki algorytm, potem wyszła potrzeba dodania paru drobiazgów, potem kilku funkcji, dalej zaś się okazało, że można na tym wykonać działania, ułatwiające atak, na dość ciekawy problem... Tak więc arkusz rozrósł się do całkiem pokaźnych rozmiarów, i stanowi spore ułatwienie – ale i utrapienie Jednak pisanie tego od nowa – oznaczałoby naprawdę spooOoory wysiłek, i nawet nie jestem pewien, czy odtworzyłbym wszelkie, onegdaj już zaimplementowane algorytmy - bo: było to dawno i... nieprawda!

Dlatego też, póki co – chciałby dodać jeszcze opisane powyżej makro. Visual Basica odpalić umiem, ale dalej – to już niewiele, niestety. Czysta abra-kadabra (że się tak wyrażę). Gdybym jeszcze wiedział, co po tym ActiveCell.Value... Jeśliby komuś się chciało WwWydrukwać tu jakieś drobne kroczki, z powyższego, czyli kopię zawartości z edytora Visual Basica, realizujące mniejsze, cząstkowe elementy opisanego przeze mnie makra – byłbym wielce zobowiązany. Bardzo ładnie też byłoby, gdyby owemu tekstowi ćwierć-makra towarzyszył jakiś szczątkowy opis – chociażby w postaci odnośnego fragmentu mojego „zamówienia”, gdzie przedstawiam to, co chciałbym uzyskać...
Awatar użytkownika
abrasax
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 20 maja 2005, o 13:19
Płeć: Kobieta
Lokalizacja: Zabrze
Podziękował: 1 raz
Pomógł: 161 razy

Jak zrobić takie proste makro w Excelu?

Post autor: abrasax »

Kod: Zaznacz cały

Sub Makro1()

    Range("F2").Select  'wybranie komórki F2
    ActiveCell.Value = ActiveCell.Value + 1   'zwiększenie wartości F2 o 1
       
    Range("C2").Select   'wybranie komórki C2
    Range(ActiveCell.Value).Select   'skok do komórki o adresie z C2

    Do Until (ActiveCell.Value = "")   'pętla będzie wykonywana do pierwszej pustej komórki
    Range(ActiveCell, Selection.Offset(0, 2)).Select    'zaznaczenie 3 sąsiednich komórek
    
    Selection.Value = Selection.Value   'wklejenie samych wartości
    ActiveCell.Offset(1, 0).Select    'wybranie komórki w następnym wierszu
   
    Loop   'koniec pętli
End Sub
(c)RaSz
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 6 maja 2005, o 02:19
Płeć: Mężczyzna
Lokalizacja: Sadyba
Podziękował: 2 razy
Pomógł: 1 raz

Jak zrobić takie proste makro w Excelu?

Post autor: (c)RaSz »

Dzięki! Abrasax - wszystko działa, gro i bucy !! Oczywiście trochę jeszcze to zrobiłem na odwyrtkę, ale tak to zazwyczaj bywa: kiedy się w końcu załapie co-i-jak, to potem już można szczegóły rozplanować w te, albo wefte...
Została mi jeszcze tylko jedna, dość topornie przeze mnie zrobiona sprawa: kontroli, nad ilością pętli. Twoja propozycja, na sposób zakończenia Loop’owania była niezła: Do Until (ActiveCell.Value = "") - ale miała, w przypadku kolizji z elementami innych moich ustawień - niekorzystne (czasem) skutki. Dlatego wybrałem użycie zmiennej sterującej, która ma w sposób jawny określać ilość pętli do wykonania. Ale - zrobiłem to chyba bez większego pojęcia - choć działa. Ale wolałby to poprawić, aby było tak:
1 - W komórce G3 jest zm. sterująca (zadana z góry, i "stała"), zaś w F2 - zmienna "badana" - której wielkość będzie się zmieniać, na skutek działania innych elementów procedury (tu - nieistotnych)
2 - Wykonywanie pętli powinno się zakończyć - gdy F2 - osiągnie wartość G3 - lub, dla jeszcze szerszej możliwości stosowania, wtedy, gdy dojdzie do zrównania F2 = G3 + c : gdzie c jest jakąś-tam liczbą, np. 50…
3 - Pętla powinna być wykonywana dopóty, dopóki F2 jest od owej wartości mniejsze, lub równe, ale:
4 - jeśli nieopatrznie uruchomimy procedurę gdy już JEST równe - pętla wykonana być nie powinna (ani razu)! A zaś pytanie brzmi:
5 - W którym miejscu należy umieścić "badanie warunku"? no i jak owo "badanie" zapisać najbardziej lakonicznie, elegancko i schludnie.

Ponieważ tego nie mogłem rozstrzygnąć - to na wsjakij pożarnyj słuciaj - wepchnąłem to przed Loop’em, a i zaraz za nim, tuż przed zasadniczą "procedurą-coś-tam", oraz jeszcze po raz trzeci - krok przed końcem pętli. Jednym słowem: napaskudziłem! Oczywiście: działać - działa, ale jednak na przyszłość lepiej takiego śmiecenia - unikać. A że jeszcze pamiętam, iż rodzajów takich pętli jest kilka (np. While?), i zachowują się one, w podobnych sytuacjach odmiennie - to liczyłbym na przytoczenie ich, z krótkim słówkiem wyjaśniającym. Ale... bez pośpiechu Jako że swój problem już jakoś-tam rozwiązałem, a to, o co pytam - to tylko tak na zaś... Czyli: kto wie, niech skrobnie - w wolniejszej chwili. Zapewnie nie tylko mi się przyda.

Koleżance Abrasax dziękuję, kliknąłem też na przycisk [ pomogła ] - ale teraz spróbuję jeszcze dodać kolejny taki punkcik, wszak otrzymałem tej pomocy dość sporo... Ciekawe, czy oprogramowanie przyjmie dwu-klik za jeden topic?...
A oprócz tego - i tak jestem Twoim dłużnikiem! I jeślibym mógł być pomocny, przy rozwiązywaniu jakiegoś Twojego problemu - to wal do mnie jak w dym! Jeśli tylko dam radę...
ODPOWIEDZ