2015-01-16 13 views
7

Ho molti elenchi a discesa nel mio foglio che ho impostato dal menu Data>Data Validation>list. Esiste un modo complesso in VBA per impostarli tutti su valori predefiniti? Per valori di default intendo il primo valore dichiarato in una lista.Impostazione dei valori predefiniti nell'elenco a discesa Validazione dati

BTW. Ho messo su una fonte per un elenco a discesa in A1 come un intervallo dalla formula:

=OFFSET(C1;0;0;1;COUNTA(C1:Z1)) 

Ci sarebbe un modo per mettere questa formula in B1 e chiamarlo nella fonte nell'elenco a discesa come =INDIRECT(B1) indicando una sola cella? (Questo non funziona).

+0

Significa che il valore in B1 SET il valore predefinito per tutti i menu a discesa? – peege

+0

valori predefiniti sono possibili con VBA e con una formula. non c'è però una funzione incorporata 'eval', quindi non è possibile scrivere un testo di una funzione in una cella ed eseguirla da qualche altra parte, tuttavia è possibile specificare un intervallo denominato usando 'OFFSET' e usare' = my_named_range' nei dati validazione, sarebbe sufficiente? – Aprillion

+0

@peege No. Il valore predefinito è in C1. In D1, E1, F1, ecc. Ci sono altri valori che un utente può scegliere dall'elenco a discesa (che è in A1). C1 è un primo valore dell'array. –

risposta

2

La mia idea di soluzione si basa su uno stile di una cella.

(1) Aggiungi un nuovo stile per le celle che avranno elenchi a discesa. L'ho chiamato "Dropdown".

style

(2) Applicare lo stile per le celle che si sta per avere elenchi a discesa. Qui è B2.

(3) Impostare gli elementi di convalida per il proprio elenco a discesa. Li ho messi nelle celle E2: G2.

validation

(4) Se si desidera avere elenco di convalida dinamica mettere in Data> Data Validation> Fonte: =OFFSET($E2;0;0;1;COUNTA($E2:$K2)) oppure dichiarare un intervallo denominato per questo come consigliato Aprillion. E 'molto utile. Nel mio esempio posso aggiungere un nuovo elemento di convalida in H2 e verrà automaticamente incluso nell'elenco di convalida.

(5) Eseguire una macro quando si desidera impostare tutte le celle con un menu a discesa di stile sul valore predefinito. Nel mio caso il valore predefinito è '- Choose from the list -. Questo valore verrà impostato anche se non è presente nell'elenco di convalida.

Sub DropDownListToDefault() 
    Dim oCell As Range 
    Dim ACell As Range 
    Set ACell = ActiveCell 

    For Each oCell In ActiveSheet.UsedRange.Cells 
     If oCell.Style = "Dropdown" Then 
      oCell.Value = "'- Choose from the list -" 
     End If 
    Next 

    ACell.Select 
End Sub 

Dopo l'esecuzione della macro si avrà la seguente scelta: enter image description here

Se si desidera che un utente di scegliere qualcosa dal menu a tendina è molto facile non accettare il valore di default in ulteriore elaborazione .

3

Per utilizzare un offset da colonne C al Z della riga corrente:

  • selezionare qualsiasi cella della prima fila
  • creare un intervallo denominato (Formulas>Name Manager>New...) con Name: per esempio validation e Refers To: sarebbe la formula:

    =OFFSET($C1;0;0;1;COUNTA($C1:$Z1)) 
    
    • utenti inglese della locale, utilizzare , anziché ; come il separatore di elenco
  • selezionare le celle e applicare Data Validation> Consenti: List, Fonte: =validation

Quando si seleziona una cella nella seconda riga e si osserva Name Manager, si noterà che la formula utilizza riferimenti relativi alla riga corrente.


per popolare le cellule con il valore di default, è possibile utilizzare seguente formula (come una formula normale all'interno di una cella, non ha nulla a che fare con la funzionalità di convalida dei dati di sorta):

=INDEX(validation, 1) 

e quando si seleziona effettivamente un valore dall'elenco a discesa, la formula verrà sovrascritta dal valore selezionato, quindi quando si modifica il primo elemento nell'elenco, il valore non cambierà per le celle selezionate in modo esplicito.

+0

Grazie per questo. Come impostare tutti gli elenchi a discesa sui valori predefiniti? Ogni valore in una colonna dovrebbe assumere valori dalla colonna C. –

+0

a cui è già stata data risposta nella mia risposta: avete problemi nell'implementazione della soluzione suggerita? – Aprillion

+0

Funziona se si imposta la convalida come '= validation'. Qual è la ragione per usare '= INDICE (validazione, 1)'? –

Problemi correlati