Lấy dữ liệu từ nhiều file (mỗi file có 3 đến 4 sheet) đưa vào file tổng hợp (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

LuuGiaPhúc

Thành viên hoạt động
Tham gia
28/7/21
Bài viết
126
Được thích
52
Chào các anh chị, em là thành viên mới, xin cho em hỏi là em muốn lấy dữ liệu từ nhiều file report , mỗi file có từ 3 đến 4 sheet , mỗi sheet có khoảng 60.000 ~ 65.000 dòng) , đưa vào file tổng hợp.
Mỗi sheet em chỉ lấy cột A , C: D, G:H , K:M , T , X:Y.
Nhờ các anh chị giúp em đoạn code import data để không cần phải copy paste bằng tay nữa ạ.
Em cảm ơn rất nhiều.

Chú ý, dữ liệu của các sheet hay có tình trạng hàng cuối cùng bị thiếu (do các văn phòng nhập liệu trên phần mềm bị thiếu). Nhưng khi đưa về file tổng hợp thì mình vẫn phải đưa về y chang.

1627476940793.png
 

File đính kèm

Lần chỉnh sửa cuối:
Do nhiều file, mỗi file nhiều sheet nên hơi khác. Có lẽ phải làm tuần tự mỗi file thành 1 sheet trong file, sau đó file tổng hợp mới tập hợp các file con. Do dữ liệu nhiều nên chỉ có thể làm bằng Power query.
 
Chào các anh chị, em là thành viên mới, xin cho em hỏi là em muốn lấy dữ liệu từ nhiều file report , mỗi file có từ 3 đến 4 sheet , mỗi sheet có khoảng 60.000 ~ 65.000 dòng) , đưa vào file tổng hợp.
Mỗi sheet em chỉ lấy cột A , C: D, G:H , K:M , T , X:Y.
Nhờ các anh chị giúp em đoạn code import data để không cần phải copy paste bằng tay nữa ạ.
Em cảm ơn rất nhiều.

Chú ý, dữ liệu của các sheet hay có tình trạng hàng cuối cùng bị thiếu (do các văn phòng nhập liệu trên phần mềm bị thiếu). Nhưng khi đưa về file tổng hợp thì mình vẫn phải đưa về y chang.

View attachment 263219
Trong khi chờ các anh chị em khác trợ giúp bằng các giải pháp khác. hãy thử giải pháp bằng VBA theo cách củ chuối này xem sao. Kết quả trả về đang để từ ô A7 đến ..... trong Sh TONG HOP nhé
Nhắc bạn: Nên thay đổi tên file nên lấy đuôi là .xlsx thay vì .xls ( nếu thay thì mỏe code ra và thay vào dòng tôi đã đánh dấu).
Đề tài này trên diễn đàn rất rất nhiều bạn nên tìm kiếm và tham khảo rồi bí thì mới nhờ trợ giúp những chỗ không làm được.
 

File đính kèm

Chào các anh chị, em là thành viên mới, xin cho em hỏi là em muốn lấy dữ liệu từ nhiều file report , mỗi file có từ 3 đến 4 sheet , mỗi sheet có khoảng 60.000 ~ 65.000 dòng) , đưa vào file tổng hợp.
Mỗi sheet em chỉ lấy cột A , C: D, G:H , K:M , T , X:Y.
Nhờ các anh chị giúp em đoạn code import data để không cần phải copy paste bằng tay nữa ạ.
Em cảm ơn rất nhiều.

Chú ý, dữ liệu của các sheet hay có tình trạng hàng cuối cùng bị thiếu (do các văn phòng nhập liệu trên phần mềm bị thiếu). Nhưng khi đưa về file tổng hợp thì mình vẫn phải đưa về y chang.

View attachment 263219
Bạn dùng code sau thử nhé.

Mã:
Sub GopDL_HLMT()
    Dim strFileName() As Variant, arrSht() As Variant
    Dim strSQL As String, strPath As String
    Dim iWht As Integer, iSht  As Integer
    strFileName = Array("Attendance_Report_28_07_2021 - SD.xls", "Attendance_Report_28_07_2021 - SBW.xls")
    arrSht = Array("Page 1", "Page 2", "Page 3")
    strPath = ThisWorkbook.Path & "\"
    For iWht = LBound(strFileName) To UBound(strFileName)
        For iSht = LBound(arrSht) To UBound(arrSht)
            strSQL = strSQL & " Union Select F1,F3,F4,F7,F8,F11,F12,F13,F20,F24,F25,'" & arrSht(iSht) & "' as SheetName, '" & _
                    strFileName(iWht) & "' as Workbook from [EXCEL 12.0;HDR=No;Database=" & strPath & strFileName(iWht) & "].[" & arrSht(iSht) & "$A6:Y65536]"
        Next
    Next
    strSQL = Right(strSQL, Len(strSQL) - 7)
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet1.Range("A2").CopyFromRecordset .Execute("Select * From (" & strSQL & ") Order By Workbook,SheetName")
    End With
End Sub

Lưu ý file chạy code chung thư mục với 2 file cần tổng hợp.
 
Nếu tổng hợp từ nhiều file, mà mỗi file lại tổng hợp từ nhiều Sheet. Làm bằng Power Query va theo trình tự:
1. Tại mỗi File, tạo 1 sheet tổng hợp để append từ các sheet con.
2. Làm một file tổng hợp để Collect dữ liệu từ các File trên qua sheet đã tổng hợp.

Tôi làm thử từ 1 File con, bạn đọc tài liệu và thử làm với File khác xem sao.
 

File đính kèm

Cái khó của chủ đề này là dữ liệu nhiều, nhiều file nhiều sheet có khi vượt quá số dòng của Excel work sheet. File tổng chỉ có thể làm bằng Power query và Data model.
 
Bạn dùng code sau thử nhé.

Mã:
Sub GopDL_HLMT()
    Dim strFileName() As Variant, arrSht() As Variant
    Dim strSQL As String, strPath As String
    Dim iWht As Integer, iSht  As Integer
    strFileName = Array("Attendance_Report_28_07_2021 - SD.xls", "Attendance_Report_28_07_2021 - SBW.xls")
    arrSht = Array("Page 1", "Page 2", "Page 3")
    strPath = ThisWorkbook.Path & "\"
    For iWht = LBound(strFileName) To UBound(strFileName)
        For iSht = LBound(arrSht) To UBound(arrSht)
            strSQL = strSQL & " Union Select F1,F3,F4,F7,F8,F11,F12,F13,F20,F24,F25,'" & arrSht(iSht) & "' as SheetName, '" & _
                    strFileName(iWht) & "' as Workbook from [EXCEL 12.0;HDR=No;Database=" & strPath & strFileName(iWht) & "].[" & arrSht(iSht) & "$A6:Y65536]"
        Next
    Next
    strSQL = Right(strSQL, Len(strSQL) - 7)
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet1.Range("A2").CopyFromRecordset .Execute("Select * From (" & strSQL & ") Order By Workbook,SheetName")
    End With
End Sub

Lưu ý file chạy code chung thư mục với 2 file cần tổng hợp.
Có phải là ado sẽ không chấp nhận chuỗi sql quá dài không anh, vì nó nghĩ chuỗi đó quá phức tạp? Anh sẽ làm thế nào để vượt qua giới hạn đó nếu anh gặp tình huống đó?
 
Cái khó của chủ đề này là dữ liệu nhiều, nhiều file nhiều sheet có khi vượt quá số dòng của Excel work sheet. File tổng chỉ có thể làm bằng Power query và Data model.
Nếu 1 khóa học/năm học của 1 trường mà đến 1 triệu học sinh thì đúng là chịu hẳn.
 
Có phải là ado sẽ không chấp nhận chuỗi sql quá dài không anh, vì nó nghĩ chuỗi đó quá phức tạp? Anh sẽ làm thế nào để vượt qua giới hạn đó nếu anh gặp tình huống đó?
Nếu nhiều quá thì chia nhỏ ra. Chịu khó làm từng phần rồi ghép vào thôi bạn.
 
dữ liệu nhiều kinh khủng , cái này là của công ty đào tạo trực tuyến nên số dòng trong file tổng hợp của em nhiều khi lên đến hơn 500.000 dòng
Nếu Tổng hợp mà 500k dòng thì Excel xử lý tốt bạn. Theo hướng POWER QUERY là được bạn.

Tôi cũng góp ý một chút:

- Ví dụ File này: Attendance_Report_28_07_2021 - SD.xls => thực tế nó là 1 báo cáo chứ không phải là 1 Cơ sở dữ liệu. Thực sự, việc lại đi tổng hợp từ 1 File Báo cáo thì quá khó khăn, như thực trạng File đang có các ô Tiêu đề, tên ngay trường đầu tiên TRAINEE_ID tự nhiên có 2 ký tự xuống dòng (chưa hiểu để làm gì).

- Nếu bỏ đi các tiêu đề của báo cáo, chuẩn lại Tên trường, thì việc tổng hợp bằng PQ chắc chỉ vài giây. Thử với nguồn bài #12 https://www.giaiphapexcel.com/diend...không-cần-mở-file-dongia.156725/#post-1038338

Chúc thành công.
 
Lần chỉnh sửa cuối:
Nếu Tổng hợp mà 500k dòng thì Excel xử lý tốt bạn. Theo hướng POWER QUERY là được bạn.

Tôi cũng góp ý một chút:

- Ví dụ File này: Attendance_Report_28_07_2021 - SD.xls => thực tế nó là 1 báo cáo chứ không phải là 1 Cơ sở dữ liệu. Thực sự, việc lại đi tổng hợp từ 1 File Báo cáo thì quá khó khăn, như thực trạng File đang có các ô Tiêu đề, tên ngay trường đầu tiên TRAINEE_ID tự nhiên có 2 ký tự xuống dòng (chưa hiểu để làm gì).

- Nếu bỏ đi các tiêu đề của báo cáo, chuẩn lại Tên trường, thì việc tổng hợp bằng PQ chắc chỉ vài giây. Thử với nguồn bài #12 https://www.giaiphapexcel.com/diendan/threads/gộp-dữ-liệu-trên-các-sheet-trên-file-dongia-để-đưa-vào-1-mãng-trên-file-b-mà-không-cần-mở-file-dongia.156725/#post-1038338

Chúc thành công.
Cái file Attendance_Report_28_07_2021 - SD.xls này là xuất từ web của công ty xuống ==> vậy theo ý của anh là mình sẽ vào sửa lại tên của các trường này trước rồi mới tới việc tổng hợp nó lại hả anh.
Bài đã được tự động gộp:

Trong khi chờ các anh chị em khác trợ giúp bằng các giải pháp khác. hãy thử giải pháp bằng VBA theo cách củ chuối này xem sao. Kết quả trả về đang để từ ô A7 đến ..... trong Sh TONG HOP nhé
Nhắc bạn: Nên thay đổi tên file nên lấy đuôi là .xlsx thay vì .xls ( nếu thay thì mỏe code ra và thay vào dòng tôi đã đánh dấu).
Đề tài này trên diễn đàn rất rất nhiều bạn nên tìm kiếm và tham khảo rồi bí thì mới nhờ trợ giúp những chỗ không làm được.
Em chọn 2 file Attendance report xong, nó báo lỗi :
1627561226033.png

Với lại khi tổng hợp về, thì cái trường CMND và Mã số Đại Lý có thể để nó ở chế độ TEXT không ạ ? vì nó bắt đầu là số 0 (ví du 0135254) với lại em sẽ dùng mã số đại lý để vlookup sau này
 
Lần chỉnh sửa cuối:
Bạn dùng code sau thử nhé.

Mã:
Sub GopDL_HLMT()
    Dim strFileName() As Variant, arrSht() As Variant
    Dim strSQL As String, strPath As String
    Dim iWht As Integer, iSht  As Integer
    strFileName = Array("Attendance_Report_28_07_2021 - SD.xls", "Attendance_Report_28_07_2021 - SBW.xls")
    arrSht = Array("Page 1", "Page 2", "Page 3")
    strPath = ThisWorkbook.Path & "\"
    For iWht = LBound(strFileName) To UBound(strFileName)
        For iSht = LBound(arrSht) To UBound(arrSht)
            strSQL = strSQL & " Union Select F1,F3,F4,F7,F8,F11,F12,F13,F20,F24,F25,'" & arrSht(iSht) & "' as SheetName, '" & _
                    strFileName(iWht) & "' as Workbook from [EXCEL 12.0;HDR=No;Database=" & strPath & strFileName(iWht) & "].[" & arrSht(iSht) & "$A6:Y65536]"
        Next
    Next
    strSQL = Right(strSQL, Len(strSQL) - 7)
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No""")
        Sheet1.Range("A2").CopyFromRecordset .Execute("Select * From (" & strSQL & ") Order By Workbook,SheetName")
    End With
End Sub

Lưu ý file chạy code chung thư mục với 2 file cần tổng hợp.
Bạn có thể sửa code 1 chút , kiểu cho nó hiện lên cái bảng hỏi file report ở đâu được không, vì mỗi ngảy mình tải file về, mình phải lưu lại với tên khác nhau (để sau này cần truy cứu lại). Code của bạn bắt buộc phải đặt đúng tên, nếu không nó báo lỗi vậy nè. Còn nữa , mỗi file report có thể có 2 sheet là page 1 và page 2 , cũng có file có 3 sheet hoặc 4 sheet , không cố định. Mình nhìn code của bạn hình như là khóa cứng 3 sheet luôn thì mình nghĩ nó không an toàn.

1627561797712.png
 
Lần chỉnh sửa cuối:
Cái file Attendance_Report_28_07_2021 - SD.xls này là xuất từ web của công ty xuống ==> vậy theo ý của anh là mình sẽ vào sửa lại tên của các trường này trước rồi mới tới việc tổng hợp nó lại hả anh.
Bài đã được tự động gộp:


Em chọn 2 file Attendance report xong, nó báo lỗi :
View attachment 263277

Với lại khi tổng hợp về, thì cái trường CMND và Mã số Đại Lý có thể để nó ở chế độ TEXT không ạ ? vì nó bắt đầu là số 0 (ví du 0135254) với lại em sẽ dùng mã số đại lý để vlookup sau này

Bạn xem lại tên file nếu đuối là .xls thì được Nếu là đuôi khác thì phải đổi cho phù hợp. 2 file bạn up lên trên diễn đàn mình chạy thử thấy ok mà.
thay thử chay với file này xem sao. vẫn chính là các file của bạn thôi
 

File đính kèm

Bạn xem lại tên file nếu đuối là .xls thì được Nếu là đuôi khác thì phải đổi cho phù hợp. 2 file bạn up lên trên diễn đàn mình chạy thử thấy ok mà.
thay thử chay với file này xem sao. vẫn chính là các file của bạn thôi
file thì chắc chắn là .xls, vì nó là xuất trên phần mềm xuống mà, chỉ là mỗi ngày tải xuống mình sẽ sửa tên VD Atteandance 29_07_2021.xls .... .
Mình mới chạy thử, nó vẫn báo lỗi
1627572735892.png

hay là có khi nào do máy mình đang dùng Office 365 bản 64bit bản quyền hay không, có thể code bạn viết chạy trên office 2013 hoặc 2016 ? mình đoán vậy thôi. Bạn giúp mình nhé , Cảm ơn bạn
 
file thì chắc chắn là .xls, vì nó là xuất trên phần mềm xuống mà, chỉ là mỗi ngày tải xuống mình sẽ sửa tên VD Atteandance 29_07_2021.xls .... .
Mình mới chạy thử, nó vẫn báo lỗi
View attachment 263291

hay là có khi nào do máy mình đang dùng Office 365 bản 64bit bản quyền hay không, có thể code bạn viết chạy trên office 2013 hoặc 2016 ? mình đoán vậy thôi. Bạn giúp mình nhé , Cảm ơn bạn
Có thể do kết quả vượt 65 ngàn dòng
 
file thì chắc chắn là .xls, vì nó là xuất trên phần mềm xuống mà, chỉ là mỗi ngày tải xuống mình sẽ sửa tên VD Atteandance 29_07_2021.xls .... .
Mình mới chạy thử, nó vẫn báo lỗi
View attachment 263291

hay là có khi nào do máy mình đang dùng Office 365 bản 64bit bản quyền hay không, có thể code bạn viết chạy trên office 2013 hoặc 2016 ? mình đoán vậy thôi. Bạn giúp mình nhé , Cảm ơn bạn
Như anh PTM đã hướng dẫn bạn xem lại cái file để chứa kết quả tổng hợp xem nó có bao nhiêu dòng. nếu là Office 2010 thì có hơn 1000000 dòng, các office khác hình như chỉ có 65536 dòng thôi. Trong code mình đã để mảng kết quả là Redim KQ( 1 to 1000000, 1 to 11) rồi. Code mình viết trên office 2010 bản 32bit thôi mà.
 
Bạn có thể sửa code 1 chút , kiểu cho nó hiện lên cái bảng hỏi file report ở đâu được không, vì mỗi ngảy mình tải file về, mình phải lưu lại với tên khác nhau (để sau này cần truy cứu lại). Code của bạn bắt buộc phải đặt đúng tên, nếu không nó báo lỗi vậy nè. Còn nữa , mỗi file report có thể có 2 sheet là page 1 và page 2 , cũng có file có 3 sheet hoặc 4 sheet , không cố định. Mình nhìn code của bạn hình như là khóa cứng 3 sheet luôn thì mình nghĩ nó không an toàn.

View attachment 263279
Dĩ nhiên code tôi viết trên chỉ là tham khảo. Cái tên file và tên sheet bạn phải tùy chỉnh cho phù hợp với tình hình của bạn.
 
Như anh PTM đã hướng dẫn bạn xem lại cái file để chứa kết quả tổng hợp xem nó có bao nhiêu dòng. nếu là Office 2010 thì có hơn 1000000 dòng, các office khác hình như chỉ có 65536 dòng thôi. Trong code mình đã để mảng kết quả là Redim KQ( 1 to 1000000, 1 to 11) rồi. Code mình viết trên office 2010 bản 32bit thôi mà.
các file report Atteandance 29_07_2021.xls là xuất từ phần mềm xuống nên chắc chắn dưới 65536 dòng (nên nó mới có vụ page 2 , page 3 , page 4...) còn file tổng hợp là mình tạo mới, đuôi .xlsb hoặc xlsm. Hiện giờ mình copy bằng tay thì vẫn được. Code của bạn mình chạy lại thì giờ nó báo lỗi khác :
1627608765415.png
 
các file report Atteandance 29_07_2021.xls là xuất từ phần mềm xuống nên chắc chắn dưới 65536 dòng (nên nó mới có vụ page 2 , page 3 , page 4...) còn file tổng hợp là mình tạo mới, đuôi .xlsb hoặc xlsm. Hiện giờ mình copy bằng tay thì vẫn được. Code của bạn mình chạy lại thì giờ nó báo lỗi khác :
View attachment 263299
Cái vụ tiếng tây này mình như người mù chữ thôi. bạn thử kiểm tra xem các Sh có Sh nào tên tiếng Việt có dấu không? hoạc kiểm tra xem trong dữ liệu ở các Sh có dòng nào trống (rỗng) không? Mình thấy lạ là file của bạn mình chạy code thấy êm du. mà up lại cho bạn, bạn chạy là báo lỗi.
Cách 1:Bạn thử mở code ra và chạy từng dòng code (bằng cách nhấn phím F8) xem nó bị ở dòng code nào.
Cách 2: bạn thử bỏ dòng code : On error go to Hand.... và chay code sau dó kiểm tra kết quả xem sao.
chúc thành công.
 
Nhiều files là chỉ 2 files đã đính kèm hay nhiều hơn 2 files?
thường mỗi tháng chỉ có 2 đến 3 file , chưa khi nào nhiều hơn 3 file. Nhưng mỗi file có khi có 1 sheet, có khi có 2 , 3 , 4 sheet (tối đa cũng chỉ tới 4 sheet là hết). Các sheet này luôn đặt tên là page 1 , page 2 ... (do nó là report xuất từ hệ thống xuống nên không bao giờ có tên sheet khác chữ page 1 , page 2....).
 
Vậy file thứ 3 như thế nào?
Cả 3 files có các sheets có cấu trúc giống y chang nhau hả?
Y chang nhau hết anh à, cách đặt tên sheet là page 1, page 2 ... số lượng cột , tiêu đề cột ... y chang nhau hết
Chú ý, dữ liệu của các sheet hay có tình trạng hàng cuối cùng bị thiếu (do các văn phòng nhập liệu trên phần mềm bị thiếu). nên mình cần chú ý nếu muốn dùng kiểu tìm hàng cuối cùng có dữ liệu để copy , em mấy lần đặt con trỏ chuột ở cột A, nhấn CTRL SHIFT , mũi tên xuống, tưởng đã chọn hết vùng, ai dè thiếu mấy hàng cuối
1627658141317.png
 
Ví dụ viết tạm một chương trình nhỏ nhỏ khoảng vài trăm $ thế này. :)
ôi trời, anh đúng là cao thủ, nó chạy nhanh hết hồn luôn , hahaha.
Code này của anh nó vượt xa rất xa so với cái nhu cầu em cần, vô tình em lại nghĩ đến là áp dụng code này cho 1 tình huống khác mà bữa giờ em đang loay hoay làm thủ công, tình huống đó thì cực kỳ phù hợp với cái template này : sau khi import xong thì phải tổng kết xem source report nguồn toàn bộ có bao nhiêu sheet, mỗi sheet có bao nhiêu dòng..

Riêng trong cái nhu cầu của bài này, code này của anh có 1 điều hơi bất tiện , nếu có thể, anh giúp em chỉnh 1 chút xíu nhé.
Do em tải báo cáo về thì em cần phải lưu lại trong cùng 1 thư mục tên report , em chỉ đặt tên theo ngày tải về thôi , ví dụ
Atteandance 28_07_2021 - SBW.xls : là report tải ngày 28.07.2021 , ghi nhận lớp học SBW
Atteandance 28_07_2021- SD.xls : là report tải ngày 28.07.2021 , ghi nhận lớp học SD
Atteandance 29_07_2021 ESSS.xls : là report tải ngày 29.07.2021 , ghi nhận lớp học ESSS
................
nên nếu anh bắt buộc phải chỉ vào 1 thư mục thì lúc đó nó ôm hết toàn bộ report lại không được. thế là em phải tạo 1 thư mục mới, chép report qua đó, rồi chỉ đường dẫn cho nó, xong rồi phải cut mấy cái report về thư mục cũ của em, để cái thư mục mới nó trống cho lần sau import, chỉ là hơi bất tiện thôi, chứ mọi thứ code anh viết vẫn hoàn hảo.

Nên nếu có thể , anh cho nó hỏi theo file đi, em chọn file nào thì nó import những file đó thôi, không chơi kiểu "hoa thơm bứng cả cụm" thế này.

Em cảm ơn anh nhiều lắm lắm luôn á.
 
Lần chỉnh sửa cuối:
Sử dụng Power Query. Folder thêm file, file thêm sheet, chỉ cần refresh
JavaScript:
let
   
    FolderName ="D:\MyPham\Downloads\Data",
    FileNameList= Folder.Files(FolderName)[Name],
    FileNum={0..List.Count(FileNameList)-1},
    DataF= List.Transform(FileNum, (f) =>
    let
        FFullName =FolderName & "\" & FileNameList{f},
        Source1 = Excel.Workbook(File.Contents(FFullName), null, true),
        SourceData=Source1[Data],
        SheetName=Source1[Name],
        SheetNum={0..List.Count(SheetName)-1},
        DataN= List.Transform(SheetNum, (i) =>
        let
            Data0 = Table.PromoteHeaders(Table.Skip(Source1[Data]{i},3)),
            RemoveBlank = Table.SelectRows(Data0, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
            DataFName = Table.AddColumn(Table.PromoteHeaders(RemoveBlank), "File", each FileNameList{f}),
            Datai = Table.AddColumn(DataFName, "Sheet", each SheetName{i})
        in Datai),
        List1 =  Table.FromList(DataN, Splitter.SplitByNothing()),
        ListColumns = Table.ColumnNames(List1{0}[Column1]),
        Ketqua1 = Table.ExpandTableColumn(List1,"Column1",ListColumns)
    in Ketqua1),
    List2 =Table.FromList(DataF,Splitter.SplitByNothing()),
    ListColumns2 = Table.ColumnNames(DataF{0}),
    Ketqua = Table.ExpandTableColumn(List2, "Column1", ListColumns2)
in
   Ketqua
Giải nén thư mục Data vào chỗ nào cũng được, lấy đường dẫn sửa đường dẫn thư mục ở dòng đầu tiên. Lưu ý như @Cá ngừ F1 có cảnh báo: trong 1 file có tiêu đề cột A có 2 ký tự xuống dòng phải sửa, 2 file đính kèm đã sửa
Muốn lấy bao nhiêu cột thì thêm 1 dòng lệnh xoá cột trong query editor.
 

File đính kèm

Lần chỉnh sửa cuối:
Sử dụng Power Query. Folder thêm file, file thêm sheet, chỉ cần refresh
JavaScript:
let
 
    FolderName ="D:\MyPham\Downloads\Data",
    FileNameList= Folder.Files(FolderName)[Name],
    FileNum={0..List.Count(FileNameList)-1},
    DataF= List.Transform(FileNum, (f) =>
    let
        FFullName =FolderName & "\" & FileNameList{f},
        Source1 = Excel.Workbook(File.Contents(FFullName), null, true),
        SourceData=Source1[Data],
        SheetName=Source1[Name],
        SheetNum={0..List.Count(SheetName)-1},
        DataN= List.Transform(SheetNum, (i) =>
        let
            Data0 = Table.PromoteHeaders(Table.Skip(Source1[Data]{i},3)),
            RemoveBlank = Table.SelectRows(Data0, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
            DataFName = Table.AddColumn(Table.PromoteHeaders(RemoveBlank), "File", each FileNameList{f}),
            Datai = Table.AddColumn(DataFName, "Sheet", each SheetName{i})
        in Datai),
        List1 =  Table.FromList(DataN, Splitter.SplitByNothing()),
        ListColumns = Table.ColumnNames(List1{0}[Column1]),
        Ketqua1 = Table.ExpandTableColumn(List1,"Column1",ListColumns)
    in Ketqua1),
    List2 =Table.FromList(DataF,Splitter.SplitByNothing()),
    ListColumns2 = Table.ColumnNames(DataF{0}),
    Ketqua = Table.ExpandTableColumn(List2, "Column1", ListColumns2)
in
   Ketqua
Giải nén thư mục Data vào chỗ nào cũng được, lấy đường dẫn sửa đường dẫn thư mục ở dòng đầu tiên. Lưu ý như @Cá ngừ F1 có cảnh báo: trong 1 file có tiêu đề cột A có 2 ký tự xuống dòng phải sửa, 2 file đính kèm đã sửa
Muốn lấy bao nhiêu cột thì thêm 1 dòng lệnh xoá cột trong query editor.
Em cảm ơn anh đã hỗ trợ em.
 
Lần chỉnh sửa cuối:
Tuyệt vời !! .
Xin nhận của em lời cảm ơn nhiều lắm :d
 
bạn ơi, code của bạn viết chạy đúng hết rồi, tuy nhiên mình lại không biết cách nào để đưa vào file của mình .
Mình cần đưa dữ liệu sau khi lấy dc vào Sheet 3, vùng từ D6:N. ,còn vùng S:X chứa công thức tính toán
File của bạn thì nó đang đưa kết quả vào sheet 1, vùng A1:K, bạn chỉnh lại giúp mình nhé. Cảm ơn nhiều ạ

1628923779886.png
 

File đính kèm

Lần chỉnh sửa cuối:

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

Back
Top Bottom