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
1 Respuesta
:)
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.
.
.
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
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
.
.
- Compartir respuesta