| | Post: 222 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
01/08/2018 14:41 | |
Ciao a tutti,
ho una formula folle...ma funzionante :
::=SE(Correttore!C5="A";1;SE(Correttore!C5="B";2;SE(Correttore!C5="C";3;SE(Correttore!C5="D";4))))&SE(Correttore!D5="A";1;SE(Correttore!D5="B";2;SE(Correttore!D5="C";3;SE(Correttore!D5="D";4))))&SE(Correttore!E5="A";1;SE(Correttore!E5="B";2;SE(Correttore!E5="C";3;SE(Correttore!E5="D";4))))&SE(Correttore!F5="A";1;SE(Correttore!F5="B";2;SE(Correttore!F5="C";3;SE(Correttore!F5="D";4))))&SE(Correttore!G5="A";1;SE(Correttore!G5="B";2;SE(Correttore!G5="C";3;SE(Correttore!G5="D";4))))&SE(Correttore!H5="A";1;SE(Correttore!H5="B";2;SE(Correttore!H5="C";3;SE(Correttore!H5="D";4))))&SE(Correttore!I5="A";1;SE(Correttore!I5="B";2;SE(Correttore!I5="C";3;SE(Correttore!I5="D";4))))&SE(Correttore!J5="A";1;SE(Correttore!J5="B";2;SE(Correttore!J5="C";3;SE(Correttore!J5="D";4))))&SE(Correttore!K5="A";1;SE(Correttore!K5="B";2;SE(Correttore!K5="C";3;SE(Correttore!K5="D";4))))&SE(Correttore!L5="A";1;SE(Correttore!L5="B";2;SE(Correttore!L5="C";3;SE(Correttore!L5="D";4))))
che vorrei inserire con una macro:
::Sub Risultatotest()
Sheets("Test5").Range("A86").FormulaLocal= "=SE(Correttore!C5="A";1;SE(Correttore!C5="B";2;SE(Correttore!C5="C";3;SE(Correttore!C5="D";4))))&SE(Correttore!D5="A";1;SE(Correttore!D5="B";2;SE(Correttore!D5="C";3;SE(Correttore!D5="D";4))))&SE(Correttore!E5="A";1;SE(Correttore!E5="B";2;SE(Correttore!E5="C";3;SE(Correttore!E5="D";4))))&SE(Correttore!F5="A";1;SE(Correttore!F5="B";2;SE(Correttore!F5="C";3;SE(Correttore!F5="D";4))))&SE(Correttore!G5="A";1;SE(Correttore!G5="B";2;SE(Correttore!G5="C";3;SE(Correttore!G5="D";4))))&SE(Correttore!H5="A";1;SE(Correttore!H5="B";2;SE(Correttore!H5="C";3;SE(Correttore!H5="D";4))))&SE(Correttore!I5="A";1;SE(Correttore!I5="B";2;SE(Correttore!I5="C";3;SE(Correttore!I5="D";4))))&SE(Correttore!J5="A";1;SE(Correttore!J5="B";2;SE(Correttore!J5="C";3;SE(Correttore!J5="D";4))))&SE(Correttore!K5="A";1;SE(Correttore!K5="B";2;SE(Correttore!K5="C";3;SE(Correttore!K5="D";4))))&SE(Correttore!L5="A";1;SE(Correttore!L5="B";2;SE(Correttore!L5="C";3;SE(Correttore!L5="D";4))))"
End Sub]
Ma ottengo ERRORE di SINTASSI
Dove sbaglio?
Grazie in anticipo
Gene
PS Non allego file perchè ritengo che sia un semplice errore dello scrivente. Se necessita lo posto velocemente. [Modificato da BG66 01/08/2018 14:43] BG66
Excel 2010 |
|
| | Post: 3.627 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Master | 2013 | | OFFLINE | |
|
01/08/2018 15:17 | |
Il problema sono le virgolette "" che usi nella formula, >>>.FormulaLocal = "=formula"
Siccome usi .FormulaLocal= "=SE(Correttore!C5=" qui il VBA interrompe la formula. Dovresti modificarla in
.FormulaLocal = "=SE(Correttore!C5=" & "A" & ";1;SE(Correttore!C5=" & "B" &";2;ecc ecc))"
Ho tentato d'inserirla come .FormulaR1C1 e c'è pure un problema di lunghezza.
Ps. ho rinominato il foglio Correttore in C. Funziona
Oppure nel foglio Correttore dai un nome a tutte le celle, la cella C5 Ex CC, la cella D5 Ex DD ecc ecc e la formula diventa similare =SE(CC="A";1;SE(CC="B";2;SE(CC="C";3;SE(CC="D";4;""))))&SE(DD="A";1;SE(DD="B";2;SE(DD="C";3;SE(DD="D";4;""))))ecc ecc [Modificato da raffaele1953 01/08/2018 16:26] Excel 2013 |
| | Post: 1.898 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
01/08/2018 16:59 | |
Ciao
solo per ricordare che in vba (formulalocal) le stringhe vanno racchiuse tra 4 apici, cioè:
...SE(Correttore!C5=""A"";1;........
ma vista la lunghezza credo avrai problemi sul max di caratteri per istruzione. (a meno di mandarla a capo cosa non facile).
Segui il consiglio di Raffaele..(saluti)
[Modificato da dodo47 01/08/2018 17:17] Domenico
Win 10 - Excel 2016 |
| | Post: 222 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
01/08/2018 21:03 | |
Ciao Raffaele,
il foglio "correttore" nel file master viene cancellato e ricreato ad ogni nuovo test quindi devo per forza "lavorarci" successivamente.
Quindi ho provato a modificare la macro usando il tuo primo consiglio ma lanciando la macro ottengo come risultato:
[IMG]http:// [/IMG]
Allego file usato per le prove.
Grazie per l'aiuto.
Gene [Modificato da BG66 01/08/2018 21:04] BG66
Excel 2010 |
| | Post: 650 | Registrato il: 02/08/2015
| Utente Senior | Excel 2013 | | OFFLINE |
|
01/08/2018 21:06 | |
Ciao a tutti,
@BG
ti consiglio di sotituire i doppi apici interni alla formula con un altro carattere che non si usa quasi mai (esempio il cacelletto) e poi risostituisci tutto quando assegni la formula.
Per capirci....
Supponendo che in A1 metti quella formula, in A2 scriverai:
=SOSTITUISCI(A1;CODICE.CARATT(34);"#")
dopo copi/incolli SOLO VALORI in un altra cella per ottenere un stringa che non causi errori di sintassi.
Quindi potrai usare come codice:
Sub prova()
Dim MyFormula As String
MyFormula = "=SE(Correttore!C5=#A#;1;SE(Correttore!C5=#B#;2;SE(Correttore!C5=#C#;3;SE(Correttore!C5=#D#;4))))&SE(Correttore!D5=#A#;1;SE(Correttore!D5=#B#;2;SE(Correttore!D5=#C#;3;SE(Correttore!D5=#D#;4))))&SE(Correttore!E5=#A#;1;SE(Correttore!E5=#B#;2;SE(Correttore!E5=#C#;3;SE(Correttore!E5=#D#;4))))&SE(Correttore!F5=#A#;1;SE(Correttore!F5=#B#;2;SE(Correttore!F5=#C#;3;SE(Correttore!F5=#D#;4))))&SE(Correttore!G5=#A#;1;SE(Correttore!G5=#B#;2;SE(Correttore!G5=#C#;3;SE(Correttore!G5=#D#;4))))&SE(Correttore!H5=#A#;1;SE(Correttore!H5=#B#;2;SE(Correttore!H5=#C#;3;SE(Correttore!H5=#D#;4))))&SE(Correttore!I5=#A#;1;SE(Correttore!I5=#B#;2;SE(Correttore!I5=#C#;3;SE(Correttore!I5=#D#;4))))&SE(Correttore!J5=#A#;1;SE(Correttore!J5=#B#;2;SE(Correttore!J5=#C#;3;SE(Correttore!J5=#D#;4))))&SE(Correttore!K5=#A#;1;SE(Correttore!K5=#B#;2;SE(Correttore!K5=#C#;3;SE(Correttore!K5=#D#;4))))&SE(Correttore!L5=#A#;1;SE(Correttore!L5=#B#;2;SE(Correttore!L5=#C#;3;SE(Correttore!L5=#D#;4))))"
Sheets("Test5").Range("A86").FormulaLocal = Replace(MyFormula, "#", Chr(34))
End Sub
oppure puoi fare tutto tramite codice:
Sub prova()
Dim MyFormula As String
MyFormula = Replace(Range("A1").FormulaLocal, Chr(34), "#")
Sheets("Test5").Range("A86").FormulaLocal = Replace(MyFormula, "#", Chr(34))
End Sub
Ciao
Tore [Modificato da cromagno 01/08/2018 21:07]
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare." |
| | Post: 223 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
01/08/2018 21:12 | |
Ciao Tore,
ci siamo accavallati.
Tenuto conto di quanto ho aggiunto come informazione ( macro esistente che elimina e ricrea sia il Foglio Test5 che il correttore ad ogni nuovo quiz)il tuo consiglio devo attuarlo in un foglio che non "sparisce" per poi copiarlo in Test5??
In pratica io pensavo di lanciare le macro esistente e solo dopo che la situazione era "stabile" aggiungere CALL Sub RisultatoTest.
Grazie
Gene [Modificato da BG66 01/08/2018 21:14] BG66
Excel 2010 |
| | Post: 651 | Registrato il: 02/08/2015
| Utente Senior | Excel 2013 | | OFFLINE |
|
01/08/2018 21:26 | |
BG66, 01/08/2018 21.12:
il tuo consiglio devo attuarlo in un foglio che non "sparisce" per poi copiarlo in Test5??
Ciao,
no....
nella prima opzione che ti ho proposto, la "conversione" la fai su un foglio a tua scelta ed assegni alla variabile MyFormula direttamente la stringa/formula.... quindi del foglio dove hai fatto la conversione, puoi farne quello che vuoi, anche eliminarlo.
[Modificato da cromagno 01/08/2018 21:51]
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare." |
| | Post: 224 | Registrato il: 13/12/2015
| Città: MILANO | Età: 58 | Utente Junior | 2010 | | OFFLINE | |
|
01/08/2018 21:44 | |
Ciao.
Capito..applicato..[RISOLTO]
Gene BG66
Excel 2010 |
| | Post: 3.629 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Master | 2013 | | OFFLINE | |
|
01/08/2018 22:01 | |
Edit vedo che hai risolto
Se permetti suggerisco di complettare la formula in =SE(Correttore!C5="A";1;SE(Correttore!C5="B";2;SE(Correttore!C5="C";3;SE(Correttore!C5="D";4;""))))& ecc ecc nel caso fosse vuota appare FALSO.
Ps. La soluzione di dare i nomi alle celle C5:L5 mi sembra la miglior soluzione per accorciare la formula
Come scritto basterebbe usare un nome del foglio con meno caratteri
Se Tu rinomini il foglio Correttore in X, vai sulla Tua formula, la vedrai similare =SE('X'!C5="A";1;SE('X'!C5="B";ecc ecc
Copy la Formula e la incolli in un TXT, sostituisci "A" con ""A"". sostituisci "B" con ""B"", idem per "C" e "D"
Ora nel codice Sheets("Test5").Range("A86").FormulaLocal = "=inserisci la formula del TXT tra le virgolette"
Se non puoi rinominare il foglio, faglielo fare al VBA. Rinomina,incolla la formula e rinomina nuovamente vb Sub Macro1()
Sheets("Correttore").Name = "C"
Sheets("Test5").Range("A86").FormulaLocal = "=SE('C'!C5=""A"";1;SE('C'!C5=""B"";2;SE('C'!C5=""C"";3;SE('C'!C5=""D"";4))))&SE('C'!D5=""A"";1;SE('C'!D5=""B"";2;SE('C'!D5=""C"";3;SE('C'!D5=""D"";4))))&SE('C'!E5=""A"";1;SE('C'!E5=""B"";2;SE('C'!E5=""C"";3;SE('C'!E5=""D"";4))))&SE('C'!F5=""A"";1;SE('C'!F5=""B"";2;SE('C'!F5=""C"";3;SE('C'!F5=""D"";4))))&SE('C'!G5=""A"";1;SE('C'!G5=""B"";2;SE('C'!G5=""C"";3;SE('C'!G5=""D"";4))))&SE('C'!H5=""A"";1;SE('C'!H5=""B"";2;SE('C'!H5=""C"";3;SE('C'!H5=""D"";4))))&SE('C'!I5=""A"";1;SE('C'!I5=""B"";2;SE('C'!I5=""C"";3;SE('C'!I5=""D"";4))))&SE('C'!J5=""A"";1;SE('C'!J5=""B"";2;SE('C'!J5=""C"";3;SE('C'!J5=""D"";4))))&SE('C'!K5=""A"";1;SE('C'!K5=""B"";2;SE('C'!K5=""C"";3;SE('C'!K5=""D"";4))))&SE('C'!L5=""A"";1;SE('C'!L5=""B"";2;SE('C'!L5=""C"";3;SE('C'!L5=""D"";4))))"
Sheets("C").Name = "Correttore"
End Sub [Modificato da raffaele1953 01/08/2018 22:26] Excel 2013 |
|
|