Distribuir valor celda (presupuesto) en varios periodos (columnas)

Buenas tardes, perdona por mi atrevimiento pero necesito tener alguna idea para resolver mi problemilla.

Se trata de repartir el importe de una celda (importe presupuesto) en columnas en las que se va ha hacer la previsión del presupuesto (doce columnas = doce meses),

Cuando se introduzca el importe, ver la forma en que nos pregunte, entre cuantos y en que meses se reparte el importe de la celda presupuesto.

Muy agradecido

1 respuesta

Respuesta
1

Imagino que todo esto lo pides para hacer con Excel. A lo mejor ya tienes hecho o medio hecho el libro, me vendría bien si me lo mandaras para ver donde se introducen los datos.

Si por ejemplo metes el presupuesto en una celda, yo haría que al modificar esa celda se abriera un formulario donde habría 12 controles checkbox con los meses y pudieras marcarlos y desmarcarlos. Luego al pulsar el botón de aceptar se repasaría el número de controles marcados y se dividiría el presupuesto entre ese numero y se pondría ese resultado en los meses que estuvieran marcados. El problema está en que Visual basic para Excel no es amigable para crear y manipular arrays de controles, pero como 12 tampoco son muchos se pueden crear y asignarles el código a mano con un poco de paciencia.

Como te decía, lo mejor sería trabajar sobre el libro, si quieres mándamelo a

[email protected]

Veo que pones los números de mes en la columna E.

Mira a ver que te parece esto:

Escribir los números de mes seguidos y para los meses 10, 11 y 12 usar las letras A, B y C. Es como si lo escribieras en base hexadecimal que se usa mucho en informática.

Por ejemplo, si los meses fueran febrero, julio y agosto escribirías esto en la columna E

278

Si fueran junio, noviembre y diciembre sería 6BC lo que escribieras.

Dime qué te parece y si te parece bien lo desarrollo.

Ya lo tengo. Los muy expertos en Excel tal vez sean capaces de hacerlo con funciones de Excel, pero yo me muevo mejor con Visual basic y las macros. Aparte me parece un desperdicio que haya 1000 o 1000000 celdas cada una con su fórmula cuando con una sola macro se puede hacer todo eso. Las macros tienen algunas desventajas, pero en este caso creo que es mejor.

Luego para empezar desaparecen todas las fórmulas de celda que tenias. Y la macro se encargará de ver si modificas las columnas mensual, periódico o mes periódico en una fila cuya primera celda no esté vacía y sea distinta de las de título. Quiere esto decir que para que funcione tiene que estar escrito primero el número de cuenta en la fila donde pongamos un dato y que la fila de títulos debe tener la palabra "Concepto" en la segunda columna.

En la columna mes periódico se ponen los meses por su numero o ABC, no hay que poner comas ni nada, todos seguidos como verás en el libro que te mandaré. SI repites algun número se dará cuenta y lo eliminara, asi como si escribes un caracter que no sea numero o letra A, B o C.

Y el resto ya son detalles técnicos de la macro que si quieres te explico si tienes interés y no entiendes algo.

Esta es la macro que debe ir en la hoja del presupuesto.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, fila, columna, NuMeses, ColumMes As Integer
Dim reparto As Double
Dim meses, mes, MesesRed As String
fila = Target.Row
columna = Target.Column
If columna <> 3 And columna <> 4 And columna <> 5 Then Exit Sub
If Cells(fila, 1) = "" Or InStr(Cells(fila, 2), "Concepto") <> 0 Then Exit Sub
If columna = 3 Then
reparto = Cells(fila, 3) / 12
If reparto = 0 Then
Range("F" & fila & ":Q" & fila) = ""
Else
For i = 6 To 17
Cells(fila, i) = reparto
Next
End If
Application.EnableEvents = False
If Cells(fila, 4) <> "" Then Cells(fila, 4) = ""
If Cells(fila, 5) <> "" Then Cells(fila, 5) = ""
Application.EnableEvents = True
Else
meses = UCase(Cells(fila, 5))
If meses <> "" Then
NuMeses = 0
MesesRed = ""
For i = 1 To Len(meses)
mes = Mid(meses, i, 1)
If InStr("123456789ABC", mes) <> 0 Then
If NuMeses = 0 Then
MesesRed = mes
NuMeses = 1
Else
If InStr(MesesRed, mes) = 0 Then
MesesRed = MesesRed + mes
NuMeses = NuMeses + 1
End If
End If
End If
Next
If MesesRed <> meses Then
Application.EnableEvents = False
Cells(fila, 5) = MesesRed
Application.EnableEvents = True
End If
If NuMeses > 0 Then
reparto = Cells(fila, 4) / NuMeses
If Cells(fila, 3) <> "" Then
Application.EnableEvents = False
Cells(fila, 3) = ""
Application.EnableEvents = True
End If
Else
reparto = 0
End If
Range("F" & fila & ":Q" & fila) = ""
For i = 1 To NuMeses
ColumMes = 5 + InStr("123456789ABC", Mid(MesesRed, i, 1))
If reparto <> 0 Then
Cells(fila, ColumMes) = reparto
Else
Cells(fila, ColumMes) = ""
End If
Next
End If
End If
End Sub

El sistema de esta página web se ha encargado de quitar todos los tabuladores y espacios en blanco dejándo el texto sin la indentación tan necesaria para poder entender el programa. Pero ya me he cansado de decirles a los responsables de la página el perjuicio que causa esto y no me hacen caso.

Y eso es todo, ahora te mando el libro tal como queda.

¡Ah por cierto! Supongo que conocerás las macros y que si no las tienes permitidas tienes que permitirlas para que funcione.

Es genial, funciona correctamente y también creo que es la mejor opción.

Me va a servir de mucho y quedo muy agradecido

Un Millón de gracias.

Quedo a la espera de cualquier indicación vuestra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas