Cortar rangos de datos, pegarlos en un archivo nuevo con un nombre específico.

Hola experto gracias de antemano por tu atención.

Mi problema es que tengo un archivo de excel donde existe una base de datos.

Hay una columna que se llama UR es un código de 3 caracteres (pueden ser 3 letras "NKY", 3 números "111" o una letra y 2 números "U00".

Lo que quiero hacer es una macro que busque cada cambio en esa columna (cuando pase de la 100 a la 101, 102, y así sucesivamente. Cada rango de celdas que contengan la UR igual (en este caso como ejemplo la UR 100 contendría 50 filas) debe pegarse en un archivo de excel nuevo que se llame igual que la UR(100.xls). Lo que me debería generar pues varios archivos excel con nombres diferentes.

Ahora en la parte del pegado si se puede escoger que pegue datos con fórmulas, o sólo valores.

Muchas gracias por tu atención.

1 respuesta

Respuesta
1

Te anexo la macro para copiar UR a nuevos archivos. Solamente tienes que poner dentro de la macro la celda en donde se encuentra el título de UR en esta línea

Set urinicial = h1.Range("A1")

Yo le puse A1, pero debes ponerle la celda correcta.

Sub ur()
'por.dam
Set h1 = Sheets(ActiveSheet.Name)
ActiveSheet.AutoFilterMode = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set urinicial = h1.Range("A1")
fini = urinicial.Row
cini = urinicial.Column
ufila = Cells(Rows.Count, cini).End(xlUp).Row
copiar = MsgBox("                        Copiar datos " & vbNewLine & vbNewLine & _
                "SI = Copiar, No = Pegar valores, Cancel = Salir        ", _
                vbQuestion + vbYesNoCancel, "Copiar UR")
If copiar = vbCancel Then Exit Sub
Range(Cells(fini, cini), Cells(ufila, cini)).Copy
    Set h2 = Sheets.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A:A").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("B1"), Unique:=True
For i = 2 To h2.Range("B" & Rows.Count).End(xlUp).Row
    Application.StatusBar = "Procesando UR " & i & " de " & h2.Range("B" & Rows.Count).End(xlUp).Row
    h1.Select
    ActiveSheet.AutoFilterMode = False
    Rows(fini & ":" & fini).Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:=h2.Cells(i, "B")
    Range("A" & fini).Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Workbooks.Add
    If copiar = vbYes Then
        ActiveSheet.Paste
    Else
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    End If
    Application.CutCopyMode = False
    carpeta = ThisWorkbook.Path & "\"
    ActiveWorkbook.SaveAs Filename:=carpeta & h2.Cells(i, "B") & ".xls", _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
    ActiveWorkbook.Close
    conta = conta + 1
    h1.Select
Next
    h2.Delete
    Application.DisplayAlerts = True
    ActiveSheet.AutoFilterMode = False
    Application.StatusBar = False
    MsgBox "Proceso Terminado " & vbNewLine & vbNewLine & _
        "Se crearon " & conta & " Archivos", vbInformation, "Copia de UR"
End Sub

Si quieres un botón para ejecutar la macro, sigue las Instrucciones para un botón y ejecutar la macro
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: ur
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Saludos. Dam
Si es lo que necesitas.

Muchas gracias por tu respuesta, ya ejecuté la macro en el archivo original, cambié la celda a1 por b4 que es donde debe buscar los datos, sin embargo al abrir los archivos que genera me percaté de lo siguiente:

1.- Hace un archivo por cada fila correspondiente a la ur 100

2.- A cada archivo que genera de la ur 100 le pone el nombre de la ur siguiente

Perdona, faltó un pequeño detalle

En la macro, cambia esta línea

Selection.AutoFilter Field:=1, Criteria1:=h2.Cells(i, "B")

Por esta

Selection.AutoFilter Field:=cini, Criteria1:=h2.Cells(i, "B")

Prueba y me comentas.

Saludos. Dam

Gracias de nuevo Dam ya el único detalle que queda es que me copia en todos los archivos en la primera fila, la primera fila de la primera UR que encuentra es decir el mismo dato de la ur 100 me lo copia en todos los archivos en a1

Pero debes poner la celda donde tienes el título UR, supongo que debe ser la B3, entonces cambia en la macro, B4 por B3 para que te copié el Título UR en lugar de tu primer dato

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas