2013-04-26 64 views
5

Ok, quindi attualmente ho un menu a discesa che viene popolato da un intervallo su un foglio separato.EXCEL VBA - Creazione di un menu a discesa dinamico basato su un intervallo di celle e una stringa

Desidero poter ridurre i valori nel menu a discesa aggiungendo solo valori che hanno un valore di testo da un'altra cella all'interno di ciascun testo di valori.

ad esempio: cellulare A1 dice 'tavolo' cella A2 è la discesa che tira dentro i valori della gamma La gamma contiene 'tavolo', 'grande tavolo', 'feci'

Attualmente la il menu a discesa introdurrebbe tutti i valori. In questo caso vorrei che portasse solo 'table' e 'large table' in quanto entrambi hanno 'table' in loro.

un esempio del mio file può essere trovato qui http://www.filedropper.com/example_1

Please help .. Sto strappando i miei capelli!

Grazie Mike

+1

dov'è il tuo codice? cosa hai finora? – Juliusz

+0

Si prega di controllare http://stackoverflow.com/questions/how-to-ask e uno dei miei preferiti: http://mattgemmell.com/2008/12/08/what-have-yried –

+0

@K_B I Pensare che sia un po 'ingiusto, come ho cercato altre domande su questo e tutti quelli che sembrano rilevanti non sono proprio quello che sto cercando. Non vedo alcuna opzione per caricare un file qui, quindi ho scritto un esempio nella mia domanda. Se puoi dirmi come caricare un foglio di calcolo Excel qui, posso farlo per te. –

risposta

1

Ecco un modo di farlo senza VBA:

(tutte le istruzioni da fare sul foglio con l'elenco oggetti se non indicato diversamente): enter image description here

  1. Cerca il testo fornito. In C2, inserire =NOT(ISERROR(SEARCH('Choose Items'!$A$2,A2))) e copiare giù
  2. colpi Count in D2: =IF(C2,1,0), in D3: =IF(C3,D2+1,D2) - copiare giù
  3. Crea elenco dinamico: in F2: F9, inserire i numeri 1-8. In G2, usa questa formula: =IFERROR(INDEX($A$2:$A$9,MATCH(F2,$D$2:$D$9,0)),IF(F2=1,"No match","")) e copia.
  4. Creare un intervallo denominato dinamica - nel Nome Manager (Formule ->Nome Direttore), inserire un nuovo nome ItemsDynamic e fornire =OFFSET(Items!$G$2:$G$9,0,0,MAX(Items!$D$2:$D$9,1),1) come la formula.
  5. utilizzare il nuovo ItemsDynamic come la fonte della vostra discesa in campo di convalida

Fatto! Controllare this file per la soluzione.

2

Questa è una risposta più semplice.

Primo gruppo gli articoli nel foglio 'Elementi' in una colonna helper, diciamo Colonna 'C' usando la formula (per C2) e riempire verso il basso.

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

Ora nel foglio 'Scegli elementi', per la cella B2, utilizzare il seguente come fonte elenco di convalida -

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

Potete riempire giù per estendere la convalida per altre righe della colonna ' B'

nel caso in cui i dati nel foglio 'Articoli' deve essere esteso alle righe successive 10, opportunamente modificare la portata della funzione offset della partita e le funzioni COUNTIF per comprendere l'intero dati (dopo aver il raggruppamento in colonna 'C' come discusso in precedenza).

Assicurarsi che l'elenco nel foglio "Articoli" sia ordinato sulla colonna helper (crescente o decrescente), che in questo caso è la colonna "C".

Problemi correlati