Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Dynamiczna zależność od dwóch zmieniających się wartości...

Witam,
Mam skoroszyt z dwoma arkuszami (korzystam z Excel v.2013), w jednym jest lista osób (arkusz: lista) które przynależą do trzech grup (w przykładzie "Mała", "Średnia" i "Duża"), w drugim są dane (arkusz: dane), które są wypełniane przez te osoby. Jest w nim sporo różnych informacji w postaci list wyboru, pól tekstowych i wartościowych. Użytkownicy codziennie uzupełniają w nim dane. Na ich podstawie wykorzystuję później m.in. tabele przestawne, MSQuery itp (w moim załączonym przykładzie usunąłem niepotrzebne kolumny, aby skupić się tylko na moim problemie).

Jedna z kolumn: Table2[[#Headers];[grupa]] ma automatycznie zwracać przynależność osoby według ustaleń znajdujących się w zdefiniowanym zakresie: zmiany =lista!$B$2:$J$17.
Chodzi o to, że z upływem czasu dowolna osoba może zmieniać grupę, a ja chciałbym to wykazać w arkuszu dane w kolumnie Table2[[#Headers];[grupa]].
Takich zmian może być więcej niż w moim przykładzie (trzy) i tu się zaczyna problem z "ogarnięciem" tego.
Dla trzech zmian ustawiłem formuły zawarte w kolumnach arkusza 'dane' (nagłówki ch1, ch2, ch3 i wynikowy grupa)
Formuła jest w sumie dość rozbudowana. Właśnie dlatego, żeby jej nie zaciemniać stworzyłem sobie te trzy dodatkowe kolumny "ch". W przeciwnym razie dla komórki C2 wyglądałaby tak:
=IFERROR(IF(AND(VLOOKUP(A2;zmiany;8;FALSE)>0;B2>=VLOOKUP(A2;zmiany;8;FALSE));VLOOKUP(A2;zmiany;9;FALSE);IF(AND(VLOOKUP(A2;zmiany;6;FALSE)>0;B2>=VLOOKUP(A2;zmiany;6;FALSE);OR(VLOOKUP(A2;zmiany;8;FALSE)=0;VLOOKUP(A2;zmiany;6;FALSE)<=(VLOOKUP(A2;zmiany;8;FALSE))));VLOOKUP(A2;zmiany;7;FALSE);IF(AND(VLOOKUP(A2;zmiany;4;FALSE)>0;B2>=VLOOKUP(A2;zmiany;4;FALSE);OR(VLOOKUP(A2;zmiany;6;FALSE)=0;B2<VLOOKUP(A2;zmiany;6;FALSE)));VLOOKUP(A2;zmiany;5;FALSE);VLOOKUP(A2;zmiany;3;FALSE))));"")

Wiem, że ktoś mógłby przytoczyć dłuższą ale nie o to chodzi.

Wciąż się uczę excela, więc proszę o wyrozumiałość.
Arkusz dane musi zawierać (3 pierwsze kolumny) takie dane i taki układ.
Lista wpisów do 'dane' osiąga ponad 30 tys rekordów i zaczynam zauważać problemy z wydolnością przy filtrowaniu (użytkownicy mają taką możliwość). Jak zamienię grupę na wartość (pozbędę się formuł) -> excel przyspiesza. Wolałbym nie używać formuł tablicowych.
Arkusz lista normalnie jest ukryty i tylko ja nim zarządzam, może być dowolnie modyfikowany. Podejrzewam, że można go uprościć.
Lista osób wciąż rośnie (obecnie 50 użytkowników).
Liczba grup jest oczywiście większa (załącznik to tylko przykład).
Liczba możliwych zmian w ciągu roku może być większa niż założone 'trzy'.
Nie znam dobrze makr :( zaczynam się uczyć dopiero.

Szukam prostszego sposobu do zamieszczonego przykładu. W załączonym pliku wyróżniłem "Iksińskiego" jako przykład tych zmian.
Będę wdzięczny za pomoc / wskazówki.
Załącznik:
https://drive.google.com/file/d/0Bwy6LRRBLBSacDB4bGZ2Sk...Ten post został edytowany przez Autora dnia 28.12.15 o godzinie 20:17
Marcin S.

Marcin S. analityk

Temat: Dynamiczna zależność od dwóch zmieniających się wartości...

Nie możesz dopuścić, aby tabela rozszerzała Ci się w bok bez kontroli, a tak masz w tej chwili. Tak na szybko, rozwiązaniem byłoby wprowadzenie kombinowanego pola Osoba_grupa jako klucz. Wtedy Iksiński będzie występował trzy razy, ale Iksiński_duża tylko raz.
Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Dynamiczna zależność od dwóch zmieniających się wartości...

Dzięki za zainteresowanie tematem.
Też myślałem nad tym żeby nie dopuszczać do rozszerzania tabeli w bok. W moim przypadku (przykład jest okrojony) liczba grup jest dużo większa. Jeszcze jedno arkusz 'dane' musi mieć zachowaną historię grup.
Nie do końca dobrze zrozumiałem intencje Osoba_grupa jako klucz
Czy pisząc wprowadzenie kombinowanego pola masz na myśli pole kombi? Wiem jak je zrobić ale nie mam pojęcia jak je tu zastosować?
Marcin S.

Marcin S. analityk

Temat: Dynamiczna zależność od dwóch zmieniających się wartości...

Nie miałem na myśli pola kombi. Miałem na myśli dodatkową kolumnę, z formułą typu :

=osoba&"_&"grupa"

Dalej, jeśli Jan Kowalski jest przypisany do grupy Mała, to w tej kolumnie wyświetli się Jan Kowalski_Mała. Jeśli chcesz go przenieść do grupy duża, to dopisujesz Kowalskiego jeszcze raz z grupą Duża. Wartość Kowalski_Duża powinna być unikalna. Jeśli używasz vlookup (wyszukaj.pionowo) to jako pierwszego argumentu możesz użyć tej właśnie dodatkowej kolumny, a nie tej z osobą.
Ilość zmian dla Kowalskiego łatwo sprawdzisz zliczając wystąpienia ciągu "Jan Kowalski". Formułą albo tablicą przestawną. Tak samo tabelą przestawną sprawdzisz, do jakich grup należał Kowalski i kiedy.

Problemem będzie, jeśli przypiszesz go z powrotem do grupy Mała, tu już musisz wymyśleć coś z datami. Zresztą i tak w tej tabeli powinna być zawarta informacja od kiedy do kiedy dany osobnik był w jakiej grupie.

Generalnie chodzi o to, aby tabela z danymi miała cały czas tą samą ilość kolumn, bo inaczej trudno będzie Ci napisać sensowe kwerendy, makra lub formuły na niej oparte.



Wyślij zaproszenie do