1. Si es un combobox de control activex
2. La fila 19 tiene meses con su año
3. Los valores se copiaran a partir de lo que se escriba en la columna valor
4. ¿A qué te refieres con filas interiores?
5. No, no hay que copiar datos de la columna de total
6. Los datos los quiero pegar en enero, febrero, marzo de cada año según el selector.
Ahora bien he conseguido copiar los datos sin problemas con este código:
Sub Copiar1()
'Macro para copiar desde la columna valor.
Application.ScreenUpdating = False
Dim año As Variant
año = Range("MO2").Value
Range("AN20").Select
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 27
i = 20
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 27
i = 20
If Range("MO2") = "Todos" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) <> "Resultado" Then
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
End If
Next
i = i + 1
Loop
End If
i = 20
' Do While Cells(i, "K") <> ""
' If Cells(i, "N") <> "" Then
' Cells(i, "N") = ""
' End If
' i = i + 1
' Loop
End If
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 27
i = 20
If Range("MO2") = "2018" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) = "Resultado" Then
Exit For
End If
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
'End If
Next
i = i + 1
Loop
End If
End If
' i = 20
' Do While Cells(i, "K") <> ""
' If Cells(i, "N") <> "" Then
' Cells(i, "N") = ""
' End If
' If i = 112 Then Stop
' i = i + 1
' Loop
If Range("MO2") = "2019" Then
Range("AN20").Select
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 40
i = 20
If Range("MO2") = "2019" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) = "Resultado" Then
Exit For
End If
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
'End If
Next
i = i + 1
Loop
End If
End If
' i = 20
' Do While Cells(i, "K") <> ""
' If Cells(i, "N") <> "" Then
' Cells(i, "N") = ""
' End If
' i = i + 1
' Loop
End If
If Range("MO2") = "2020" Then
Range("AN20").Select
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 53
i = 20
If Range("MO2") = "2020" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) = "Resultado" Then
Exit For
End If
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
'End If
Next
i = i + 1
Loop
End If
End If
' i = 20
' Do While Cells(i, "K") <> ""
' If Cells(i, "N") <> "" Then
' Cells(i, "N") = ""
' End If
' i = i + 1
' Loop
End If
If Range("MO2") = "2021" Then
Range("AN20").Select
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 66
i = 20
If Range("MO2") = "2021" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) = "Resultado" Then
Exit For
End If
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
'End If
Next
i = i + 1
Loop
End If
End If
' i = 20
' Do While Cells(i, "K") <> ""
' If Cells(i, "N") <> "" Then
' Cells(i, "N") = ""
' End If
' i = i + 1
' Loop
End If
If Range("MO2") = "2022" Then
Range("AN20").Select
If Range("AN19") <> "" Then
Set b = Rows(19).Find("Valor", lookat:=xlWhole)
col = b.Column + 79
i = 20
If Range("MO2") = "2022" Then
Do While Cells(i, "K") <> ""
For j = col To Cells(19, Columns.Count).End(xlToLeft).Column
If Cells(19, j) = "Resultado" Then
Exit For
End If
If Cells(i, "N") <> "" Then
Cells(i, j) = Cells(i, "N")
End If
'End If
Next
i = i + 1
Loop
End If
End If
i = 20
Do While Cells(i, "K") <> ""
If Cells(i, "N") <> "" Then
Cells(i, "N") = ""
End If
i = i + 1
Loop
End If
Application.ScreenUpdating = True
End Sub
Este código lo que hace es copiar los datos de la columna valor según el año que se seleccione en el combobox.
El problema es que por ejemplo yo he hecho condiciones que dice If Range("MO2") = "2022" Then, esto porque tengo lincada en la celda MO2 el valor que eligen en el selector. Pero cuando ya no se necesite más el año 2022 es cuando viene el problema. Había pensado alguna forma de asignar algún numero a cada año así en lugar de colocar If Range("MO2") = "2022" Then colocaría If Range("MO2") = 1 Then y seria más dinámico, de la otra forma tendría que ir a cambiar las macros cada vez que vayan pasando los años. Hay alguna forma de decir por ejemplo IF combobox es = 1 entonces copia aquí.
Gracias