Excel e gli applicativi Microsoft Office Formula che restituisce valori di testo

Login Registrati
Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #8767 Score: 0 | Risposta

    thunder
    Partecipante

      Ciao,

       

      di seguito il mio quesito:

      Dati

      Nella colonna "A" sono elencati i nomi dei personaggi, nella colonna "B" la voce controllo e nella colonna "C" i giocatori con cui hanno giocato i personaggi. Nella colonna E sono riportati in maniera univoca i nomi dei personaggi.

      Obiettivo

      Nella colonna "F" (a partire dalla cella F2) devono risultare i nomi dei giocatori con cui hanno giocato i personaggi. Tra ogni personaggio dovrei andare a capo. Aggiungo che la formula dovrebbe cercare i giocatori solo se nella colonna B si verifica la condizione "OK"   In pratica è una tabella uno a molti. 

      Sto cercando una formula che riesca a svolgere la richiesta.

      Allego il file di esempio con il risultato cercato (colonna "F"). Specifico nella mia versione di Excel non ho il PIU.SE

      Grazie in anticipo

       

      Allegati:
      You must be logged in to view attached files.
      #8773 Score: 0 | Risposta

      thunder
      Partecipante

        ho provato ad inserire la seguente formula:

         

        =INDICE(A2:C18;CONFRONTA(1;(A2:A18=E2)*(B2:B18="OK");0);3)

         

        il problema è che mi restituisce solo un valore.

        #8775 Score: 1 | Risposta

        vecchio frac
        Senior Moderator
          238 pts

          Solo formule? Niente VBA?

          Option Explicit
          
          Sub group()
          Dim cn As Object
          Dim rs As Object
          Dim rstmp As Object
          Dim s As String, m As String
          Dim j As Long, k As Long, c As Long
          Dim v As Variant
          
          Const adOpenStatic = 3
          Const adLockOptimistic = 3
          Const adCmdText = &H1
          
              s = ThisWorkbook.Path & "\temporary.xlsx"
              ThisWorkbook.SaveCopyAs s
              
              Set cn = CreateObject("ADODB.Connection")
              Set rs = CreateObject("ADODB.Recordset")
              Set rstmp = CreateObject("ADODB.Recordset")
              
              cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                  "Data Source=" & s & ";Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"
              
              rs.Open "SELECT DISTINCT Personaggio FROM [Foglio1$A1:C18]", _
                  cn, adOpenStatic, adLockOptimistic, adCmdText
                  
              Dim i As Integer
              
              j = 1
              
              Do Until rs.EOF
                  Cells(j, "E") = rs("Personaggio")
                  m = ""
                  rstmp.Open "SELECT DISTINCT Giocatori FROM [Foglio1$A1:C18] WHERE Personaggio = '" & rs("Personaggio") & "'", _
                          cn, adOpenStatic, adLockOptimistic, adCmdText
                  m = ""
                  Do Until rstmp.EOF
                      m = m & rstmp("Giocatori") & vbLf
                      rstmp.movenext
                  Loop
                  m = Left(m, Len(m) - 1)
                  Cells(j, "F") = m
                  rstmp.Close
                  j = j + 1
                  rs.movenext
              Loop
              
              rs.Close
              cn.Close
              Kill s
          End Sub
          #8824 Score: 0 | Risposta

          thunder
          Partecipante

            mi inchino al VBA  (questa è proprio fuori dalle mie capacità per ora)

            Ti chiedo solo un altro paio di cose se posso.. A volte ho caratteri con l'apice tipo pippo' e mi da errore di sintassi. 

            E' possibile fare questa operazione solo per i valori che nella colonna "B" (controllo) riportano la stringa "OK"?

            Grazie!

            #8833 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              In verità ho adattato al tuo caso il codice che uso sempre in questi casi. Infatti sono dichiarate, ma non usate, diverse variabili in più. Comunque se vuoi studiartelo è un codice interessante e non è neanche troppo "oltre".

              Il problema dell'apice persiste e si risolve efficacemente con l'uso delle query parametriche, ma nel caso più semplice basta fare una piccola modifica, sostituendo l'apice singolo con due apici:

              m = m & replace(rstmp("Giocatori"), "'", "''") & vbLf
              #8834 Score: 1 | Risposta

              vecchio frac
              Senior Moderator
                238 pts

                thunder ha scritto:

                solo per i valori che nella colonna "B" (controllo) riportano la stringa "OK"?

                Ah sì, questa cosa mi era sfuggita. Basta mettere la clausola nell'istruzione SELECT:

                rstmp.Open "SELECT DISTINCT Giocatori FROM [Foglio1$A1:C18] WHERE Controllo Like 'Ok' And Personaggio = '" & rs("Personaggio") & "'", _
                cn, adOpenStatic, adLockOptimistic, adCmdText

                 

                #8849 Score: 0 | Risposta

                thunder
                Partecipante

                  Ciao1

                   

                  dunque ho provato a sostituire la prima riga di codice per il discorso degli apici ma continua a darmi errore di sintassi.

                  Per provare la parte della colonna "B" (Ok) ho inserito la clausola ma mi da errore <em>" Chiamata di routine o argomenti non validi"  </em>presso

                  m = Left(m, Len(m) - 1)
                Login Registrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: Formula che restituisce valori di testo
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni: