Distribuya un valor entre celdas con VBA
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:
- Seleccione las celdas que contienen los valores actuales.
- Ejecute la macro
- Aparecerá un cuadro de entrada, ingrese el valor por el que desea ajustar el total y luego haga clic en Aceptar
- 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.
- ¡Ta-dah! Los valores se actualizarán. El 21 ahora se ha distribuido entre todas las celdas según su valor original.
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