scelta condizionata fornita per liste



  • scelta condizionata fornita per liste
    di energysim (utente non iscritto) data: 08/05/2017 10:45:56

    buongiorno a tutti.
    voglio assegnare ad x un valore che dipende dal valore di Pdis. Pedestremente l'ho fatto come nel codice sotto.

    Io però ricordo che nel fortran di buona memoria esisteva la possibilità di dare due vettori , tipo (non prendete la sintassi alla lettera, non la ricordo con precisione, era 20 anni fa... ma credo si capisca cosa intendo):

    if pdis (1,2,3) then x=(13,18,22)

    c'è qualcosa di simile in VBA?grazie fin d'ora



     
        If Pdis = 1 Then
            x = 13
        ElseIf Pdis = 2 Then
            x = 18
        ElseIf Pdis = 3 Then
            x = 22
        End If



  • di Nick (utente non iscritto) data: 08/05/2017 11:19:12

    Ti può essere utile questo esempio da adattare


     
    Option Base 1
    Dim vec As Variant
    Dim x As Integer
    Dim pdis As Integer
    
    x = Array(13, 18, 22)
    pdis = 1
    x = vec(i)



  • di Nick (utente non iscritto) data: 08/05/2017 11:20:12

    Scusa ... ovviamente è

    vec = Array(13, 18, 22)



  • di patel data: 08/05/2017 13:02:26

    lo puoi fare anche senza scomodare il VBA, prepari 2 colonne con i valori da associare e poi usi la funzione Cerca.Vert




  • array ci siamo quasi
    di energysim (utente non iscritto) data: 08/05/2017 16:38:57

    grazie per le risposte.

    @nick: sì, l'array è un avvicinamento, ma ancora manca qualcosa, perchè in effetti non ho inserito un esempio abbastanza generale: immagina che i valori di Pdis non siano 1,2,3, ma tre numeri a caso, anzi addirittura immaginiamo siano valori stringa, come "giovanni", "giacomo", "filippo".
    Quindi magari non tanti (qui sono tre, ma metti non più di 5 o 6, perciò comodamente inseribili in una lista tra parentesi), ma senza nessuna possibilità di vederci dentro qualche progressione.
    quindi sarebbe l'ideale ci fosse qualcosa come if ("giacomo", "giovanni", "filippo") then (13,18,22)

    @patel: non vorrei scrivere una tabella sul foglio, seppur semplice. Ad esempio i valori di Pdis possono essere stati assegnati tramite la lettura da un box. Tieni presenti che è un codice ormai piuttosto voluminoso e che questo caso su cui vi chiedo si presenta in parecchi punti, le tabelline cacciate in un foglio di servizio farei fatica a ricordare dove sono, mentre due liste corrispondenti nel codice mi sono molto più visibili



  • di Nick (utente non iscritto) data: 08/05/2017 17:00:00

    Se le specifiche cambiano ad ogni post, non ne usciamo più ... devi essere chiaro sin dall'inizio ...

    A questo punto, vedo un paio di soluzioni ... la "semplice" ... usi un Select Case (vedi codice alla fine) oppure usi un Dictionary, per i dettagli vedi

    h t t p s: //excelmacromastery.com/vba-dictionary/
     
    Select Case Pdis
      Case "giacomo"
         x = 13
      Case "giovanni"
         x = 18
      Case "filippo"
         x = 22
    End Select


  • select case OK
    di energysim (utente non iscritto) data: 08/05/2017 17:20:52

    In effetti mettendo 1,2,3 come possibili valori avevo suggerito un'inferenza che non c'è.
    Direi che il "select case" va bene, è leggibile e più compatto degli if.
    Grazie!
    saluti