Macro per scrivere nelle celle
Hai un problema con Excel? 
Macro per scrivere nelle celle
di Luca (utente non iscritto) data: 20/07/2014 22:41:58
Salve a tutti,
scrivo perchè ho questo problema che non riesco a risolvere.
Causa appesantimento del mio attuale file, necessiterei di una macro che scrivesse in una cella una formula, o ancora meglio, il suo valore finale.
Esempio Pratico:
Vorrei che nella Cella A1 venisse scritto =SOMMA(B1:B10) e pertanto il suo risultato; se una volta lanciata la macro io modifico per esempio B4, allora A1 cambia in quanto "ospita" la formula.
Esempio Pratico per me ottimale:
Vorrei che nella Cella A1 venisse scritto il risultato della formula =SOMMA(B1:B10), se una volta lanciata la macro io modifico per esempio B4, allora A1 NON cambia in quanto non ospita una formula
Riuscire in quanto sopra mi permetterebbe di alleggerire il file con una buona macro che "scrive" i risultati che mi servono rimuovendo tante caselle che lavorano a formule e per le quali appunto non mi serve un aggiornamento real time
Grazie a tutti!
di Textomb data: 20/07/2014 23:01:55
ciao
Ti basta scrivere una macro che nella cella A1 riporta la somma dei valori da B1:B10 senza riportare la formula nella cella ma solo il suo risultato.
Tutto qui,
notte.
Sub Somma()
Range("a1").Value = WorksheetFunction.Sum(Range("b1:b10"))
End Sub |
di Luca (utente non iscritto) data: 20/07/2014 23:09:25
Grazie della risposta, ma quello era solo un esempio... supponiamo che la funzione sia una cosa più incasinata con dei SOMMA.SE, dei SE(XCiao
di Luca (utente non iscritto) data: 20/07/2014 23:11:34
Scrivo di nuovo perchè non mi ha postato correttamente la risposta.
Ringrazio per la risposta ottenuta, però quello era solo un esempio. Avrò bisogno di scrivere stringhe di funzioni o (magari) risultati di stringhe di funzioni più complesse, come ad esempio dei SE, dei CONTA.SE, e altre cose;
Quindi necessiterei proprio una macro che mi scriva in una cella una tal funzione, o ancora meglio, il risultato dell'esecuzione di tal funzione
di Luca (utente non iscritto) data: 20/07/2014 23:25:47
Una cosa del genere, che vale anche per funzioni non standard, ma per funzioni o stringhe matematico-Logiche più strutturate
Sub Ciao()
Range("a1").Value = ***SE(A1>0;"Fare";"Non Fare")***
End Sub
Sub Ciao()
Range("a1").Value = ***CONTA(B1:B10)-(CONTA(C1:C10)/D5)***
End Sub |
di lepat (utente non iscritto) data: 21/07/2014 04:48:57
secondo me stai partendo da un punto di vista sbagliato, una volta che usi le macro è inutile ragionare con le formule, fai i tuoi calcoli ed inserisci il risultato nella cella desiderata, esattamente come ti ha indicato Textomb
di lepat (utente non iscritto) data: 21/07/2014 04:52:54
Comunque, se proprio ci tieni, puoi usare la funzione Evaluate
Range("a1").Value = Evaluate("tua formula complessa") |
di Lepat (utente non iscritto) data: 21/07/2014 06:48:38
Grazie della tua risposta Lepat, stasera provo.
Il mio "problema" è che con VBA non sono molto ferrato quindi avrei grosse difficoltà ad implementare come macro certe formule.
Intanto grazie!
di Luca (utente non iscritto) data: 21/07/2014 14:32:16
Probabilmente sono tonto io, ma non riesco:
Range("a1").Value = Evaluate("SOMMA(D1:E1)")
Non funziona, da errore #NOME?
Range("a1").Value = Evaluate("SUM(D1:E1)")
Funziona! Mi son detto ... Vorrà le formule inglesi
Range("a1").Value = Evaluate("COUNTIF(D1:E1;1)")
Non va, errore #VALORE! Nonostante in D1 c'è 1 come valore
Ovviamente non va nemmeno con CONTA.SE
E direi non mi funzionava nemmeno con gli = davanti
Pertanto non riesco a mettere nell'Evaluate delle funzioni complesse, ne in ITA ne in ENG. Ho provato anche una SE/IF ma non va
di Lucas87 data: 21/07/2014 15:10:47
Ciao
Invece del punto e virgola come separatore degli argomenti, usa la virgola
di Luca (utente non iscritto) data: 21/07/2014 17:07:01
Magia! Con la , invece che il ; funzionano parecchie cose... Faccio alcuni test e se è tutto ok spunto come risolta!
Grazie a tutti
di Luca (utente non iscritto) data: 22/07/2014 22:46:57
Ci siamo quasi!
Ora ho questo ultimo scoglio...
Prendiamo ad esempio la macro che scriverò qua sotto, che banalmente fa delle operazioni condizionate.
Ma è solo un esempio. Il problema per me si pone dal momento in cui io volessi che questa operazione venisse eseguita dalla riga 1 alla riga 20 con ovviamente le relative celle coinvolte.
Tecnicamente potrei scrivere a mano 20 righe macro mettendo A1, B1, C1 ... poi A2, B2, C2 ...
Ma mi chiedevo se c'era un modo di rendere la cosa più rapida, automatica e quindi funzionale
Grazie!
Range("A1").Value = Evaluate("=IF(B1 |
di Luca (utente non iscritto) data: 22/07/2014 22:48:33
Non mi ha preso bene il codice, lo scrivo qua:
Range("A1").Value = Evaluate("=IF(B1Range("A2").Value = Evaluate("=IF(B2Range("A3").Value = Evaluate("=IF(B3...
etc...
di Luca (utente non iscritto) data: 22/07/2014 22:53:00
Niente forse ci son problemi con alcuni caratteri di scrittura.
Ritento con una cosa banalotta, tanto il problema si è capito
Range("A1").Value = Evaluate("=SUM(B1:C1)")
Range("A2").Value = Evaluate("=SUM(B2:C2)")
Range("A3").Value = Evaluate("=SUM(B3:C3)")
...
Ovviamente la formula NON è questa, mi serve solo come esempio visivo per cercare una soluzionea rendere i numeri delle righe mobili invece che scrivere appunto tante righe
di Luca (utente non iscritto) data: 23/07/2014 16:21:03
Sistemato in altra maniera!
Grazie cmq a tutti per l aiuto
Vuoi Approfondire?