
¿Es posible sustituir fórmulas fácilmente en Excel?
Tengo una hoja de trabajo similar al ejemplo siguiente (aunque más compleja, de ahí la necesidad de alguna función en Excel, si existe alguna)
Lo que quiero hacer es reemplazar la función de ventas totales con los valores de entrada reales, en lugar de fórmulas.
F6+I6+L6+O6 = F9 + L9
F4+F5+I4+I5+L4+L5+O4+O5 = F6+I6+L6+O6
that is
F9 + L9 becomes F4+F5+I4+I5+L4+L5+O4+O5
Espero que entiendas lo que busco
Respuesta1
Escribí un código rápido que debería hacer lo que quieras.
Básicamente, verifica si una celda contiene una fórmula y, si la contiene, reemplaza todas las instancias en las que se hace referencia a esa celda con esa fórmula.
Una vez que ha revisado la hoja, si encuentra algún reemplazo, vuelve a realizar un bucle (en realidad no estoy seguro de que lo necesite, pero fue más fácil de colocar). Tampoco tengo idea de qué tan rápido se ejecutará esto en hojas de cálculo complejas.
Tenga en cuenta que trata $A$1,$A1,A$1 y A1 como lo mismo y no tiene forma de determinar si debería haber algunas celdas congeladas en la referencia.
Sub replace_formulas()
Dim cell_count As Long, flag As Boolean
Do
flag = False
For Each c In ActiveSheet.UsedRange
If c.HasFormula Then
'count number of replacements
cell_count = Application.WorksheetFunction.CountIf(Cells, c.Address) + _
Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "")) + _
Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "", 1, 1)) + _
Application.WorksheetFunction.CountIf(Cells, "$" & Replace(c.Address, "$", ""))
'If there is at least one replacement loop through all the cells after this one
If cell_count > 0 Then flag = True
'Replace cell references with and without $ ($A$1,$A1,A$1,A1)
Cells.Replace What:=c.Address, Replacement:="c.formula", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=Replace(c.Address, "$", "", 1, 1), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:="$" & Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End If
Next
Loop While flag = True
End Sub
Respuesta2
Es posible que tengas que hacerlo manualmente, pero hay una función que te ayudará: rastrear precedentes (en la pestaña Fórmulas en Excel 2013).
Esto agregará flechas que muestran dónde se origina la fórmula que ha seleccionado, por lo que si seleccionó las ventas totales en la columna J en su ejemplo y hizo clic en rastrear precedentes, se dibujarán flechas desde F9 y L9 hacia ella.