› Excel e gli applicativi Microsoft Office › Formula che restituisce valori di testo
-
AutoreArticoli
-
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.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.
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
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!
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
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
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)
-
AutoreArticoli