Distribuya un valor entre celdas con VBA

Índice
  1. ¿Cuándo utilizar la macro?
  2. El código VBA
  3. Cómo usar el código

Hoy quiero compartir con ustedes una macro realmente útil para ahorrar tiempo. Es una macro para distribuir un valor entre celdas. Ahora que lo he escrito, estoy empezando a obtener los beneficios y, con suerte, tú también podrás hacerlo.

Descargue el archivo de ejemplo: únase al programa Insiders gratuito y obtenga acceso al archivo de ejemplo utilizado para esta publicación.

Nombre de archivo: 0005 Valor de distribución entre celdas.zip

Tener acceso

¿Cuándo utilizar la macro?

Digamos que tienes una lista de artículos individuales, que suman $210. Su jefe quiere agregar $21 adicionales para contingencias. ¿Cómo vas a hacer que el total sea igual a $231? Hay algunas opciones:

  • Agregue una línea de ajuste con +$21
  • Identifique líneas específicas que se pueden aumentar para lograr el total de $231.
  • Distribuya el aumento de $21 de manera equitativa en todas las celdas.
  • Distribuya el aumento de $21 entre cada artículo de manera que cada artículo reciba una proporción justa.

El siguiente código VBA aborda la cuarta opción. Podrías hacerlo manualmente usando fórmulas, lo que llevaría mucho tiempo. En cambio, el método VBA siguiente tarda sólo 2 segundos.

¡ADVERTENCIA! – Las macros no se pueden deshacer. Antes de usar el código de esta publicación, asegúrese de que funcione de la manera deseada.

El código VBA

Ingrese el siguiente código en un módulo estándar.

Sub ApportionValueAcrossCells()Dim apportionValue As DoubleDim keepAsFormula As LongDim total As DoubleDim c As RangeDim formulaString As String'Obtener el total total existente = Application.WorksheetFunction.Sum(Selection)'Compruebe que la suma de las celdas seleccionadas no sea ceroSi total = 0 Entonces aparecerá el mensaje MsgBox :="Las celdas seleccionadas no deben sumar cero", _ Title:="Valor de reparto"Exit SubEnd If'Obtener el valor a repartirapportionValue = Application.InputBox(Prompt:="Valor a repartir:", _Title:="Valor de reparto ", Tipo:=1)'El usuario hizo clic en CancelarSi apportionValue = False Luego salga de Sub'Obtenga el valor booleano para mantener la fórmula o codifique el resultadokeepAsFormula = MsgBox("¿Mantener fórmula?", vbYesNo)'Recorra cada celda en la selección para cada c En Selección If IsNumeric(c.Value) Then 'Calcula el resultado de la celda formulaString = c.Formula "+(" apportionValue _ "/" total "*" c.Value ")" If Left(formulaString, 1) " =" Entonces _ formulaString = "=" formulaString 'Ingresa la fórmula en la celda c.Formula = formulaString 'Recalcula la celda activa ActiveCell.Calculate 'Si keepAsFormula es no, entonces codifica el resultado. Si keepAsFormula = vbNo Entonces c.Value = c .Valor Fin Si Fin Si Siguiente cEnd Sub

Cómo usar el código

Para utilizar la macro, siga estos pasos:

  1. Seleccione las celdas que contienen los valores actuales.
    Seleccione celdas antes de ejecutar la macro
  2. Ejecute la macro
  3. Aparecerá un cuadro de entrada, ingrese el valor por el que desea ajustar el total y luego haga clic en Aceptar
    Distribuir un valor entre celdas - pantalla de entrada
  4. Aparecerá un cuadro de mensaje. La macro puede pegar los nuevos valores o incluir la fórmula. Haz clic en el botón de tu preferencia.
    Mantener cuadro de mensaje de opción de fórmula
  5. ¡Ta-dah! Los valores se actualizarán. El 21 ahora se ha distribuido entre todas las celdas según su valor original.
    Celdas después de ejecutar macro

Ayúdame a mejorar la macro.

He escrito este código para operar la forma en que trabajo y para satisfacer mis necesidades. Sin embargo, tal vez trabaje de manera diferente, tal vez se le ocurran algunas mejoras o tal vez tenga una forma diferente de distribuir un valor entre las celdas. Si es así, incluya sus opiniones en la sección de comentarios a continuación.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Este sitio web utiliza cookies para mejorar la experiencia del usuario y garantizar un funcionamiento eficiente. Al utilizar nuestro sitio web, aceptas todas las cookies de acuerdo con nuestra política de cookies. Leer mas...