2013-04-26 12 views
5

OK, więc obecnie mam rozwijane pole, które jest wypełnione z zakresu na oddzielnym arkuszu.EXCEL VBA - Tworzenie dynamicznego rozwijania w oparciu o zakres komórek i ciąg

Chcę móc zmniejszyć wartości z menu rozwijanego, dodając tylko wartości, które mają wartość tekstową z innej komórki w obrębie każdego tekstu wartości.

na przykład: komórki A1 mówi „stół” komórka A2 jest rozwijana, która ciągnie się wartościami z zakresu Zakres HAS „stół”, „duży stół”, „stolec”

Obecnie rozwijanie przyniosłoby wszystkie wartości. W tym przypadku chciałbym, aby przyniósł tylko "stół" i "duży stół", ponieważ obaj mają w sobie "stół".

przykładem mojego pliku można znaleźć tutaj http://www.filedropper.com/example_1

Proszę o pomoc .. Mam łzawienie moje włosy!

Dzięki Mike

+1

gdzie jest twój kod? co masz do tej pory? – Juliusz

+0

Proszę sprawdzić http://stackoverflow.com/questions/how-to-ask i mój osobisty faworyt: http://mattgemmell.com/2008/12/08/what-have-you-tried –

+0

@K_B I uważam, że jest to trochę niesprawiedliwe, ponieważ szukałem innych pytań na ten temat i wszystkie, które wydają się istotne, nie są tym, czego szukam. Nie widzę żadnej możliwości przesłania pliku tutaj, więc napisałem przykład w moim pytaniu. Jeśli możesz mi powiedzieć, w jaki sposób mogę załadować arkusz kalkulacyjny programu Excel, mogę to dla ciebie zrobić. –

Odpowiedz

1

Oto jeden sposób to zrobić bez VBA:

(wszystkie instrukcje, aby być wykonane na arkuszu z listy elementów, chyba że zaznaczono inaczej): enter image description here

  1. Wyszukaj dostarczony tekst. W C2, wprowadź =NOT(ISERROR(SEARCH('Choose Items'!$A$2,A2))) i skopiuj
  2. trafień liczy się w D2: =IF(C2,1,0), w D3: =IF(C3,D2+1,D2) - kopia w dół
  3. Tworzenie dynamicznej listy: w F2: F9 umieścić numery 1-8. W G2 użyj tej formuły: =IFERROR(INDEX($A$2:$A$9,MATCH(F2,$D$2:$D$9,0)),IF(F2=1,"No match","")) i skopiuj.
  4. Utwórz dynamiczny nazwany zakres - w imię Manager (formuł ->Nazwa Menedżer), włóż nową nazwę ItemsDynamic i zapewniają =OFFSET(Items!$G$2:$G$9,0,0,MAX(Items!$D$2:$D$9,1),1) jako wzoru.
  5. Użyj nowego ItemsDynamic jako źródło swojej listy rozwijanej w ramach walidacji pola

Gotowe! Sprawdź rozwiązanie this file.

2

To jest bardziej uproszczona odpowiedź.

Najpierw zgrupuj pozycje w arkuszu "Przedmioty" w kolumnie pomocnika, powiedz Kolumna "C", używając wzoru (dla C2) i wypełnij.

=IFERROR(RIGHT($A2,LEN($A2)-FIND(" ",$A2)),$A2) 

Teraz w arkuszu „wybierz produkt” dla komórki B2, używał następującej listy weryfikacji za źródła -

=OFFSET(Items!$A$1,MATCH('Choose Items'!$A2,Items!$C$2:$C$10,0),,COUNTIF(Items!$C$2:$C$10,'Choose Items'!$A2),) 

można wypełnić w dół przedłużenia walidacji do innych wierszy Kolumna " B '

W przypadku, gdy dane w arkuszu "Przedmioty" muszą zostać rozszerzone do wierszy powyżej 10, odpowiednio zmień zakres funkcji dopasowania i funkcje countif tak, aby obejmowały całe dane (po zgrupowaniu w kolumnie "C", jak omówiono wcześniej).

Upewnij listę w arkuszu „przedmioty” jest sortowana na kolumnie pomocniczej (rosnąco lub malejąco), który jest kolumna „C” w tej sprawie.