Reemplazo de algunas fórmulas con los resultados de la fórmula (Microsoft Excel)
Brian tiene la necesidad de procesar una hoja de trabajo antes de poder entregarla a otras personas. Lo que necesita es eliminar la mayoría, pero no todas, las fórmulas de la hoja de trabajo. Quiere recorrer todas las celdas en un rango de celdas seleccionado y, si la celda contiene una fórmula, verifique esa fórmula. Si la fórmula contiene una referencia (cualquier referencia) a una hoja de trabajo diferente en el libro de trabajo actual, entonces la fórmula se ignora. Si la fórmula no contiene dicha referencia, entonces la macro debe reemplazar la fórmula con el resultado de la fórmula.
Ésta es una tarea relativamente sencilla; todo lo que necesita hacer es tener su macro paso a través de las celdas y (1) averiguar si la celda contiene una fórmula. Si es así, compruebe si la fórmula contiene un signo de exclamación. Los signos de exclamación se utilizan en referencias a fórmulas, como las siguientes:
=Sheet2!A1
Entonces, si la fórmula contiene un signo de exclamación, puede ignorarlo. Si no contiene un signo de exclamación, puede reemplazarlo por su valor.
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
Hay un inconveniente en este enfoque: el signo de exclamación aparecerá en todas las fórmulas externas a la hoja de trabajo actual, incluidas las que se encuentran en otros libros de trabajo. Si realmente solo desea reemplazar fórmulas a otras hojas de trabajo en el libro de trabajo actual, pero ignora las fórmulas que hacen referencia a las hojas de otros libros de trabajo, entonces necesita agregar algo de lógica adicional. La lógica se hace evidente cuando observa cómo Excel hace referencia a esos otros libros de trabajo:
=[OtherWorksheet.xls]Sheet1'!$C$9
Tenga en cuenta que el nombre del otro libro se incluye entre corchetes.
Por lo tanto, después de probar el signo de exclamación (que le informa que la referencia es a otra hoja de trabajo, debe verificar la presencia de un corchete izquierdo. Si está allí, entonces la referencia no es a una celda dentro del libro actual.
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
Debería señalarse que sería relativamente fácil modificar la fórmula utilizada en esta macro para eliminar todas las referencias externas y dejar las referencias a la hoja de trabajo actual están intactas. De hecho, todo lo que necesita hacer es deshacerse de la verificación del corchete y luego deshacerse de la palabra clave «No» en la estructura que verifica la variable OtherSheet.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil .
`enlace: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en un nueva pestaña del navegador] `.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (6959) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:
link: / excelribbon-Replacing_Some_Formulas_with_the_Formula_Results [Reemplazo de algunas fórmulas con los resultados de la fórmula]
.