Aktywne Wpisy
pieknylowca +108
A czy ty jesteś fucking unstopable? #frajerzyzmlm
Z takich ciekawostek z II Wojny Światowej to moja Ś.P. prababcia często mi opowiadała jak wyglądała u nich okupacja w małej mieścince w południowej Polsce. Miejscowość była niedaleko Krakowa i Oświęcimia, więc było sporo wojsk niemieckich i SSmanów. Mieli duży dom, więc często zdarzało im się "gościć" (im się raczej nie odmawiało, bo mogło się skończyć źle) SSmanów i babcia opowiadała mi, że zawsze byli kulturalni, dziękowali, a nawet zdarzało się, że
=IF(OR(RC[-9]=RC[-8],RC[-2]=1),0,IFERROR(IF(AND(RC[-6]=1,RC[-7]<VLOOKUP(RC[-9],R5C42:R45C43,2,0)),1,0),0))
Jak z tego zrobić funkcję? Próbowałem w ten sposób ale to raczej nie jest takie proste (nie działa zresztą - wyskakuje błąd expected expression):
Function Test() As String
test =IF(OR(RC[-9]=RC[-8],RC[-2]=1),0,IFERROR(IF(AND(RC[-6]=1,RC[-7]<VLOOKUP(RC[-9],R5C42:R45C43,2,0)),1,0),0))
End Function
#excel #programowanie
Tylko tu pojawia się pytanie: po co tworzyć funkcję, która oblicza wartość formuły? Chyba warto, żebyś napisał co dokładnie chcesz osiągnąć, bo jeśli chodzi na przykład o zamianę wyniku formuły na wartość, to zdecydowanie nie tędy
Żeby jakoś sobie z tym poradzić, kolumny ułożone są według kolejności działań od lewej, do prawej. W momencie kiedy
- wiersz po wierszu obliczać wynik formuły dla 24 kolumn
- zapisywać wynik w odpowiedniej komórce
To zapewniam, że to rozwiązanie będzie co najmniej o rząd wielkości wolniejsze od takiego:
- obliczyć wynik formuły dla całej kolumny
- zapisać wynik jako wartości
To drugie rozwiązanie wygląda mniej więcej tak, jak opisujesz, że działa to w tej chwili. Powinno to wyglądać
Metoda 1 - tak to obecnie działa
Metoda 2 - tak chciałbym żeby działało
Metoda 3 - tak też jest ok, ale słyszałem, że ten rodzaj pętli jest wolniejszy od tego z modelu 2
A w jaki sposób wykonywany byłby kod Twoją metodą? Domyślam się, że podobnie do metody 1?
- zaznacz cały zakres wynikowy
- wpisz formułę
- naciśnij Ctrl+Enter
- skopiuj wynik formuły jako wartości
czas wykonania powinien być zbliżony do tego z Metoda 1 (o ile rzeczywiście kod tak działa)
@brak_nicku: na przykład jeśli masz w kilku kolumnach wyszukiwanie tej samej wartości za pomocą VLOOKUP, po to by zwrócić różne kolumny z tabeli pomocniczej, to warto to zmienić na jedną dodatkową MATCH i kilka INDEKS. Jednak znacznie
1. Czy mógłbyś dokładniej wytłumaczyć o co chodzi z tymi tablicami wynikowymi?
2. Co do metody 3 lub 2 czy mógłbyś mi wytłumaczyć jak to zrobić? Mimo wszystko chciałbym przetestować tą metodę. Czy do takich przypadków stosuje się właśnie w vba funkcję, czy funkcje wykorzystuje się do czegoś innego?
https://pastebin.com/W05hrHSX
Użyta tam funkcja MicroTimer pochodzi stąd: http://www.vbaexpress.com/kb/getarticle.php?kb_id=1068
Mamy milion wierszy x 2 kolumny i chcemy je skleić (połączone spacją). Daje to taki wynik:
@Dakkar: Zasadniczo funkcje używa w przypadku, gdy takie same obliczenia wykonujesz kilkukrotnie w kodzie w różnych miejscach. Wtedy zamiast powtarzać te same linie kodu kilka razy - tworzysz funkcję, która to oblicza, a następnie zamiast replikować ten sam kod - wywołujesz funkcję. Czyli (tylko i aż) otrzymujesz krótszy, łatwiejszy w późniejszej pielęgnacji kod -
Tego fragmentu nie rozumiem. O jakiej tablicy wynikowej mówimy?
W swoim przykładzie w ostatniej kolumnie także podajesz wyniki czasu obliczeń dla tablicy. O jakiej metodzie
@Dakkar: a patrzyłeś na kod z tego linku:
https://pastebin.com/W05hrHSX
Tam jest podany kod funkcji Tablica: wczytujesz całe dane wejściowe do jednej zmiennej, wynik zapisujesz w drugiej, na koniec zapisujesz wartość tej zmiennej do zakresu
@Dakkar: znaczy procedury