Tổng hợp một lúc nhiều file .csv

Liên hệ QC

Noel242

Thành viên mới
Tham gia
21/9/19
Bài viết
10
Được thích
2
Thưa quý thầy cô và các anh chị,
Hiện em có một số file được phần mềm xuất ra dạng *.csv của từng thành viên trong tổ thực hiện ( em có đính kèm file chi tiết). Trong file .csv phần mềm xuất ra rất nhiều giá trị nhưng em chỉ cần lấy các giá trị theo file Tonghop.xlsx em gởi kèm và em muốn lây thêm 2 cột nữa là:
1. Ten file chính là tên của File .CSV là ngày tháng thực hiện
2. Ten người là tên của foder người thực hiện
em kính nhờ quý thầy cô và các anh chị hướng dẫn cho em cách tổng hợp 1 lần được tất cả các file cở thư mục con.
em xin cảm ơn và chúc cả nhà mình bình an và vui vẽ!
Trân trọng,
em Loan
( Ps. em diễn đạc câu hỏi nhiều khi chưa được gãy gọn em mong quý thầy cô và các anh chị rộng lượng bỏ qua cho em)
 

File đính kèm

  • Dulieu.rar
    524.6 KB · Đọc: 39
Import từ File CSV, bạn có biết dùng POWER QUERY không? chắc chỉ có giải pháp dùng PQ là hợp lý nhất.
 
Upvote 0
em cảm ơn anh nhiều trước, anh ơi mình ko dùng Macro import các file .CSV cùng lúc được ak anh?
Nghe chừng giải pháp này khó (1) liệt kê các file csv trong thư mục (2) mở file và copy vào sheet đích (3) đóng file xong mở và copy... tiếp đến hết. Sẽ rất mệt.
 
Upvote 0
Nghe chừng giải pháp này khó (1) liệt kê các file csv trong thư mục (2) mở file và copy vào sheet đích (3) đóng file xong mở và copy... tiếp đến hết. Sẽ rất mệt.
Mệt với người code chứ người dùng khỏe re, bấm cái là chạy. Còn dùng PQry, người dùng không biết làm, chết chứ không mệt :D --=0
 
Upvote 0
Thưa quý thầy cô và các anh chị,
Hiện em có một số file được phần mềm xuất ra dạng *.csv của từng thành viên trong tổ thực hiện ( em có đính kèm file chi tiết). Trong file .csv phần mềm xuất ra rất nhiều giá trị nhưng em chỉ cần lấy các giá trị theo file Tonghop.xlsx em gởi kèm và em muốn lây thêm 2 cột nữa là:
1. Ten file chính là tên của File .CSV là ngày tháng thực hiện
2. Ten người là tên của foder người thực hiện
em kính nhờ quý thầy cô và các anh chị hướng dẫn cho em cách tổng hợp 1 lần được tất cả các file cở thư mục con.
em xin cảm ơn và chúc cả nhà mình bình an và vui vẽ!
Trân trọng,
em Loan
( Ps. em diễn đạc câu hỏi nhiều khi chưa được gãy gọn em mong quý thầy cô và các anh chị rộng lượng bỏ qua cho em)
Bạn chép code sau vào file TongHop rồi chạy thử nhé.
Mã:
Option Explicit
Sub GopDL_HLMT()
    On Error Resume Next
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection, strPath As String, strSQL As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder(ThisWorkbook.Path & "\Data")
    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1
        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder
        Next oSubfolder
        For Each oFile In oFolder.Files
            If oFile.Name Like "*.csv" Then
                strPath = Replace(oFile.Path, "\" & oFile.Name, "")
                With CreateObject("ADODB.Connection")
                   .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & strPath & ";Extended Properties=""Text;HDR=Yes;FORMAT=Delimited""")
                   strSQL = "Select Code,Name,[N],[E],[Z] ,'" & strPath & "','" & oFile.Name & "' from [" & oFile.Name & "]"
                   Sheet1.Range("A" & Sheet1.Range("F65000").End(xlUp).Row + 1).CopyFromRecordset .Execute(strSQL)
                End With
            End If
        Next oFile
    Loop

End Sub
 
Upvote 0
Bạn chép code sau vào file TongHop rồi chạy thử nhé.
Mã:
Option Explicit
Sub GopDL_HLMT()
    On Error Resume Next
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection, strPath As String, strSQL As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder(ThisWorkbook.Path & "\Data")
    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1
        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder
        Next oSubfolder
        For Each oFile In oFolder.Files
            If oFile.Name Like "*.csv" Then
                strPath = Replace(oFile.Path, "\" & oFile.Name, "")
                With CreateObject("ADODB.Connection")
                   .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & strPath & ";Extended Properties=""Text;HDR=Yes;FORMAT=Delimited""")
                   strSQL = "Select Code,Name,[N],[E],[Z] ,'" & strPath & "','" & oFile.Name & "' from [" & oFile.Name & "]"
                   Sheet1.Range("A" & Sheet1.Range("F65000").End(xlUp).Row + 1).CopyFromRecordset .Execute(strSQL)
                End With
            End If
        Next oFile
    Loop

