Nhờ giúp đỡ Code để lấy các dữ liệu từ nhiều file nguồn (1 người xem)

Liên hệ QC

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

Thóc Sama

_/_/_/_/_/_/_/
Tham gia
23/7/16
Bài viết
568
Được thích
804
Giới tính
Nam
Nghề nghiệp
何でもする
Xin chào Anh, Chị
Các File nguồn(PO đặt hàng) của em có chung format . Hàng tháng bên bộ phận thu mua nguyên liệu phải lập-chỉnh sửa-phát hành nhiều PO.
Em muốn làm một file [Cap nhat DL]để tổng hợp lại các nội dung như phía dưới. Tuy nhiên để mở từng file nguồn copy và paste dữ liệu sẽ mất thời gian
Nhờ Anh, Chị Code dùm em theo nhu cầu mô tả như trong hình và file đính kèm nhé
Cảm ơn Anh, Chị nhiều!
1637989342916.png
 

File đính kèm

Trong lúc bạn chờ đợi các phương án tối ưu
Mình góp 1 phương án có bước thao tác chuột rất đơn giản dễ làm mà có sẵn của Excel luôn, nhẹ được chút nào hay chút đó bạn à
Bạn dùng tính năng move and copy của Excel để dồn các file nguồn về File Tổng
Untitled.png
 
Upvote 0
Upvote 0
Bác muốn có 1 file có Code để lấy dữ liệu trong file nguồn x để điền vào file Cập nhật hả? Trong file Nguồn 1 nếu có 10 dòng thì copy 10 dòng đó vào file cập nhật có cùng số PO, Nhà Cung Cấp.
 
Upvote 0
Bạn thử dùng PowerQuery xem thế nào.
Cảm ơn bạn đã gợi ý
Nếu được code thì tuyệt cú mèo. Vì cơ bản PO hay phải thay đổi - chỉnh sửa...
Mỗi lần như thế lại thao tác với PowerQuery thì cũng mất thời gian và dễ sai xót lắm!
Thân!
 
Upvote 0
Xin chào Anh, Chị
Các File nguồn(PO đặt hàng) của em có chung format . Hàng tháng bên bộ phận thu mua nguyên liệu phải lập-chỉnh sửa-phát hành nhiều PO.
Em muốn làm một file [Cap nhat DL]để tổng hợp lại các nội dung như phía dưới. Tuy nhiên để mở từng file nguồn copy và paste dữ liệu sẽ mất thời gian
Nhờ Anh, Chị Code dùm em theo nhu cầu mô tả như trong hình và file đính kèm nhé
Cảm ơn Anh, Chị nhiều!
View attachment 269720
@THÓC SAMA
Bạn xem ghi chú trong code để chỉnh vài chỗ cho đúng với dữ liệu trong máy bạn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bác muốn có 1 file có Code để lấy dữ liệu trong file nguồn x để điền vào file Cập nhật hả? Trong file Nguồn 1 nếu có 10 dòng thì copy 10 dòng đó vào file cập nhật có cùng số PO, Nhà Cung Cấp.
Mình muốn Code nằm trên file [Cap nhat DL] đấy bạn
"Trong file Nguồn 1 nếu có 10 dòng thì copy 10 dòng đó vào file cập nhật có cùng số PO, Nhà Cung Cấp."
=>đúng rồi bạn
 
Upvote 0
@THÓC SAMA
Bạn xem ghi chú trong code để chỉnh vài chỗ cho đúng với dữ liệu trong máy bạn.
Em cảm ơn bác
Code của mình Bác có thể tùy chỉnh theo lệnh chọn các file để thực thi lệnh tổng hợp giúp em với được không ạ!
Và có rất nhiều file nguồn (PO) ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn bác
Code của mình Bác có thể tùy chỉnh theo lệnh chọn các file để thực thi lệnh tổng hợp giúp em với được không ạ!
Và có rất nhiều file nguồn (PO) ạ
Bạn sửa, thêm tên file trong mảng arrF. Nếu nhiều quá thì dùng cách khác.
 
Upvote 0
Bạn sửa, thêm tên file trong mảng arrF. Nếu nhiều quá thì dùng cách khác.
Dạ, số file nguồn này không cố định bác ạ
vì hàng tháng có 2-3 chục cái PO
Nên em mới nhờ bác tùy chỉnh phần lấy nguồn đầu vào (tức là trước tiên phải chọn các file nguồn để tổng hợp ạ)
Em cảm ơn bác!
 
Upvote 0
Dạ, số file nguồn này không cố định bác ạ
vì hàng tháng có 2-3 chục cái PO
Nên em mới nhờ bác tùy chỉnh phần lấy nguồn đầu vào (tức là trước tiên phải chọn các file nguồn để tổng hợp ạ)
Em cảm ơn bác!
Bạn để tất cả file nguồn vào 1 folder (Sửa đường dẫn lại và folder không được chứa các file khác, kể cả file CapNhat) rồi chạy code
 

File đính kèm

Upvote 0
Bạn để tất cả file nguồn vào 1 folder (Sửa đường dẫn lại và folder không được chứa các file khác, kể cả file CapNhat) rồi chạy code
Vâng
File nguồn nếu để ở máy cá nhân thì chạy được rồi
khi file nguồn để trên server thì không chay được ạ
đường dẫn kiểu thế này bác ạ
\\SERVER\ASHIMORI (Airbag)\2.San xuat\QUẢN LÝ SẢN XUẤT 生産管理\4. NHẬP NVL 部材入庫\PO
Có cách nào khắc phục không bác nhỉ?
 
Upvote 0
Vâng
File nguồn nếu để ở máy cá nhân thì chạy được rồi
khi file nguồn để trên server thì không chay được ạ
đường dẫn kiểu thế này bác ạ
\\SERVER\ASHIMORI (Airbag)\2.San xuat\QUẢN LÝ SẢN XUẤT 生産管理\4. NHẬP NVL 部材入庫\PO
Có cách nào khắc phục không bác nhỉ?
Chà, chuyện đó tôi không rành và cũng không có mạng LAN để thử.
 
Upvote 0
Chà, chuyện đó tôi không rành và cũng không có mạng LAN để thử.
Vâng,
trân thành cảm ơn bác ạ!
Bài đã được tự động gộp:

Theo tôi hiểu thì máy cá nhân nếu kết nối với Server qua mang LAN của Cty thì sẽ chạy được nhưng nếu dùng mạng khác thì phải cài thêm VPN. không biết có phải trường hợp của bạn không.
Vâng
Phần này em cũng mù tịt bác ạ!
 
Upvote 0
Vâng
File nguồn nếu để ở máy cá nhân thì chạy được rồi
khi file nguồn để trên server thì không chay được ạ
đường dẫn kiểu thế này bác ạ
\\SERVER\ASHIMORI (Airbag)\2.San xuat\QUẢN LÝ SẢN XUẤT 生産管理\4. NHẬP NVL 部材入庫\PO
Có cách nào khắc phục không bác nhỉ?
Hay là khi nào cần thì bạn cứ chép hết file về máy cá nhân rồi chạy code.
 
Upvote 0
Em thử Map Network Drive cái đường dẫn xem, và trong đường dẫn không sử dụng dấu tiếng việt, rồi thử chạy code của bạn Maika xem, vì code ghép file kỵ nhất đường dẫn, tên file có dấu tiếng việt
Dạ quả thực thế đó bác
đường dẫn của em có dấu tiếng việt, dấu cách, và cả tiếng Nhật nữa
Khoai thật!
Bài đã được tự động gộp:

mở bằng tay thì excel có mở được file đó không?
Em chưa hiểu ý bác lắm!
 
Upvote 0
Bạn để tất cả file nguồn vào 1 folder (Sửa đường dẫn lại và folder không được chứa các file khác, kể cả file CapNhat) rồi chạy code
Tôi cũng rất quan tâm đến vấn đề này. Xin hỏi Các Anh chị em là: Nếu các file nguồn kia số lượng cũng tương đối nhiều ( gần 200 file như vậy) và đều có dạng Nguon x.slxs nằm dải rác trong cùng một ổ đĩa. Thì làm thế nào để lấy số liệu ở các file đó mà không cần phải gom chung về cùng 1 folder có được không? Nếu phải gom chung thì code thế nào?
Nếu anh chị nào biết có thể cho tôi xin code của cả hai trường hợp trên? Xin trân trọng cảm ơn!
Code tôi đã làm nhưng báo lỗi.
Mã:
Sub LayBosungDoten()

