Convertir rango a valores separados por celdas

Os cuento, tengo la siguiente duda, estoy intentando pasar un excel que tiene un rangos de años, y me gustaría que si tengo un rango de 1989-1993 me separe en celdas los valores interiores, osea 1990, 1991, 1992. Pongo unos ejemplos en imágenes:

3 respuestas

Respuesta
1

Ejecuta la siguiente macro

Sub Poner_años()
'Por.Dante Amor
    Set ini = Range("A2")
    Set fin = Range("B2")
    If ini.Value = "" Or fin.Value = "" Or _
       ini.Value = 0 Or fin.Value = 0 Then Exit Sub
    If fin.Value < ini.Value Then
        MsgBox "El número final es menor al inicio"
        Exit Sub
    End If
    '
    col = 3
    u = Cells(2, Columns.Count).End(xlToLeft).Column
    If u < 3 Then u = 3
    Range(Cells(2, 3), Cells(2, u)).ClearContents
    For i = ini.Value + 1 To fin.Value - 1
        Cells(2, col) = i
        col = col + 1
    Next
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Poner_años
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Muy buenas,

Una cosa que me faltó por añadir, es que lo que he puesto de ejemplo es una muestra. En realidad tengo que realizar esto con 50.000 filas. Funcionaria igual?

Saludos!

¿Quitaste la pregunta?

Te anexo la macro

Sub Poner_años()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.StatusBar = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    Range(Cells(2, "C"), Cells(u, Columns.Count)).ClearContents
    For f = 2 To u
        Application.StatusBar = "Procesando registro: " & f & " de : " & u
        Set ini = Range("A" & f)
        Set fin = Range("B" & f)
        If ini.Value = "" Or fin.Value = "" Or _
           ini.Value = 0 Or fin.Value = 0 Then
        Else
            If fin.Value < ini.Value Then
                Cells(f, "C") = "El número final es menor al inicio"
            Else
                col = 3
                For i = ini.Value + 1 To fin.Value - 1
                    Cells(f, col) = i
                    col = col + 1
                Next
            End If
        End If
    Next
    Application.ScreenUpdating = True
    Application.StatusBar = False
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta
Respuesta
1

En C1 introduce la siguiente fórmula MATRICIAL:

=SI.ERROR(INDICE(TRANSPONER(FILA(INDIRECTO($A$2+1&":"&$B$2-1))),COLUMNAS($C1:C1)),"")

que la ingresas con Ctrl + Shift + Enter

Luego arrástrala hacia la derecha... LISTO!.. ni siquiera necesitas una macro.

Quizás según tu configuración debas cambiar, por ;

Respuesta
1

Prueba esta macro

Sub AÑOS_INTERMEDIOS()
INICIAL = Range("A2"):  Final = Range("B2")
RESTA = Final - INICIAL
Range("C2") = INICIAL + 1
Range("D2").Resize(1, RESTA - 2).Formula = "=c2+1"
With Range("C1")
    .Value = "AÑOS INTERMEDIOS"
    .Resize(1, RESTA - 1).Merge
    .HorizontalAlignment = xlCenter
    .Font.Bold = True
    .CurrentRegion.EntireColumn.AutoFit
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas