Cập nhập dữ liệu từ 1 workbook khác vào báo cáo tổng hợp (1 người xem)

Liên hệ QC

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

Kool_Kool

Thành viên chính thức
Tham gia
12/6/15
Bài viết
83
Được thích
1
Nhờ các cao thủ ghé ngang giúp đỡ vấn đề sau :
Mình muốn cập nhập dữ liệu từ một File Data vào File tổng hợp. File Data có nhiều tháng. Mình muốn nhập tháng 1 vào file tổng hợp và kích cập nhập dữ liệu sẽ được dò tìm ở File Data và cập nhập. Mong Anh Chị giúp đỡ VBA code . Cám ơn.
 

File đính kèm

Nhờ các cao thủ ghé ngang giúp đỡ vấn đề sau :
Mình muốn cập nhập dữ liệu từ một File Data vào File tổng hợp. File Data có nhiều tháng. Mình muốn nhập tháng 1 vào file tổng hợp và kích cập nhập dữ liệu sẽ được dò tìm ở File Data và cập nhập. Mong Anh Chị giúp đỡ VBA code . Cám ơn.
Nhờ các cao thủ ghé ngang giúp đỡ vấn đề sau :
Mình muốn cập nhập dữ liệu từ một File Data vào File tổng hợp. File Data có nhiều tháng. Mình muốn nhập tháng 1 vào file tổng hợp và kích cập nhập dữ liệu sẽ được dò tìm ở File Data và cập nhập. Mong Anh Chị giúp đỡ VBA code . Cám ơn.
Có cao thủ nào trợ giúp giúp mình
 
Upvote 0
Bạn chờ đi,tôi thấy có 4 người đọc file rồi.Nhưng hay chắc chắn cấu trúc dữ liệu ở 2 file là đúng với dữ liệu thực.tránh phải sửa đi sửa lại nhiều lần
 
Upvote 0
Bạn chờ đi, tôi thấy có 4 người đọc file rồi. Nhưng hãy chắc chắn cấu trúc dữ liệu ở 2 file là đúng với dữ liệu thực. Tránh phải sửa đi sửa lại nhiều lần
Nếu không có từ "nhờ các cao thủ" thì mình cũng định thử xem thế nào.
 
Lần chỉnh sửa cuối:
Upvote 0
Mong nhận được sự giúp đỡ
Code VBA thì viết được,Nhưng cấu trúc dữ liệu bạn vậy thì tôi cũng viết cho bạn đơn giản.Bạn thao khảo rồi sửa cho đúng cấu trúc dữ liệu thật!
Nhưng có một số chú ý:
1.Nếu là dùng code VBA mở file rồi lấy dữ liệu sao bạn không lấy hết 1 lần vào file chính?rồi lấy dữ liệu theo tháng bằng công thức ( Không lẽ có 12 tháng cứ mở file 12 lần vầy)
2.còn muốn lấy dữ liệu không mở file thì bạn có thể tìm hiểu ADO (Cái này tôi không rành )
 
Upvote 0
Bạn tham khảo file
 

File đính kèm

Upvote 0
Upvote 0
Nhờ các cao thủ ghé ngang giúp đỡ vấn đề sau :
Mình muốn cập nhập dữ liệu từ một File Data vào File tổng hợp. File Data có nhiều tháng. Mình muốn nhập tháng 1 vào file tổng hợp và kích cập nhập dữ liệu sẽ được dò tìm ở File Data và cập nhập. Mong Anh Chị giúp đỡ VBA code . Cám ơn.
Gửi các bạn @ongke0711, @Kiều Mạnh, @thuyyeu99 là ta có thể dùng ADO để làm bài toán này không?
 
Upvote 0
Cám ơn diễn đàn đã giúp đỡ. Mình đã cho code của bạn @Cu Tồ hỗ trợ vào File. Đã chạy được nhưng có một số điểm chưa như ý. Cả nhà giúp mình nhé.
- Mục đính của mình cần là chỉ cần lấy dữ liệu tổng của chi nhánh điền vào báo cáo tổng hợp ( Chi nhánh có 12 tháng , Báo cáo tổng hợp chọn tháng nào thì lấy dữ liệu tháng đó từ Data Chi nhánh"
- Mình có nhiều Chi nhánh nên các bạn tư vấn giúp Code để bấm vào nút Input1 thi sẽ hiện lên đường dẫn để chọn Data của chi nhánh đó
Cảm phiền diễn đàn giúp đỡ thêm.
 

File đính kèm

Upvote 0
Gửi các bạn @ongke0711, @Kiều Mạnh, @thuyyeu99 là ta có thể dùng ADO để làm bài toán này không?
với anh @Hai Lúa Miền Tây và mấy bác ADO chắc dễ,anh làm thử đi em học hỏi luôn
Bạn chờ đi các thành viên trong diễn đàn có kinh nghiêm giúp bạn code tối ưu nhất nha
 
Upvote 0
...
Bạn chờ đi các thành viên trong diễn đàn có kinh nghiêm giúp bạn code tối ưu nhất nha
Từ bảng này sang bảng kia thì Power Query mới là u tối nhất.
Nhưng Power Query thì cỡ "cao thủ" còn chật vật. Phải "chơn nhơn" mới xứng đáng tên gọi.
Ủa nhầm rồi, tối u chứ không phải u tối.
 
Upvote 0
Từ bảng này sang bảng kia thì Power Query mới là u tối nhất.
yêu cầu đầy đủ hiện tại của bạn ấy là :
Bạn ấy có 1 danh sách các chi nhánh trong folder .mỗi chi nhanh có 12 tháng sao ấy.và yêu cầu mở đúng file chi nhánh đã chọn + lấy dữ liệu đúng tháng đã chọn
Yêu cầu đầu tiên #1
là mở file lấy dữ liệu theo tháng đã định.nên em mới bảo là nếu lấy dữ liệu ở file đang đóng mà không cần mở file (tương đối thôi) thì tham khảo ADO (có chú thích là cái này em không có rành (thì cũng không biết mức độ khó dễ như thế nào)
* còn yêu cầu hiện tại thì khác với yêu cầu ở bài #1 rồi
Bài đã được tự động gộp:

Nhưng Power Query thì cỡ "cao thủ" còn chật vật

Với lại box lập trình mà tìm code tối ưu là đúng mà bác,mà cũng có các thành viên có kinh nghiệm trong diễn đàn tham gia bài này nên em xin đứng ngoài nghe bác tư vấn và học hỏi code từ các thành viên có kinh nghiệm.Bài này theo bác thì nên làm như nào cho hợp lý
 
Upvote 0
...
Với lại box lập trình mà tìm code tối ưu là đúng mà bác,mà cũng có các thành viên có kinh nghiệm trong diễn đàn tham gia bài này nên em xin đứng ngoài nghe bác tư vấn và học hỏi code từ các thành viên có kinh nghiệm.Bài này theo bác thì nên làm như nào cho hợp lý
Tối u hay u tối gì cũng đầy tính chất tương đối và chủ quan. Đối với bạn code chạy vèo vài phần ngàn giây là tối u. Đối với tôi code dễ diễn giải sát với yêu cầu là tối u. Đối với anh A code ngắn nhất là tối u.
Tôi có phải "cao thủ" đâu. Ý của tôi không bao giờ hợp lý cả.
 
Upvote 0
Đối với bạn code chạy vèo vài phần ngàn giây là tối u. Đối với tôi code dễ diễn giải sát với yêu cầu là tối u
Với trường hợp này thì em nghĩ đúng ý tác giả là tối ưu thôi.mà bài này em chờ xem code mấy bác ở trên học thôi
 
Upvote 0
Từ bảng này sang bảng kia thì Power Query mới là u tối nhất.
Nhưng Power Query thì cỡ "cao thủ" còn chật vật. Phải "chơn nhơn" mới xứng đáng tên gọi.
Ủa nhầm rồi, tối u chứ không phải u tối.
Bài này dùng Power Query clean data thì dễ, kết hợp power pivot thì ra đúng mẫu
Cám ơn diễn đàn đã giúp đỡ. Mình đã cho code của bạn @Cu Tồ hỗ trợ vào File. Đã chạy được nhưng có một số điểm chưa như ý. Cả nhà giúp mình nhé.
- Mục đính của mình cần là chỉ cần lấy dữ liệu tổng của chi nhánh điền vào báo cáo tổng hợp ( Chi nhánh có 12 tháng , Báo cáo tổng hợp chọn tháng nào thì lấy dữ liệu tháng đó từ Data Chi nhánh"
- Mình có nhiều Chi nhánh nên các bạn tư vấn giúp Code để bấm vào nút Input1 thi sẽ hiện lên đường dẫn để chọn Data của chi nhánh đó
Cảm phiền diễn đàn giúp đỡ thêm.
Làm vui thôi sử dụng Power query và power pivot:
- Để tất cả các file Data trong folder "d:\excel\", các file data phải cùng mẫu và tên file viết đúng dạng "DATA_CHI_NHANH_(n)" ví dụ : DATA_CHI_NHANH_1.xlsx, DATA_CHI_NHANH_2.xlsx, DATA_CHI_NHANH_3.xlsx.....hiện đang cài mặc định có thể connect 20 file, có thể chỉnh bao nhiêu cũng được, thêm file hay thay đổi dữ liệu refresh bảng Table pivot là được
- Có thể dùng cách connect folder cũng được nhưng clean data sẽ khó hơn chút
 

File đính kèm

Upvote 0
Bài này dùng Power Query clean data thì dễ, kết hợp power pivot thì ra đúng mẫu

Làm vui thôi sử dụng Power query và power pivot:
- Để tất cả các file Data trong folder "d:\excel\", các file data phải cùng mẫu và tên file viết đúng dạng "DATA_CHI_NHANH_(n)" ví dụ : DATA_CHI_NHANH_1.xlsx, DATA_CHI_NHANH_2.xlsx, DATA_CHI_NHANH_3.xlsx.....hiện đang cài mặc định có thể connect 20 file, có thể chỉnh bao nhiêu cũng được, thêm file hay thay đổi dữ liệu refresh bảng Table pivot là được
- Có thể dùng cách connect folder cũng được nhưng clean data sẽ khó hơn chút
Anh có thể hướng dẫn cách làm hoặc quay video được không Anh?
Em cảm ơn Anh nhiều!
 
Upvote 0
Bài này dùng Power Query clean data thì dễ, kết hợp power pivot thì ra đúng mẫu

Làm vui thôi sử dụng Power query và power pivot:
- Để tất cả các file Data trong folder "d:\excel\", các file data phải cùng mẫu và tên file viết đúng dạng "DATA_CHI_NHANH_(n)" ví dụ : DATA_CHI_NHANH_1.xlsx, DATA_CHI_NHANH_2.xlsx, DATA_CHI_NHANH_3.xlsx.....hiện đang cài mặc định có thể connect 20 file, có thể chỉnh bao nhiêu cũng được, thêm file hay thay đổi dữ liệu refresh bảng Table pivot là được
- Có thể dùng cách connect folder cũng được nhưng clean data sẽ khó hơn chút
Cám ơn @huonglien1901 đã trợ giúp. Tuy nhiên File dữ liêu Chi nhánh được lưu ở nhiều Folder của Chi nhánh và được cập nhập liên tục . Do đó mình cần bấm vào nut input xong se xuất hiện link chon đường dẫn click vào File thì dữ liệu sẽ dò tìm và copy paste vào File báo cáo tổng hợp.
Cả nhà hướng dẫn giúp .
 
Upvote 0
Cám ơn @huonglien1901 đã trợ giúp. Tuy nhiên File dữ liêu Chi nhánh được lưu ở nhiều Folder của Chi nhánh và được cập nhập liên tục . Do đó mình cần bấm vào nut input xong se xuất hiện link chon đường dẫn click vào File thì dữ liệu sẽ dò tìm và copy paste vào File báo cáo tổng hợp.
Cả nhà hướng dẫn giúp .
Tôi làm vui thôi, tôi để chung folder cho đơn giản, chứ connect khác folder dù Local hay Cloud đều được tạo thêm cái list path.

Anh có thể hướng dẫn cách làm hoặc quay video được không Anh?
Em cảm ơn Anh nhiều!
Bạn xem video này:
 
Upvote 0
- Mục đính của mình cần là chỉ cần lấy dữ liệu tổng của chi nhánh điền vào báo cáo tổng hợp ( Chi nhánh có 12 tháng , Báo cáo tổng hợp chọn tháng nào thì lấy dữ liệu tháng đó từ Data Chi nhánh"
- Mình có nhiều Chi nhánh nên các bạn tư vấn giúp Code để bấm vào nút Input1 thi sẽ hiện lên đường dẫn để chọn Data của chi nhánh đó
Cảm phiền diễn đàn giúp đỡ thêm.

Gửi các bạn @ongke0711, @Kiều Mạnh, @thuyyeu99 là ta có thể dùng ADO để làm bài toán này không?

Thử làm cách khác dùng kết hợp ADO nhé. Cách thức tôi xử lý là:
- Mở Workbook chi nhánh, dò cột B để lấy thông tin các tháng có trong đó và vị trí dòng bắt đầu của tháng đó (lưu vào Dictionary). Mục đích để xác định Range lấy dữ liệu theo tháng cho ADO Recordset.
dict.png
- Lấy toàn bộ dữ liệu các tháng của chi nhánh vào ADO Recordset lưu vào bộ nhớ có kèm cột ngày tháng để dùng Filter sau này. Duyệt qua Dict và dùng Union query để nối recordset các tháng.
- Chọn tháng để gán dữ liệu từ ADO Recorset.Filter xuống Sheet.
Để chạy không bị sai, bị lỗi thì các bảng dữ liệu phải đồng nhất, tên Sheet không dấu, không khoảng trắng, cột chứa thông số Tháng luôn là cột B.

 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thử làm cách khác dùng kết hợp ADO nhé. Cách thức tôi xử lý là:
- Mở Workbook chi nhánh, dò cột B để lấy thông tin các tháng có trong đó và vị trí dòng bắt đầu của tháng đó (lưu vào Dictionary). Mục đích để xác định Range lấy dữ liệu theo tháng cho ADO Recordset.
View attachment 250942
- Lấy toàn bộ dữ liệu các tháng của chi nhánh vào ADO Recordset lưu vào bộ nhớ có kèm cột ngày tháng để dùng Filter sau này. Duyệt qua Dict và dùng Union query để nối recordset các tháng.
- Chọn tháng để gán dữ liệu từ ADO Recorset.Filter xuống Sheet.
Để chạy không bị sai, bị lỗi thì các bảng dữ liệu phải đồng nhất, tên Sheet không dấu, không khoảng trắng, cột chứa thông số Tháng luôn là cột B.

Máy tôi khi chọn ngày 01/04/2020 thì nó hỏng có ra. Có thể do khác định dạng kiểu ngày tháng?
Tôi áp dụng bài này để tìm kiếm, có thể ra kết quả tương đối.
 
Upvote 0
Upvote 0
Oh..có thể lỗi là do tôi quên trả lại Recordset ban đầu để thực hiện nhiệm vụ Filter kế tiếp.
rs.Filter = adFilterNone
Cách khác là tôi áp dụng tìm kiếm như bài trên tôi đưa liên kết. Khi tìm được ngày thì sẽ di chuyển con trỏ xuống 2 dòng rồi lấy 76 dòng tiếp theo. Tuy nhiên chỉ là tương đối.
 
Upvote 0
Cách khác là tôi áp dụng tìm kiếm như bài trên tôi đưa liên kết. Khi tìm được ngày thì sẽ di chuyển con trỏ xuống 2 dòng rồi lấy 76 dòng tiếp theo. Tuy nhiên chỉ là tương đối.

Theo tôi biết thì Find nó sẽ trả về vị trí record nó tìm thấy đầu tiên thoả điều kiện. Nếu dữ liệu không được sắp xếp theo điều kiện thì tôi chưa biết nó có trả về recordset đúng không? Tôi chưa thử nghiệm trường hợp này. Dùng Find nếu điều kiện tìm kiếm là duy nhất thì chắc chắn đúng.
 
Upvote 0
Theo tôi biết thì Find nó sẽ trả về vị trí record nó tìm thấy đầu tiên thoả điều kiện. Nếu dữ liệu không được sắp xếp theo điều kiện thì tôi chưa biết nó có trả về recordset đúng không? Tôi chưa thử nghiệm trường hợp này. Dùng Find nếu điều kiện tìm kiếm là duy nhất thì chắc chắn đúng.
Chính xác là sẽ tìm thấy và trả về giá trị đầu tiên thỏa điều kiện. Còn nếu tìm đến vị trí tiếp theo thì phải dùng vòng lặp duyệt qua.
 
Upvote 0
Cái này theo mình dùng query tổng hợp là ngon. Chắc file Data của bạn chủ topic là Record của chương trình, dữ liệu đầu vào đã chuẩn hóa rồi.
 
Upvote 0
Tôi làm vui thôi, tôi để chung folder cho đơn giản, chứ connect khác folder dù Local hay Cloud đều được tạo thêm cái list path.


Bạn xem video này:
Anh ơi! Cho em hỏi trường hợp mình muốn tổng hợp nhiều bảng sử dụng power query được không Anh?
 
Upvote 0
Thử làm cách khác dùng kết hợp ADO nhé. Cách thức tôi xử lý là:
- Mở Workbook chi nhánh, dò cột B để lấy thông tin các tháng có trong đó và vị trí dòng bắt đầu của tháng đó (lưu vào Dictionary). Mục đích để xác định Range lấy dữ liệu theo tháng cho ADO Recordset.
View attachment 250942
- Lấy toàn bộ dữ liệu các tháng của chi nhánh vào ADO Recordset lưu vào bộ nhớ có kèm cột ngày tháng để dùng Filter sau này. Duyệt qua Dict và dùng Union query để nối recordset các tháng.
- Chọn tháng để gán dữ liệu từ ADO Recorset.Filter xuống Sheet.
Để chạy không bị sai, bị lỗi thì các bảng dữ liệu phải đồng nhất, tên Sheet không dấu, không khoảng trắng, cột chứa thông số Tháng luôn là cột B.

Máy tôi khi chọn ngày 01/04/2020 thì nó hỏng có ra. Có thể do khác định dạng kiểu ngày tháng?
Tôi áp dụng bài này để tìm kiếm, có thể ra kết quả tương đối.
Cám ơn bạn đã trợ giúp.
 
Upvote 0
Thử làm cách khác dùng kết hợp ADO nhé. Cách thức tôi xử lý là:
- Mở Workbook chi nhánh, dò cột B để lấy thông tin các tháng có trong đó và vị trí dòng bắt đầu của tháng đó (lưu vào Dictionary). Mục đích để xác định Range lấy dữ liệu theo tháng cho ADO Recordset.
View attachment 250942
- Lấy toàn bộ dữ liệu các tháng của chi nhánh vào ADO Recordset lưu vào bộ nhớ có kèm cột ngày tháng để dùng Filter sau này. Duyệt qua Dict và dùng Union query để nối recordset các tháng.
- Chọn tháng để gán dữ liệu từ ADO Recorset.Filter xuống Sheet.
Để chạy không bị sai, bị lỗi thì các bảng dữ liệu phải đồng nhất, tên Sheet không dấu, không khoảng trắng, cột chứa thông số Tháng luôn là cột B.

đang suy nghĩ tại sao xài ADO rồi ko xài luôn đi mà còn Workbooks.Open
 
Upvote 0
Upvote 0
Anh đã có kết quả dùng ADO chưa, nếu chưa thì có thể theo gợi ý của bài viết bên trên của em đó.
đang tính viết lại cái Workbooks.Open của bài số 23 xong tính tiếp vì thấy 2 file có cấu trúc Data và tên Sheet giống nhau
thay nó là SQL sau xong cho vào Array duyệt lấy Date cho vào Combobox

Mã:
SQL = "SELECT [F2] FROM [CHI_NHANH_1$]"

thấy bài này cũng hay nếu có thời gian viết lại thành SQL tùy chọn cũng hay
 
Upvote 0
đang tính viết lại cái Workbooks.Open của bài số 23 xong tính tiếp vì thấy 2 file có cấu trúc Data và tên Sheet giống nhau
thay nó là SQL sau xong cho vào Array duyệt lấy Date cho vào Combobox

Mã:
SQL = "SELECT [F2] FROM [CHI_NHANH_1$]"

thấy bài này cũng hay nếu có thời gian viết lại thành SQL tùy chọn cũng hay
Kiểu dữ liệu của F2 không phải dạng ngày tháng nên cần phải lưu ý thêm.
 
Upvote 0
Kiểu dữ liệu của F2 không phải dạng ngày tháng nên cần phải lưu ý thêm.
đang thử vầy nè ... xem sao xong tính tiếp
Mã:
Public Sub GetDate()
    Dim Rst As Object, SQL As String
    Dim Strcon As String, ExcelPath As String
    Dim RecCount  As Long
    Dim dArr() As Variant, Arr() As Variant
    Dim i As Long, J As Long, k As Long
    ExcelPath = ThisWorkbook.Path & "\DATA_CHI_NHANH_1.xlsx"
    SQL = "SELECT [F2] FROM [CHI_NHANH_1$]"
    
    Set Rst = CreateObject("ADODB.Recordset")
    Strcon = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ExcelPath _
                & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
                
    Rst.Open SQL, Strcon, 3, 1
    RecCount = Rst.RecordCount
    If Not Rst.EOF Then
        Arr = Rst.GetRows(RecCount)
        For i = 0 To UBound(Arr, 2)
            If IsDate(Arr(0, i)) Then
                MsgBox Arr(0, i)
            End If
        Next i
    End If
    Rst.Close: Set Rst = Nothing
End Sub
 
Upvote 0
đang thử vầy nè ... xem sao xong tính tiếp
Mã:
Public Sub GetDate()
    Dim Rst As Object, SQL As String
    Dim Strcon As String, ExcelPath As String
    Dim RecCount  As Long
    Dim dArr() As Variant, Arr() As Variant
    Dim i As Long, J As Long, k As Long
    ExcelPath = ThisWorkbook.Path & "\DATA_CHI_NHANH_1.xlsx"
    SQL = "SELECT [F2] FROM [CHI_NHANH_1$]"
   
    Set Rst = CreateObject("ADODB.Recordset")
    Strcon = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ExcelPath _
                & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;"";")
               
    Rst.Open SQL, Strcon, 3, 1
    RecCount = Rst.RecordCount
    If Not Rst.EOF Then
        Arr = Rst.GetRows(RecCount)
        For i = 0 To UBound(Arr, 2)
            If IsDate(Arr(0, i)) Then
                MsgBox Arr(0, i)
            End If
        Next i
    End If
    Rst.Close: Set Rst = Nothing
End Sub
Chưa thử, nhưng anh hãy kiểm tra kỹ lại lần nữa xem sao nhé.
 
Upvote 0

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

Back
Top Bottom