Dim fso As Object
Dim Ws As Worksheet
Dim tenShMoi As String
Dim WbNguon As Workbook

Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder("C:\Users\Admin\Downloads\").Files
    If file.Name Like "* PCGD" & "*.xls" Then
        Set wbMoi = Workbooks.Open(file.Name)     '======Bi lôi dong này "không tim thây, có thê đa đôi ten, di chuyên hoac đa xoa"
        For Each Ws In WbNguon.Sheets
            If Ws.Name = "XXXXXXX....." Then
               '....lay dư liêu vê Sh tông hop
               ' Bô sung dư liêu cho Ws
               ' đôi tên sheet
               
               ''tenShMoi = "PCGD" & t & ".xlsx"
            End If
        Next Ws
    End If
Next file
Set fso = Nothing
End Sub
 
Upvote 0
Tôi cũng rất quan tâm đến vấn đề này. Xin hỏi Các Anh chị em là: Nếu các file nguồn kia số lượng cũng tương đối nhiều ( gần 200 file như vậy) và đều có dạng Nguon x.slxs nằm dải rác trong cùng một ổ đĩa. Thì làm thế nào để lấy số liệu ở các file đó mà không cần phải gom chung về cùng 1 folder có được không? Nếu phải gom chung thì code thế nào?
Nếu anh chị nào biết có thể cho tôi xin code của cả hai trường hợp trên? Xin trân trọng cảm ơn!
Code tôi đã làm nhưng báo lỗi.
Mã:
Sub LayBosungDoten()

Dim fso As Object
Dim Ws As Worksheet
Dim tenShMoi As String
Dim WbNguon As Workbook

Set fso = CreateObject("Scripting.FileSystemObject")
For Each file In CreateObject("Scripting.FileSystemObject").GetFolder("C:\Users\Admin\Downloads\").Files
    If file.Name Like "* PCGD" & "*.xls" Then
        Set wbMoi = Workbooks.Open(file.Name)     '======Bi lôi dong này "không tim thây, có thê đa đôi ten, di chuyên hoac đa xoa"
        For Each Ws In WbNguon.Sheets
            If Ws.Name = "XXXXXXX....." Then
               '....lay dư liêu vê Sh tông hop
               ' Bô sung dư liêu cho Ws
               ' đôi tên sheet
              
               ''tenShMoi = "PCGD" & t & ".xlsx"
            End If
        Next Ws
    End If
Next file
Set fso = Nothing
End Sub
Chỉnh tí xíu
Set wbMoi = Workbooks.Open(file)
 
Upvote 0
Chỉnh tí xíu
Set wbMoi = Workbooks.Open(file)
Cảm ơn Anh. Nhờ sự chỉ giáo của Anh mà tôi đã làm được phần tìm kiếm các file nằm dải rác. Còn phần Gom các file có chung đặc điểm (VD: "PCGD...slsx) vào một folderthif vẫn chưa mày mò ra được. Nếu có thể mong Anh chị em chỉ giúp.
Trân trọng.
 
Upvote 0
Em chào Anh, Chị
Rất cảm ơn mọi người đã nhiệt tình hỗ trợ ạ
Qua Topic này, em đã nhận được kết quả như mong muốn của một "người lạ" ạ.
Em xin chia sẽ Code để mọi người tham khảo nhé!

Option Explicit
Option Private Module

Public Sub Load_File_Data()
Dim FOb As Object, fso As Object, Item, Path As String, Rw As Long, CotMax, lR As Long
Dim NgayN, MaN, TenN, sArr, dArr, I As Long, K As Long, J As Long, Home
Dim WsM As Worksheet, Ws As Worksheet, Wb As Workbook, Stt

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

On Error Resume Next

CotMax = 11

Set WsM = ActiveSheet
WsM.ShowAllData

Set fso = CreateObject("Scripting.FileSystemObject")

With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True 'False
.Filters.Add "Microsoft Excel Files", "*.xls*", 1
If Not .Show = -1 Then
MsgBox "Ban chua chon File", vbInformation, "???"
Exit Sub
End If

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

ReDim dArr(1 To 100000, 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
lR = Ws.Range("B" & Rows.Count).End(3).Row
sArr = Ws.Range("B22:B" & lR).Resize(, 8).Value
Stt = Stt + 1
For I = 1 To UBound(sArr)
If Len(sArr(I, 1)) Then
K = K + 1
dArr(K, 1) = Stt
dArr(K, 2) = Trim(Mid(Ws.Range("I1").Value, 6, 200))
dArr(K, 3) = CDate(Mid(Ws.Range("I2").Value, 7, 10))
dArr(K, 4) = Mid(Ws.Range("A7").Value, 5, 500)
dArr(K, 5) = sArr(I, 1)
dArr(K, 6) = sArr(I, 2)
dArr(K, 7) = sArr(I, 3)
dArr(K, 8) = Val(sArr(I, 4))
dArr(K, 9) = Val(sArr(I, 5))
dArr(K, 10) = Val(sArr(I, 6))
dArr(K, 11) = sArr(I, 7)
End If
Next
'Next

Wb.Close
End If
Next

End With
lR = WsM.Range("B" & Rows.Count).End(3).Row
If lR > 3 Then
With WsM
With .Range("B4:B" & lR).Resize(, CotMax)
.ClearContents
.Borders.LineStyle = 0
End With
End With
End If

If K Then
With WsM
.Range("B4").Resize(K, CotMax).Value = dArr
.Range("B3").Resize(K + 1, CotMax).Borders.Color = RGB(192, 192, 192)
End With
End If

Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
 
Upvote 0
Em chào Anh, Chị
Rất cảm ơn mọi người đã nhiệt tình hỗ trợ ạ
Qua Topic này, em đã nhận được kết quả như mong muốn của một "người lạ" ạ.
Em xin chia sẽ Code để mọi người tham khảo nhé!

Option Explicit
Option Private Module

Public Sub Load_File_Data()
Dim FOb As Object, fso As Object, Item, Path As String, Rw As Long, CotMax, lR As Long
Dim NgayN, MaN, TenN, sArr, dArr, I As Long, K As Long, J As Long, Home
Dim WsM As Worksheet, Ws As Worksheet, Wb As Workbook, Stt

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

On Error Resume Next

CotMax = 11

Set WsM = ActiveSheet
WsM.ShowAllData

Set fso = CreateObject("Scripting.FileSystemObject")

With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True 'False
.Filters.Add "Microsoft Excel Files", "*.xls*", 1
If Not .Show = -1 Then
MsgBox "Ban chua chon File", vbInformation, "???"
Exit Sub
End If

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

ReDim dArr(1 To 100000, 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
lR = Ws.Range("B" & Rows.Count).End(3).Row
sArr = Ws.Range("B22:B" & lR).Resize(, 8).Value
Stt = Stt + 1
For I = 1 To UBound(sArr)
If Len(sArr(I, 1)) Then
K = K + 1
dArr(K, 1) = Stt
dArr(K, 2) = Trim(Mid(Ws.Range("I1").Value, 6, 200))
dArr(K, 3) = CDate(Mid(Ws.Range("I2").Value, 7, 10))
dArr(K, 4) = Mid(Ws.Range("A7").Value, 5, 500)
dArr(K, 5) = sArr(I, 1)
dArr(K, 6) = sArr(I, 2)
dArr(K, 7) = sArr(I, 3)
dArr(K, 8) = Val(sArr(I, 4))
dArr(K, 9) = Val(sArr(I, 5))
dArr(K, 10) = Val(sArr(I, 6))
dArr(K, 11) = sArr(I, 7)
End If
Next
'Next

Wb.Close
End If
Next

End With
lR = WsM.Range("B" & Rows.Count).End(3).Row
If lR > 3 Then
With WsM
With .Range("B4:B" & lR).Resize(, CotMax)
.ClearContents
.Borders.LineStyle = 0
End With
End With
End If

If K Then
With WsM
.Range("B4").Resize(K, CotMax).Value = dArr
.Range("B3").Resize(K + 1, CotMax).Borders.Color = RGB(192, 192, 192)
End With
End If

Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
Cảm ơn bạn đã chia sẻ code, cho mình hỏi thêm chút là code này đặt ở trong file tổng hợp (file đích) đúng không bạn,
khi code hoạt động thì mình phải chọn đến folder nơi chứa các file có dữ liệu (file nguồn) à
bạn có thể mô tả qua cách hoạt động code này được không bạn?
Rất cảm ơn bạn
 
Upvote 0
Cảm ơn bạn đã chia sẻ code, cho mình hỏi thêm chút là code này đặt ở trong file tổng hợp (file đích) đúng không bạn,
khi code hoạt động thì mình phải chọn đến folder nơi chứa các file có dữ liệu (file nguồn) à
bạn có thể mô tả qua cách hoạt động code này được không bạn?
Rất cảm ơn bạn
Vâng
File tổng hợp chứa code
khi run code thì sẽ hiện hộp thoại để mình chỉ đến file nguồn (các PO)
1. không chọn file nào thì hủy lệnh (msg chưa chọn file)
2. Nếu chọn file nguồn thì thực thi lệnh như yêu cầu #1
Tổng quan là thế, phần chi tiết và hướng viết code của tác giả bạn xem #26 nhé!
Bạn cũng có thể down file về ở #1 + Code ở #26 rồi nghiên cứu thêm ha.
Thân!
 
Upvote 0
Vâng
File tổng hợp chứa code
khi run code thì sẽ hiện hộp thoại để mình chỉ đến file nguồn (các PO)
1. không chọn file nào thì hủy lệnh (msg chưa chọn file)
2. Nếu chọn file nguồn thì thực thi lệnh như yêu cầu #1
Tổng quan là thế, phần chi tiết và hướng viết code của tác giả bạn xem #26 nhé!
Bạn cũng có thể down file về ở #1 + Code ở #26 rồi nghiên cứu thêm ha.
Thân!
Cảm ơn bạn đã hướng dẫn tận tình, file rất hữu ích. Vậy là quá đủ cho nhu cầu rồi
Nhưng Nếu sau này có điều kiện bạn nâng cấp được lên thành, code trỏ đến folder lấy toàn bộ dữ liệu các file nằm trong folder đưa dữ liệu về file đích
 
Upvote 0

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

Back
Top Bottom