VBA COPY DỮ LIỆU TỪ FILE KHÁC

Liên hệ QC

Thóc Sama

_/_/_/_/_/_/_/
Tham gia
23/7/16
Bài viết
550
Được thích
776
Giới tính
Nam
Nghề nghiệp
何でもする
Nhờ Anh/Chị cho xin đoạn Code (nội dung cần Copy trong file LIST TONG HOP) để Copy dữ liệu từ nhiều file khác (các file KQ, có hơn 1000 file KQ nhưng ở đây e để 2 file làm đại diện)
Cám ơn Anh/Chị lắm lắm!
 

File đính kèm

  • KQ01.xlsx
    11.7 KB · Đọc: 51
  • KQ02.xlsx
    13.8 KB · Đọc: 53
  • LIST TONG HOP.xlsm
    33.4 KB · Đọc: 51
Vụ này đã được hỗ trợ OK từ tháng 6/21 rồi
Mình sẽ tự delete Topic sau ít phút!
Thanks All!
Bạn có thể chia sẻ sơ bộ cách xử lý là gì không?
Tôi thấy các file có cấu trúc giống nhau, nếu tên sheet của từng file giống nhau thì có thể dùng ADO kết hợp với mảng được.
 
Upvote 0
Bạn có thể chia sẻ sơ bộ cách xử lý là gì không?
Tôi thấy các file có cấu trúc giống nhau, nếu tên sheet của từng file giống nhau thì có thể dùng ADO kết hợp với mảng được.
※Bạn nên Copy Code về sớm, do Topic này tôi đã chủ động Report (Nhờ Addmin BQT delete)
Bạn tham khảo Code:
Sub Load_File_NhapLieu()
Dim Fso As Object, Item, dArr, i, k, CotMax, lR As Long
Dim WsM, Ws As Worksheet, Wb As Workbook

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False

CotMax = 21 'so cot lay gia tri

On Error Resume Next

Set WsM = Sheet1 'TH ActiveSheet
WsM.ShowAllData

Set Fso = CreateObject("Scripting.FileSystemObject")

With Application.FileDialog(msoFileDialogFilePicker) 'chon file
.AllowMultiSelect = True 'False
.Filters.Add "Microsoft Excel Files", "*.xlsx", 1 'file nhan dinh dang xlsx
If Not .Show = -1 Then 'neu khong chon file nao
MsgBox "Ban Can chon file De Tong Hop Ket Qua", vbInformation, "CONG TY TNHH ???" 'thi hien thong bao
Exit Sub
End If

''''Set DicR = CreateObject("Scripting.Dictionary")

ReDim dArr(1 To 10000, 1 To CotMax)

For Each Item In .SelectedItems
If Left(Item, 1) <> "~" Then
Set Wb = Workbooks.Open(Item)
'For Each Ws In Wb.Worksheets
Set Ws = Wb.Sheets(1)
'Ws.ShowAllData
k = k + 1
dArr(k, 1) = k
dArr(k, 2) = Ws.[G2].Value
dArr(k, 3) = Ws.[G4].Value
dArr(k, 4) = Ws.[G6].Value
dArr(k, 5) = Ws.[G8].Value
dArr(k, 6) = Ws.[V6].Value
dArr(k, 7) = Ws.[AP8].Value
dArr(k, 8) = Ws.[AF8].Value
dArr(k, 9) = Ws.[AY8].Value
dArr(k, 10) = Ws.[V4].Value
dArr(k, 11) = Ws.[V2].Value
dArr(k, 12) = Ws.[bj10].Value
dArr(k, 13) = Ws.[bk10].Value
dArr(k, 14) = Ws.[bl10].Value
dArr(k, 15) = Ws.[bm10].Value
dArr(k, 16) = Ws.[bn10].Value
dArr(k, 17) = Ws.[bo10].Value
dArr(k, 18) = Ws.[bp10].Value
dArr(k, 19) = Ws.[bq10].Value
dArr(k, 20) = Ws.[br10].Value
dArr(k, 21) = Ws.[bs10].Value
' dArr(k, 22) = Ws.[bt10].Value
' dArr(k, 23) = Ws.[bu10].Value
' dArr(k, 24) = Ws.[bV10].Value
' dArr(k, 25) = Ws.[bw10].Value
'dArr(k, 26) = Ws.[bx10].Value
' dArr(k, 27) = Ws.[by10].Value
' dArr(k, 28) = Ws.[bz10].Value
' dArr(k, 29) = Ws.[ca10].Value
'dArr(k, 30) = Ws.[cb10].Value
'dArr(k, 31) = Ws.[cc10].Value
'dArr(k, 32) = Ws.[cd10].Value
' dArr(k, 33) = Ws.[ce10].Value
' dArr(k, 34) = Ws.[cf10].Value
'dArr(k, 35) = Ws.[cg10].Value
'dArr(k, 36) = Ws.[ch10].Value
'khi muon them thong tin so cau tra loi thi them so cot tuong ung

End If
'Next

Wb.Close
Next

End With
lR = WsM.Range("B" & Rows.Count).End(3).Row 'tim dong cuoi
If lR > 2 Then 'neu dong cuoi lon hon 2
WsM.Range("B3:B" & lR).Resize(, CotMax).Delete 'thi xoa
'thay ClearContents va cCotmax tu so thanh bien
End If

If k Then
With WsM
.Range("B3").Resize(k, CotMax).Value = dArr 'gan gia tri vao dArr
End With
End If


End Sub
 
Upvote 0
※Bạn nên Copy Code về sớm, do Topic này tôi đã chủ động Report (Nhờ Addmin BQT delete)
Bạn tham khảo Code:
Sub Load_File_NhapLieu()
Dim Fso As Object, Item, dArr, i, k, CotMax, lR As Long
Dim WsM, Ws As Worksheet, Wb As Workbook

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False

CotMax = 21 'so cot lay gia tri

On Error Resume Next

Set WsM = Sheet1 'TH ActiveSheet
WsM.ShowAllData

Set Fso = CreateObject("Scripting.FileSystemObject")

With Application.FileDialog(msoFileDialogFilePicker) 'chon file
.AllowMultiSelect = True 'False
.Filters.Add "Microsoft Excel Files", "*.xlsx", 1 'file nhan dinh dang xlsx
If Not .Show = -1 Then 'neu khong chon file nao
MsgBox "Ban Can chon file De Tong Hop Ket Qua", vbInformation, "CONG TY TNHH ???" 'thi hien thong bao
Exit Sub
End If

''''Set DicR = CreateObject("Scripting.Dictionary")

ReDim dArr(1 To 10000, 1 To CotMax)

