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.