2012-06-06 13 views
23

Ho una cartella di lavoro con 2 fogli di lavoro.Elenco a discesa di Excel con coppie nome/valore

"Sheet2" ha due colonne:

| A |  B  | 
+---------+---------------+ 
| code1 | description 1 | 
| code2 | Descr 2  | 

Sheet1 contiene più colonne, uno dei quali (colonna D) fa codice. In questa colonna ho bisogno di un "drop box", che cosa

  • mostrerà colonna Foglio2 B (le descrizioni), e quando l'utente seleziona una descrizione
  • entrerò il code dal Col:! A.

È possibile eseguire without additional helper column in Sheet1? (Excel 2010)

Quindi, hanno bisogno di qualcosa di ciò che è morto semplice in html:

<select> 
    <option value="code1">Description 1</option> 
    <option value="code2">Descr 2</option> 
</select> 

quando quando l'utente seleziona "Descr 2", la forma GET "code2".

Questa domanda probabilmente è un duplicato - ma non sono sicuro - a: How to create dropdown with multiple columns in excel, ma l'unica risposta ad essa mi punta a un external site dove la soluzione è per un altro problema.

Aggiunto uno screenshot per la spiegazione più precisa: enter image description here

risposta

11

Sembra Data Validation (consentire List) in combinazione con VLOOKUP farà quello che vuoi.

Sul foglio 2 impostare la propria descrizione/lista di codici. Rendilo un intervallo denominato (aiuta a evitare problemi di riferimento circolari).

Nel Foglio 1, nella colonna della descrizione, utilizzare Convalida dati per creare elenchi a discesa che fanno riferimento alla colonna di descrizione dell'elenco. Nella colonna del codice utilizzare la funzione CERCA.VERT, escludendo il valore dell'elenco a discesa.

=IF(B4="", "", VLOOKUP(B4, FruitList, 2, FALSE)) 

Aggiornato -

sto iniziando a vedere che cosa si intende per "senza una colonna di aiuto", ma non sono sicuro che si può ottenere esattamente quello che vuoi. Un fatto del design di Excel: ciò che vedi è ciò che ottieni, cioè il valore visualizzato nella cella è il valore effettivo di quella cella. Non è possibile avere una cella per visualizzare un valore ma "contenere" un altro valore. Una cosa del genere è "dead simple" in HTML, ma un controllo HTML non è costruito per lo stesso scopo di una cella in un foglio di calcolo. Sono due cose allo stesso tempo: un valore e una presentazione dell'interfaccia utente di quel valore. Una cella del foglio di calcolo può contenere un modo per determinare un valore (elenco a discesa, formula, ecc.) Ma qualunque valore raggiunga sarà il valore che mostra.

Excel supporta forme con elementi come caselle combinate ma credo che il valore venga comunque emesso in un'altra cella.

L'approccio abituale consiste nell'utilizzare la convalida dei dati per creare un elenco a discesa e una colonna separata utilizzando CERCA.VERT per il codice. Se davvero non puoi avere un'altra colonna per contenere il codice, allora non sono sicuro di cosa dirti. Dipenderà da come i dati devono essere consumati; stai cercando di ottenere una stampa, o il foglio viene elaborato da un altro programma?

Update 2

Se sei veramente intenzionato a non utilizzare una colonna codice separato si può essere in grado di utilizzare una tecnica casella combinata come parzialmente qui descritto:

http://www.contextures.com/xlDataVal10.html

Sarebbe complicato. Quello che dovresti fare è (a) ottenere la casella combinata da mostrare quando l'utente seleziona una delle celle nella colonna D, e (b) regola dinamicamente gli elementi di visualizzazione della scatola. Significherebbe codice VBA e non sono sicuro al 100% che sia possibile. Certamente non sembra valga la pena.

+0

non riesce a farla funzionare, così aggiunto una schermata in la mia domanda. – jm666

+1

Un'opzione consisterebbe nel disporre di un foglio di inserimento dati e di un foglio valori dei dati, in modo da utilizzare la lista valori nella schermata di immissione per creare il proprio elenco a discesa dell'utente, ma sul foglio dei valori si utilizza VLookup per convertire il valore user-friendly nel tuo valore di dati anche se questo è un dolore così la maggior parte della gente lo fa sullo stesso foglio ma usa una colonna hiddent per il campo valore – MikeT

+1

Nota aggiuntiva: dovresti scambiare colonna A & B round per un VLookup per funzionare – MikeT

8

Semplice! Ecco cosa otterremo!

enter image description here

3 Passi Solo:

  1. Definire una gamma da utilizzare come valore di ricerca

  2. Creare l'elenco a discesa

  3. Incolla in qualche codice


Fase 1: Setup Sheet2 come questo e definire un intervallo denominato come _descrLookup:

define a named range for the VLookup

(Highlight -> Right-Click -> "Define Name...") 

Questa è un passaggio facoltativo, ma rende solo facile da seguire per il passaggio 3.



Fase 2: In Sheet1, creare la discesa utilizzando Data Validation e utilizzare i valori desiderati per essere mostrato nel menu a discesa come sorgente.In questo esempio è Sheet2 A2:A4 (vedi immagine sopra):

Set data validation to the source from Sheet 2

(Data -> Data Validation) 



Fase 3: aggiungere del codice VBA per Sheet1:

(Right-Click the tab Sheet1 -> View Code) 

incollare questo nella codice finestra per Sheet1:

Private Sub Worksheet_Change(ByVal Target As Range) 
    selectedVal = Target.Value 

    If Target.Column = 4 Then 
     selectedNum = Application.VLookup(selectedVal, Worksheets("Sheet2").Range("_descrLookup"), 2, False) 

     If Not IsError(selectedNum) Then 
      Target.Value = selectedNum 
     End If 

    End If 
End Sub 
+0

Grazie , Purtroppo non riesco a provare la soluzione perché in Excel 2016 (15.3) per Mac OS X manca la macro-modifica di VisualBasic. :(+1 in ogni caso, perché il tuo screenshot mostra cosa intendo :) :) – jm666

+1

Oh no! Hai la scheda dello sviluppatore? In caso contrario, puoi fare clic sull'icona dell'ingranaggio in alto e accedere a Preferenze barra multifunzione e attivarla lì. Spero possa aiutare! – elektrykalAJ

1

sono stato in grado di accendere la scheda Sviluppo in Excel 2016 (15.33) per Mac OS X utilizzando le seguenti operazioni:

  1. Nel menu selezionare Excel-> Preferenze
  2. In la sezione diAuthoring, fare clic su Visualizza
  3. Nella parte inferiore della finestra di dialogo, selezionare la scheda Developer casella di controllo

View dialog from Excel 2016 (15.33) for Mac OS X

  1. La scheda Sviluppo è ora visibile in Excel

Excel main screen with Developer tab

+0

Sì, la scheda Sviluppatore è qui, ma hai provato a inserire una macro VB? Non è ancora possibile. Il "lavoro è in corso", come è [descritto qui] (https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_mac/visual-basic-support-in-mac-2016/ 4afbba04-4435-4970-8b02-40da006a590e) e [anche qui] (https://excel.uservoice.com/forums/304933-excel-for-mac/suggestions/9098431-bring-back-a-fully-functional- vbe-visual-basic-ed) – jm666

+0

Il VB Macro ha funzionato per me sul mio Mac con Excel versione 15.33. –

+0

È fantastico. Ho solo 15.13.4 e non riesco a inserire alcuna macro VB. L'editor si apre, ma non consente l'inserimento di alcuna macro. Hai bisogno di fare l'aggiornamento. Grazie. – jm666

Problemi correlati