ID tematu: 70063
 |
Zastąpienie formuł z trzech Kolumn UDF-em |
Autor |
Wiadomość |
ws1948
Stały bywalec Excelforum

Wersja: Win Office 2019
Pomógł: 10 razy Posty: 338
|
Wysłany: 05-02-2021, 20:32 Zastąpienie formuł z trzech Kolumn UDF-em
|
|
|
witam,
chciałbym zastąpić formuły w trzech kolumnach jednym UDFem z jednoczesną możliwością jego wstawienia do wykorzystywanego UDF "zuzel".
Jak zawsze dalsze szczegóły w załączniku.
ws
ZUZEL.xlsm
|
Pobierz Plik ściągnięto 13 raz(y) 27.9 KB |
|
|
 | ID posta:
399809
|
|
|
 |
|
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2035 razy Posty: 6432
|
Wysłany: 06-02-2021, 11:23
|
|
|
Wrzucenie wszystkiego do jednej funkcji UDF nie jest, moim zdaniem, najlepszym pomysłem.
Funkcja zuzel przetwarza argument z jednego wiersza, a dokładniej nawet z jednej komórki.
Nowa funkcjonalność, jaką chciałeś jej przypisać, wymagałaby przetwarzania 4 wierszy, więc albo funkcję należałoby wywoływać tablicowo, albo te same obliczenia byłyby niepotrzebnie wykonywane 4 razy.
Lepszym rozwiązaniem wydaje mi się lekka modyfikacja funkcji zuzel tak, by zwracała do kolumny L liczbę, a nie tekst (o ile jest to możliwe) i wtedy nie byłaby potrzebna kolumna N, a wyznaczenie położenia gwiazdki można by oprzeć na wartościach z kolumny L.
Propozycja w załączniku. Formułę zapisałem w taki sposób, aby widać było jej związek z poprzednim zapisem. Po zweryfikowaniu poprawności działania można to oczywiście zmienić na zapis bardziej naturalny.
Formuła działa poprawnie dla takich danych jakie były w załączniku. Ale tam są możliwe teoretycznie również inne warianty, których nie weryfikowałem z powodu braku danych do testowania.
ZUZEL1.xlsm
|
Pobierz Plik ściągnięto 3 raz(y) 26.13 KB |
|
|
 | ID posta:
399829
|
|
|
 |
|
|
ws1948
Stały bywalec Excelforum

Wersja: Win Office 2019
Pomógł: 10 razy Posty: 338
|
Wysłany: 06-02-2021, 20:44
|
|
|
Witam,
dziękuję za zainteresowanie tematem, za wyczerpujące wyjaśnienie oraz za modyfikacje formuły.
Prosiłbym o wyjaśnienie dlaczego w formule np. Kod: | If IsNumeric(Punkty) Then Punkty = CLng(Punkty) | nie ma zakończenia "The End". Kiedy nie jest konieczne?
W załączniku przedstawiłem większą ilość sytuacji biegowych.
Pozdrawiam
Stanisław
ZUZEL2.xlsm
|
Pobierz Plik ściągnięto 1 raz(y) 31.2 KB |
|
|
 | ID posta:
399873
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2035 razy Posty: 6432
|
Wysłany: 06-02-2021, 20:58
|
|
|
ws1948 napisał/a: | Prosiłbym o wyjaśnienie dlaczego w formule np.
Kod:
If IsNumeric(Punkty) Then Punkty = CLng(Punkty)
nie ma zakończenia "The End". Kiedy nie jest konieczne? | Raczej chyba End If, a nie The End
Jeśli instrukcja If warunek Then instrukcja mieści się w jednym wierszu logicznym, nie potrzeba End If.
Wiersz logiczny może obejmować dwa lub więcej wierszy fizycznych (wierszy druku), jeśli stosuje się znaki kontynuacji.
Jeśli natomiast po Then jest przejście do nowej linii, to potrzebne jest End If na końcu instrukcji. |
|
 | ID posta:
399877
|
|
|
 |
|
|
ws1948
Stały bywalec Excelforum

Wersja: Win Office 2019
Pomógł: 10 razy Posty: 338
|
Wysłany: 06-02-2021, 22:35
|
|
|
Witam,
naturalnie mój błąd. Dziękuję za wyjaśnienie.
Dołożyłem 4 opcję. Wykonywałem wg wzorów z poprzednich opcji. Jednak nie działa. Jaka przyczyna?
oto część kodu: Kod: |
Case nr = 4
If InStr(zawod, "zwykła") > 0 Then
z1 = "rz"
Else
z1 = ""
End If
zuzel = z1
If InStr(zawod, "taktyczna") > 0 Then
z2 = "rt"
Else
z2 = ""
End If
zuzel = z2
If InStr(zawod, "Zastępstwo") > 0 Then
z3 = "zz"
Else
z3 = ""
End If
zuzel = z3
If InStr(zawod, "Taśma") > 0 Then
z4 = "t"
Else
z4 = ""
End If
zuzel = z4
End Select |
Całość w załączniku.
Pozdrawiam
ws
Zuzel2a.xlsm
|
Pobierz Plik ściągnięto 2 raz(y) 32.2 KB |
|
|
 | ID posta:
399883
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 2016
Pomógł: 2035 razy Posty: 6432
|
Wysłany: 06-02-2021, 23:48
|
|
|
A sprawdziłeś sobie swój program krokowo?
Co zawierała zmienna 'zawod' przy wejściu do drugiej instrukcji Select Case?
Przecież wcześniej te fragmenty, których teraz chciałeś szukać zostały już zamienione na "|".
Jedno z możliwych rozwiązań to zrobienie kopii zmiennej 'zawod' zanim zostanie pocięta.
Nie ma potrzeby używania 4 dodatkowych zmiennych - wystarczy jedna. Nie ma też potrzeby przypisywania tekstu pustego. Zmienna zadeklarowana jako String jest od razu inicjowana pustym tekstem.
Zuzel2a.xlsm
|
Pobierz Plik ściągnięto 3 raz(y) 30.93 KB |
|
|
 | ID posta:
399888
|
|
|
 |
|
|
ws1948
Stały bywalec Excelforum

Wersja: Win Office 2019
Pomógł: 10 razy Posty: 338
|
Wysłany: 07-02-2021, 13:29
|
|
|
Witam,
Dziękuję za pomoc i uwagi wyjaśniające istotę problemu.
Wszystkie formuły działają poprawnie.
Pozdrawiam
Stanisław |
|
 | ID posta:
399916
|
|
|
 |
|
|
umiejead
Excel Expert

Wersja: Win Office 2013
Pomógł: 775 razy Posty: 4174

|
|
 | ID posta:
399920
|
|
|
 |
|
|
|
Nie możesz pisać 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 głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
 |
Strona używa plików cookies.
Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe
|