Macro para Unir tablas de diferentes archivos de excel en uno solo

Como puedo unir todas las tablas de diferentes exceles en una sola hoja de excel conservando solo el encabezado de la primera hoja.(Fecha doc., Material, Prc. Neto, cliente, ship to) (Siempre estarán en el mismo orden las columnas, lo que varia es la cantidad de datos).

Pero antes de unir los exceles en uno solo: La fecha presente en la celda A3 Se debe copiar en la columna A, comenzando en "A15" hasta donde finalicen los datos de la tabla. (Esto debe ocurrir en todas las tablas antes de unirlas, ya que necesito el dato
de cuando fueron creadas las tablas).

Anexo Archivo
https://drive.google.com/open?id=1GIlsgCIXl78PuRCtuBXDq_8gqfvp_4WV

Respuesta
1

:)

Comencemos con una aclaración, Ana:

- Lo que has mostrado no es un archivo de Excel sino un archivo de texto (un txt con sus campos separados por tabulaciones y que puedes abrir con el Notepad) al que le han cambiado la extensión a xls.

- Esto no es un problema pero se requiere que aclares: ¿Están todas las extensiones cambiadas o cómo es "la cosa"?...

- En cualquier caso lo ideal sería que estos archivos de texto (cualquiera fuese su extensión) estén ubicado en una carpeta y que no hubiese allí ningún otro archivo que no fuesen estos a los que hay que procesar: ¿Eso es posible?...

Bastará que aclares lo de los comentarios 2 y 3, y será posible hacer la unión de los datos.

Saludos, Cacho R.

.

.

El tipo de archivo son excel con la terminación ".xlsm"
Si, tengo una carpeta exclusiva donde guardo solo los archivos que deseo unir la cual sería:
"Z:\Generador Reporte Nivel de Servicio\B.O\B.O. OCTUBRE 18".

Los archivos excel están acomodados como en esta imagen: A mi solo me interesa conservar las partes en verde, que conformarían la tabla.

:)

¿Por qué crees que los archivos son de Excel?...

¿Los intentaste abrir con el Notepad como te lo mencioné?... ¡Hazlo y me cuentas!

Saludos, Mario (Cacho) R.

.

.

: o No pude abrirlos con notepad, es que si son de excel, pero del 1997-2003,  y tienen terminación "xls", el "xlsm" es cuando lo guardo habilitado para macros.

He modificado la extensión de los archivos a ".xlsx" ya se pueden abrir en nuevas versiones de excel.  https://drive.google.com/open?id=1KzSEkn9go2kofSWBxnvotROfcMapnjjx

:)

¡Qué problema!...

Fíjate, por favor, que el archivo que mostraste primero es un archivo de texto tal como te lo comenté.

Es más: ¡Es preferible que así sea!...

Entonces te sugiero que revises que es lo que está pasando: ¿Sí?

Nuevamente: ¡Es preferible que sean de texto pues ello permite solucionar los problemas de formato en las fechas que vi en tu primer archivo!

.

.

.

¡Voy a intentar adivinar!...

Los archivos son generados -se me ocurre- por algún sistema que los guarda con extensión xls (como el que mostraste inicialmente).

De ser así te comento que vos crees que son de Excel pero si los abrís con el Notepad notarás que son archivos de texto.

Te ruego que verifiques esto que acabo de decir y no les cambies el formato ni la extensión los archivos: ¡No hace falta!, ¿Entendido?...

Además ya tengo la solución para el caso que las cosas sean como te las comento.

.

.

Así es esas bases me las mandan descargadas de SAP.

Ya lo pude abrir desde otra computadora con bloc de notas, pero me aparece así: 

:)

Entonces todo lo que tienes que resolver es: ¿Por qué el primer archivo que subiste a este intercambio (con el que yo basé mi solución) ha sido un archivo de texto con extensión xls? (Puedes volver a bajarlo desde este mismo hilo y constatar lo que te estoy comentando)...

Y lo segundo: necesito que tomes un archivo de los generados en SAP y sin cambiarles "nada de nada" (mucho menos su extensión) lo subas a un servidor y publiques aquí su enlace para poder adaptar la solución que ya tengo a este último archivo que consideraré "como el que vale", ¿Ok?...

Saludos, Mario (Cacho) Rodríguez.

.

.

:)

Éste fue el primer archivo que subiste al Foro:

:)

.

Lo he subido tal cual me llega:

https://drive.google.com/open?id=1vo4RDRUjpARpKRkpmcA5OB8_gHGB1aOI 

Ya pude abrirlo con bloc de notas, y ya me aparece bien: 

:)

¿Qué debe haber pasado, Ana?...

a) Recibes un archivo de texto.
b) Como ese archivo tiene extensión xls tú crees que es un Excel y lo abres desde Excel.
c) Como Excel se comunica -casi- con "cualquier cosa"... ¡Te lo abre, nomás! Y te muestra la info.
d) Finalmente, tú guardas esta info mediante un "Guardar como": allí es donde le cambias la extensión a xlsx o a xlsm (da igual).

El código que adjunto lo pondrás en cualquier módulo común. Tras ejecutarlo verás crearse una nueva hoja conteniendo la suma de la info de todos los archivos "de texto" (asegúrate que sean de texto para que esto no falle) ubicados en la misma carpeta (en esa carpeta SÓLO tienen que estar estos archivos a procesar, ¿Ok?):

Sub Unir_Archivos_de_Texto()
'---------------------------\
'by Mario (Cacho) Rodríguez ||
'---------------------------/
Dim mPath$, iFile, ws As Worksheet, C As Range, iDate As Date
iFile = "Selecciona uno de los archivos a procesar"
If MsgBox(iFile, vbOKCancel) = vbCancel Then Exit Sub
Application.ScreenUpdating = False
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
On Error Resume Next
  mPath = Application.GetOpenFilename(Title:=iFile)
  If mPath = CStr(False) Then Exit Sub
On Error GoTo 0
mPath = Left(mPath, InStrRev(mPath, "\"))
iFile = Dir(mPath & "*.*")
Set ws = Workbooks.Add.Sheets(1)
Do Until iFile = ""
  Application.StatusBar = iFile
  Set C = ws.Cells(Rows.Count, "b").End(xlUp).Offset(1)
  With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & mPath & iFile, Destination:=C)
    .AdjustColumnWidth = False
    .TextFilePlatform = 2
    .TextFileParseType = xlDelimited
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(3, 3, 9, 2, 1, 1, 2, 9)
    .TextFileDecimalSeparator = "."
    .TextFileThousandsSeparator = ","
    .Refresh BackgroundQuery:=False
    .Delete
  End With
  iDate = C.Range("a3")
  If C.Row < 4 Then
    ws.[a1] = "File"
    ws.[b1] = "F. Reporte"
    ws.[c14:g14].Copy ws.[c1]
  End If
  Set C = C.Range("a15")
  ws.Range(C.Offset(-14), C.Offset(-1, 5)).Delete xlShiftUp
  ws.Range(C.Offset(, -1), C.Offset(-1, 1).End(xlDown).Offset(, -2)) = iFile
  ws.Range(C, C.Offset(-1, 1).End(xlDown).Offset(, -1)) = iDate
  iFile = Dir
Loop
Application.StatusBar = False
With ws.Range("a1").CurrentRegion
  .Range("a2").Select
  ActiveWindow.FreezePanes = True
  .Rows.RowHeight = 17.5
  .VerticalAlignment = xlCenter
  With ws.ListObjects.Add(xlSrcRange, .Cells, , xlYes)
    .TableStyle = "TableStyleMedium15"
    .Unlist
  End With
  With .Font
    .Name = "Microsoft Sans Serif"
    .Size = 12
  End With
  .Columns(1).Offset(1).Font.Size = 8
  .EntireColumn.AutoFit
End With
Application.ScreenUpdating = True
End Sub

Saludos, Mario (Cacho) Rodríguez.

:)

.

Exactamente, yo recibo los archivos descargados de SAP, y la computadora en automático me los abre en Excel. Muy bien he probado el código, y funciona muy bien.

Solo que la fecha para la columna de “FILE”, la toma del nombre del archivo, cierto?

No hay ningún problema, solo quiero saber si le puedo agregar al código, otro mini código para que le de formato a la columna. Intente agregarlo poniendo un “With”, al inicio y un “End with” al principio pero no funciono.

¿Se le puede anexar este código al otro código?

*¿Guste que Formule otra pregunta en el foro para esta duda?

¡Gracias!

Sub Formfecha()

'

' Formfecha Macro

'

'

    Columns("A:A").Select

    Selection.Replace What:=".XLS", Replacement:="", LookAt:=xlPart, _

        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

        ReplaceFormat:=False

    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _

        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _

        :=Array(1, 4), DecimalSeparator:="/", ThousandsSeparator:="/", _

        TrailingMinusNumbers:=True

    Selection.NumberFormat = "dd/mm/yyyy;@"

End Sub

:)

¿A qué columna le quieres dar un formato?, y
¿Qué formato le queres dar?...

Saludos, Cacho R.

:)

.

Ya aplicando el código a la columna a "File", quiero aplicarle el format de fecha  (DMY) Fecha en español (17/10/18).

:)

Pero Ana... ¡Fíjate bien!

No se trata de ningún formato sino del nombre -propiamente el nombre- del archivo de donde se tomó esa info: ¿Comprendes?... y por ello a la columna le he llamado: File.

Si quisieses que dichos nombres tengan otro formato, dile a "los que generan esos archivos" que les asignen el nombre con el formato que te plazca, o cámbiaselo tú -a mano- antes de procesarlos.

Saludos, Mario (Cacho) Rodríguez

.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas