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 Risposta
    thunder
    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 Risposta
      thunder
      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 Risposta

        vecchio frac
        Moderatore
          23 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
          thunder
          #8824 Risposta
          thunder
          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 Risposta

            vecchio frac
            Moderatore
              23 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 Risposta

              vecchio frac
              Moderatore
                23 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

                 

                thunder
                #8849 Risposta
                thunder
                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:



                vecchio frac - 830 risposte

                albatros54
                albatros54 - 516 risposte

                Marius44
                Marius44 - 282 risposte

                patel
                patel - 264 risposte

                Luca73
                Luca73 - 235 risposte