For Each Item In .SelectedItems
If Left(Item, 1) <> "~" Then
Set Wb = Workbooks.Open(Item)
'For Each Ws In Wb.Worksheets
Set Ws = Wb.Sheets(1)
'Ws.ShowAllData
k = k + 1
dArr(k, 1) = k
dArr(k, 2) = Ws.[G2].Value
dArr(k, 3) = Ws.[G4].Value
dArr(k, 4) = Ws.[G6].Value
dArr(k, 5) = Ws.[G8].Value
dArr(k, 6) = Ws.[V6].Value
dArr(k, 7) = Ws.[AP8].Value
dArr(k, 8) = Ws.[AF8].Value
dArr(k, 9) = Ws.[AY8].Value
dArr(k, 10) = Ws.[V4].Value
dArr(k, 11) = Ws.[V2].Value
dArr(k, 12) = Ws.[bj10].Value
dArr(k, 13) = Ws.[bk10].Value
dArr(k, 14) = Ws.[bl10].Value
dArr(k, 15) = Ws.[bm10].Value
dArr(k, 16) = Ws.[bn10].Value
dArr(k, 17) = Ws.[bo10].Value
dArr(k, 18) = Ws.[bp10].Value
dArr(k, 19) = Ws.[bq10].Value
dArr(k, 20) = Ws.[br10].Value
dArr(k, 21) = Ws.[bs10].Value
' dArr(k, 22) = Ws.[bt10].Value
' dArr(k, 23) = Ws.[bu10].Value
' dArr(k, 24) = Ws.[bV10].Value
' dArr(k, 25) = Ws.[bw10].Value
'dArr(k, 26) = Ws.[bx10].Value
' dArr(k, 27) = Ws.[by10].Value
' dArr(k, 28) = Ws.[bz10].Value
' dArr(k, 29) = Ws.[ca10].Value
'dArr(k, 30) = Ws.[cb10].Value
'dArr(k, 31) = Ws.[cc10].Value
'dArr(k, 32) = Ws.[cd10].Value
' dArr(k, 33) = Ws.[ce10].Value
' dArr(k, 34) = Ws.[cf10].Value
'dArr(k, 35) = Ws.[cg10].Value
'dArr(k, 36) = Ws.[ch10].Value
'khi muon them thong tin so cau tra loi thi them so cot tuong ung

End If
'Next

Wb.Close
Next

End With
lR = WsM.Range("B" & Rows.Count).End(3).Row 'tim dong cuoi
If lR > 2 Then 'neu dong cuoi lon hon 2
WsM.Range("B3:B" & lR).Resize(, CotMax).Delete 'thi xoa
'thay ClearContents va cCotmax tu so thanh bien
End If

If k Then
With WsM
.Range("B3").Resize(k, CotMax).Value = dArr 'gan gia tri vao dArr
End With
End If


End Sub
Cám ơn bạn đã chia sẻ.
Tuy nhiên, khi bạn đã đăng bài lên diễn đàn thì nên để lại cho mọi người tham khảo.
Dữ liệu bạn đưa lên không ai yêu cầu bạn đưa dữ liệu thật, chỉ cần đưa dữ liệu giả định, vừa bảo đảm bảo mật thông tin cho bạn, vừa thuận tiện cho mọi người giúp đỡ.

Về code ở trên, tôi nghĩ:
- 1000 file mở lên rồi đóng lại chắc chạy mất kha khá thời gian.
- File bài 1 bạn yêu cầu tổng hợp có 8 cột, giờ thành 21 cột, sao nhiều vậy nhỉ?
 
Upvote 0
Cám ơn bạn đã chia sẻ.
Tuy nhiên, khi bạn đã đăng bài lên diễn đàn thì nên để lại cho mọi người tham khảo.
Dữ liệu bạn đưa lên không ai yêu cầu bạn đưa dữ liệu thật, chỉ cần đưa dữ liệu giả định, vừa bảo đảm bảo mật thông tin cho bạn, vừa thuận tiện cho mọi người giúp đỡ.

Về code ở trên, tôi nghĩ:
- 1000 file mở lên rồi đóng lại chắc chạy mất kha khá thời gian.
- File bài 1 bạn yêu cầu tổng hợp có 8 cột, giờ thành 21 cột, sao nhiều vậy nhỉ?
1. Thật ra thì code chạy cũng ổn (nó tự động lấy DL chứ không phải mở - đóng từng file)
2. Do có thay đổi phần lấy DL nên tôi đã tùy chỉnh lại Code.
 
Upvote 0
1. Thật ra thì code chạy cũng ổn (nó tự động lấy DL chứ không phải mở - đóng từng file)
2. Do có thay đổi phần lấy DL nên tôi đã tùy chỉnh lại Code.
Code có lệnh
Mở file: Set Wb = Workbooks.Open(Item)
Đóng file: Wb.Close
Với 1000 file mở rồi đóng, không ổn tí nào
 
Upvote 0
Web KT
Back
Top Bottom