End Sub
em cảm ơn thầy ak, code của thầy chạy rất hoàn hảo và đúng bài toán của em. em chúc thầy và gia đình sức khỏe và hạnh phúc và vui vẽ.
Bài đã được tự động gộp:

Nghe chừng giải pháp này khó (1) liệt kê các file csv trong thư mục (2) mở file và copy vào sheet đích (3) đóng file xong mở và copy... tiếp đến hết. Sẽ rất mệt.
em xin cảm ơn anh đã hướng dẫn cho em, em chúc anh luôn bình an và mạnh mẽ
Bài đã được tự động gộp:

Thời buổi bi giờ vẫn còn nhiều người gắn liền với đồ cổ.
dạ, anh ơi a có cách nào bày cho em với nhé. em cảm ơn anh trước nhé.
 
Upvote 0
Thời buổi bi giờ vẫn còn nhiều người gắn liền với đồ cổ.
Bắt và bẻ ...mấy cái đồ cổ này cho đầy rọ....
khi nào em bị vứt ra khỏi GPE thì lấy cái rọ này đem đấu giá.... sống qua ngày cơm 2 bữa rưỡi...
 
Upvote 0
Em chào Anh Chị,
Em có sử dụng code của Admin

Hai Lúa Miền Tây

Do file csv của em đang ở định dạng ngăn cách cột là dạng tab nên
Em có tìm tòi sửa ở đoạn
Extended Properties=""Text;HDR=Yes;FORMAT=Delimited"""
sang
Extended Properties=""Text;HDR=Yes;FORMAT=Delimited""vbTab"
nhưng không import được.
Anh/Chị giúp em xem sửa code trên với ạ.

P/s em vẫn đang dùng code import file csv sau thì import bình thường ạ.
code này em cũng học trên GPE, nay em đang tìm hiểu ADO nên muốn vọc code import của Admin vào công việc hàng ngày ạ.

Mã:
Sub ImportTextToExcel()
Dim fso As Object, FilesToOpen, TextSource As Object, TotalLines, Res()
Dim ItemsOfLine, TextItem, Delimiter As String, n As Byte
Dim K As Long, X As Byte, Cols As Integer, LineNum As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Delimiter = vbTab
'FilesToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt", , , , True)
FilesToOpen = Application.GetOpenFilename("Text Files (*.csv), *.csv", , , , True)
If Not IsArray(FilesToOpen) Then Exit Sub

For X = LBound(FilesToOpen) To UBound(FilesToOpen)
   Set TextSource = fso.OpenTextFile(FilesToOpen(X), 1, , -2)
   TotalLines = Split(TextSource.ReadAll, vbCrLf)
   For LineNum = LBound(TotalLines) To UBound(TotalLines)
      ItemsOfLine = TotalLines(LineNum)
      
      TextItem = Split(ItemsOfLine, Delimiter)
      If UBound(TextItem) + 1 > n Then
          ReDim Preserve Res(1 To 1048576, 1 To UBound(TextItem) + 1)
          n = UBound(TextItem) + 1
      End If
      If ItemsOfLine <> String(Len(ItemsOfLine), vbTab) Then
         K = K + 1
         For Cols = LBound(TextItem) To UBound(TextItem)
            Res(K, Cols + 1) = TextItem(Cols)
         Next
      End If
   Next
Next
[A2].Resize(K, UBound(Res, 2)) = Res
End Sub
 
Upvote 0
Cảm ơn bạn đã trợ giúp.
Mình thay thử thì vẫn không import được.
Mình gửi file gốc mình đang sử dụng, bạn xem giúp mình với.
Mình đang cần lấy dữ liệu từ file 2022_tab.csv - file này để định dạng tab, vào trong file excel
Bài đã được tự động gộp:

Extended Properties=""Text;HDR=Yes;FORMAT=TabDelimited)

Sửa lại thành thế này nhé bạn
Cảm ơn bạn đã trợ giúp.
Mình thay thử thì vẫn không import được.
Mình gửi file gốc mình đang sử dụng, bạn xem giúp mình với.
Mình đang cần lấy dữ liệu từ file 2022_tab.csv - file này để định dạng tab, vào trong file excel
 

File đính kèm

  • import_CSV_ADO.xlsm
    23.2 KB · Đọc: 4
  • Lưu trữ.zip
    770 bytes · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom