Sostituzione di alcune formule con i risultati delle formule (Microsoft Excel)
Brian ha bisogno di elaborare un foglio di lavoro prima che possa essere distribuito ad altre persone. Ciò di cui ha bisogno è eliminare la maggior parte, ma non tutte, le formule nel foglio di lavoro. Vuole scorrere tutte le celle in un intervallo selezionato di celle e, se la cella contiene una formula, controlla quella formula. Se la formula contiene un riferimento (qualsiasi riferimento) a un foglio di lavoro diverso nella cartella di lavoro corrente, la formula viene ignorata. Se la formula non contiene tale riferimento, la macro deve sostituire la formula con il risultato della formula.
Questo è un compito relativamente semplice; tutto quello che devi fare è fare in modo che il tuo passo macro approfondisca le celle e (1) scopri se la cella contiene una formula. In caso affermativo, controlla se la formula contiene un punto esclamativo. I punti esclamativi vengono utilizzati nei riferimenti alle formule, come i seguenti:
=Sheet2!A1
Quindi, se la formula contiene un punto esclamativo, puoi ignorarlo. Se non contiene un punto esclamativo, puoi sostituirlo con il suo valore.
Sub ConvertFormulas1() Dim c As Variant Dim frm As String On Error Resume Next For Each c In Selection If c.HasFormula Then frm = c.Formula If InStr(1, frm, "!") = 0 Then c.Value = c.Value End If End If Next c End Sub
C’è uno svantaggio in questo approccio: il punto esclamativo apparirà in tutte le formule esterne al foglio di lavoro corrente, comprese quelle che si trovano in altre cartelle di lavoro. Se si desidera veramente sostituire solo le formule con altri fogli di lavoro nella cartella di lavoro corrente, ma ignorare le formule che fanno riferimento a fogli su altre cartelle di lavoro, è necessario aggiungere una logica aggiuntiva. La logica diventa evidente quando si guarda a come Excel fa riferimento a quelle altre cartelle di lavoro:
=[OtherWorksheet.xls]Sheet1'!$C$9
Notare che il nome dell’altra cartella di lavoro è contenuto tra parentesi.
Pertanto, dopo aver testato il punto esclamativo (che informa che il riferimento è a un altro foglio di lavoro, è necessario verificare la presenza di una parentesi quadra sinistra. Se è presente, il riferimento non è a una cella all’interno della cartella di lavoro corrente.
Sub ConvertFormulas2() Dim c As Variant Dim OtherSheet As Boolean Dim frm As String On Error Resume Next For Each c In Selection If c.HasFormula Then frm = c.Formula OtherSheet = False If InStr(1, frm, "!") Then OtherSheet = True If InStr(1, frm, "[") Then OtherSheet = False End If End If If Not OtherSheet Then c.Value = c.Value End If End If Next c End Sub
Va sottolineato che sarebbe relativamente facile modificare la formula usata in questa macro in modo da eliminare tutti i riferimenti esterni lasciando i riferimenti al foglio di lavoro corrente sono intatti, infatti, tutto ciò che devi fare è sbarazzarti del controllo per la parentesi e poi sbarazzarti della parola chiave “Not” nella struttura che controlla la variabile OtherSheet.
_Nota: _
Se vuoi sapere come usare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili .
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (6959) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: