Con este tipo de macro buscamos convertir los datos provenientes de formulas en valores fijos.
Estas son útiles por ejemplo en una situación en la que los datos los obtenemos de una función aleatoria y posteriormente lo queremos utilizar para otros procesos u otras funciones a realizar sin el temor a que puedan cambiar una vez obtenidas.
Ejemplo:Conversión de fórmulas en valores
El ejemplo que presentare es de una encuesta a 20 personas en donde aleatoriamente elegiremos su género y le preguntaremos cual es la colonia de hombre que más te gusta en el caso de que salga aleatoriamente un hombre y cual es la colonia de mujer en el caso que sea una mujer.
Es por ello que una vez obtenidas aleatoriamente el género de cada persona encuestada, nosotros vamos a querer obtener estos resultados fijos para luego ingresar las respuestas de cada persona.
Primero Elaboramos nuestra tabla de 20 personas encuestadas en donde en la columna de género ingresamos la siguiente fórmula:
=ELEGIR(ALEATORIO.ENTRE(1,2),"M","F")
Esta formula nos devolverá las variables M(masculino) y F(femenino) de una forma aleatoria.
y en la columna pregunta se ingresará la siguiente fórmula:
=SI(B2="M","¿Cuál es la colonia de hombre que más les gusta?","¿Cuál es la colonia de mujer que más les gusta?")
(Para mayor visualización de la imagen, hacer click en la misma)
Es por ello que a partir de los datos aleatorios nosotros vamos a querer quedarnos con los datos obtenidos en la columna género, es decir la fórmula ingresada desaparecerá.
El código que utilizaremos es el siguiente:
Sub Macroejem()
Dim Rango As Range
Dim celda As Range
Select Case MsgBox("NO se puede deshacer esta accion." & "Desea guardar este libro?", vbYesNoCancel)
Case Is = vbYes
ThisWorkbook.Save
Case Is = vbCancel
Exit Sub
End Select
Set Rango = Selection
For Each celda In Rango
If celda.HasFormula Then
celda.Formula = celda.Value
End If
Next celda
End Sub
Primero se declara las variables como range, luego al comenzar con la macro aparecerá un cuadro preguntándonos si queremos guardar el documento antes de realizar la macro, ya que esta acción es irreversible.
Apareciendo el siguiente mensaje:
(Para mayor visualización de la imagen, hacer click en la misma)
Luego se trabajará con el rango de celdas previamente seleccionado, y emplearemos la función Each para obtener el bucle leyendo cada celda de nuestro rango.
Así con la función if verificamos si cada celda tiene fórmula con la propiedad HasFormula, y si esta información es correcta, entonces pasará a convertir la propiedad de la celda que en este caso es Formula en su respectivo valor (value), como se indica en el código propuesto.
Por: Andrea Mendoza Ames
22/02/2017 a las 1:16 pm
hola, como hago para aplicar ese macro pero solo en un rango de celdas?
14/05/2019 a las 2:59 pm
Tengo una duda:
Si deseo que solamente las formulas contenidas en las celdas de un cierto rango en específico (aquellas celdas en las que la fórmula ya arrojó un valor) se conviertan en valores fijos automáticamente al momento de GUARDAR el Libro, qué MACRO podría usar?...
Me interesa que el usuario no tenga que preocuparse de convertir fórmulas a valores cada vez que utilice el Libro, y que los valores calculados por la fórmulas no se vean afectados retroactivamente cuando la base de datos se modifique.
Tengo mucho tiempo intentado lograrlo!
Gracias de antemano...