A Julie le gustaría tener algunas celdas de entrada en una hoja de trabajo que, cuando alguien ingrese un valor, agregue automáticamente un 20% a lo que ingresó.

Por ejemplo, si alguien ingresa 200 en una de estas celdas, lo que realmente ingresa es 240.

Hay muchas formas de abordar esta tarea mediante macros.

El mejor enfoque es crear una macro que se ejecuta, automáticamente, cuando se cambia una celda en la hoja de trabajo. A continuación, puede verificar si el cambio se realizó en una de las celdas de entrada y ajustar los valores en consecuencia.

El siguiente ejemplo modifica el valor ingresado si se hizo en cualquiera de las tres celdas: A1, C3 o B8.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInput As Range     Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired     Set rInput = Range("A1, C3, B8")



Set rInt = Intersect(Target, rInput)

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

Recuerde que este es un controlador de eventos, lo que significa que se activa (en este caso) cada vez que algo cambia en la hoja de trabajo. Para utilizar esta macro, haga clic con el botón derecho en la pestaña de la hoja de trabajo y seleccione Ver código en el menú contextual resultante. Excel muestra el Editor de VB y luego puede agregar el código Worksheet_Change.

Tenga en cuenta que la clave para averiguar si el cambio se realizó en una de las tres celdas de entrada definidas es la función Intersecar. Comprueba si hay una intersección entre el rango de destino (las celdas cambiadas que activaron el controlador Worksheet_Change) y el rango rInput (sus celdas de entrada). Si lo hay, entonces rInt contendría las celdas que se intersecaron.

Luego, la macro recorre esas celdas y, si las celdas contienen valores numéricos, las multiplica por un 120%. (Multiplicar por 120% es lo mismo que aumentar el valor en 20%). Tenga en cuenta que la propiedad .EnableEvents se establece en False cuando se realiza la multiplicación; si no se tomara esta protección, entonces cada multiplicación activaría este controlador de eventos nuevamente y usted multiplicaría repetidamente (y para siempre) el valor de la celda por 120%.

Si realmente desea realizar algún otro procesamiento de los valores, como redondear a un número específico de puntos decimales o un valor entero, simplemente necesita hacer un cambio en la línea única que realmente hace la multiplicación.

Si sus celdas de entrada están en un área contigua, un mejor enfoque podría ser definir esas celdas de entrada como un rango con nombre y luego usar ese rango con nombre dentro de la macro para determinar la intersección de las celdas modificadas. De esa manera, no es necesario modificar la macro cuando o si cambia su grupo de celdas de entrada.

Para usar este enfoque, digamos que su rango de celdas de entrada es B7: B19. Seleccione esas celdas y luego, usando el cuadro de nombre en la esquina superior izquierda del área de celdas, ingrese el nombre «plus20pct». Esta acción asigna el nombre al rango. Luego puede usar ese nombre dentro de la macro.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rInt As Range     Dim rCell As Range

'change the input cell range as desired

Set rInt = Intersect(Target, Range("plus20pct"))

If Not rInt Is Nothing Then         For Each rCell In rInt             If IsNumeric(rCell) Then                 With Application                     .EnableEvents = False                     rCell = rCell * 1.2                     .EnableEvents = True                 End With             End If         Next     End If End Sub

Tenga en cuenta que el único cambio está en la forma en que se determina la intersección de las celdas: la función Intersect usa el rango «plus20pct» como parámetro. Todo lo demás funciona como antes.

Ahora que ha visto cómo hacer esto usando macros, la pregunta sigue siendo si realmente debería hacerlo usando macros. Primero, existen límites a lo que pueden hacer estas macros. Por ejemplo, ¿qué pasa si su usuario ingresa una fecha u hora en una de las celdas de entrada? Internamente, Excel maneja fechas y horas como números, lo que significa que también aumentarían en un 20%.

En segundo lugar, debe considerar qué sucede con su hoja de trabajo si alguien modifica la estructura de la hoja de trabajo agregando o eliminando filas o columnas.

Las macros utilizan referencias de celda absolutas (A1, C3 y B8) o un rango con nombre (más20pct). Si bien el rango nombrado se puede ajustar mediante la adición o eliminación de filas o columnas, las referencias de celdas absolutas no cambiarían. Por lo tanto, podría terminar con la macro verificando (y ajustando)

celdas que ya no son las celdas de entrada de datos esperadas.

En tercer lugar, digamos que alguien ingresa un valor (200) en una de sus celdas de entrada. Se incrementa automáticamente en un 20% y se convierte en 240. La persona ve este cambio y se pregunta qué sucedió, por lo que selecciona la celda y presiona F2 para comenzar a editar la celda. Antes de hacer el cambio, recuerdan que «Oh, sí; se supone que aumentará automáticamente en un 20%». Entonces, simplemente presionan Enter para aceptar el valor 240.

Sin embargo, Excel ve esto como un cambio y aumenta el 240 en un 20%, lo que resulta en 288, no lo que usted o el usuario pretendían.

Esta segunda consideración, la confusión del usuario, es el mayor problema potencial al cambiar automáticamente lo que un usuario ingresa en la hoja de trabajo. Un enfoque menos confuso sería tener un área de entrada bien definida para su libro de trabajo. El usuario coloca cifras en el área de entrada y esas cifras permanecen tal como las introduce. Luego, en otras celdas o en sus fórmulas, realiza el ajuste en un 20%.

Este enfoque de diseño (modificar el diseño de la hoja de trabajo para facilitar la entrada de datos) es potencialmente menos confuso para el usuario que cambiar automáticamente lo que ingresó en una celda de la hoja de trabajo. También elimina un riesgo inherente a cualquier libro de trabajo habilitado para macros: el usuario podría cargar el libro de trabajo sin habilitar macros, lo que garantiza que las cifras no se ajusten como se esperaba.

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

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (12684) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.