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].