Lấy dữ liệu từ file A vào file B? (1 người xem)

Liên hệ QC

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

Miền Cát Trắng

Thành viên hoạt động
Tham gia
18/5/13
Bài viết
171
Được thích
37
Xin chào các bạn.
Tôi đang sửa đổi lại file báo cáo hàng ngày để tiện cho việc sử dụng.
Nhưng hiện tại tôi đang có rất nhiều file và rất nhiều sheets, vì thế mong các bạn giúp tôi xử lý bằng vba cho vấn đề để tiết kiệm thời gian hơn.
Cụ thể qua ví dụ sau:
Lấy hoặc Copy vùng dữ liệu:
"A10:E22" và "T10:AA:226" của Sheet2 trong file A.xls sang vùng "A10:E22" và "T10:AA:226" của Sheet2 trong file B.xls

"A10:E22" và "T10:AA:226" của Sheet3 trong file A.xls sang vùng "A10:E22" và "T10:AA:226" của Sheet3 trong file B.xls

.....................cứ như thế cho đến...

"A10:E22" và "T10:AA:226" của Sheet26 trong file A.xls sang vùng "A10:E22" và "T10:AA:226" của Sheet26 trong file B.xls

Nghĩa là File A và B đồng nhất Cấu trúc từ sheet2 đến sheet26 và 2 file này được để chung 1 thư mục.
 
Xin chào các bạn.
Tôi đang sửa đổi lại file báo cáo hàng ngày để tiện cho việc sử dụng.
Nhưng hiện tại tôi đang có rất nhiều file và rất nhiều sheets, vì thế mong các bạn giúp tôi xử lý bằng vba cho vấn đề để tiết kiệm thời gian hơn.
Cụ thể qua ví dụ sau:
Lấy hoặc Copy vùng dữ liệu:


Nghĩa là File A và B đồng nhất Cấu trúc từ sheet2 đến sheet26 và 2 file này được để chung 1 thư mục.

Vậy bạn muốn code VBA sẽ nàm ở file nào? Hay code lại nằm ở 1 file khác nữa?
 
Upvote 0
Vậy bạn muốn code VBA sẽ nàm ở file nào? Hay code lại nằm ở 1 file khác nữa?
File nào thì em cũng chưa lắm được Thầy ạ miễn là mục đích chủ yếu là ở file A sang file B. Chắc là code sẽ nằm ở file đích phải không Thầy.
Em cũng biết là Thầy cùng đã có lần giải quyết cho trường hợp tương tự như thế này rồi, và kể cả trong trường hợp file nguồn không cùng mở.

code có thể chỉ nằm ở 1 trong 2 file đích hoặc nguồn thôi ạ. Còn một file khác nào nữa trung gian gì đó em chưa hề nghĩ đến.

Mong được Thầy giúp thêm trong trường hợp này ạ!
Cảm ơn Thầy và rất mong Thầy trở lại với chủ đề này!
 
Upvote 0
File nào thì em cũng chưa lắm được Thầy ạ miễn là mục đích chủ yếu là ở file A sang file B. Chắc là code sẽ nằm ở file đích phải không Thầy.
Em cũng biết là Thầy cùng đã có lần giải quyết cho trường hợp tương tự như thế này rồi, và kể cả trong trường hợp file nguồn không cùng mở.

code có thể chỉ nằm ở 1 trong 2 file đích hoặc nguồn thôi ạ. Còn một file khác nào nữa trung gian gì đó em chưa hề nghĩ đến.

Mong được Thầy giúp thêm trong trường hợp này ạ!
Cảm ơn Thầy và rất mong Thầy trở lại với chủ đề này!

Vậy thì ADO thì giải pháp quá hiệu quả rồi còn gì
Không biết bạn đã đọc qua topic này chưa nhỉ:
http://www.giaiphapexcel.com/forum/showthread.php?86477-Import-dữ-liệu/page2
Từ bài 19 trở đi
 
Upvote 0
Vậy thì ADO thì giải pháp quá hiệu quả rồi còn gì
Không biết bạn đã đọc qua topic này chưa nhỉ:
http://www.giaiphapexcel.com/forum/showthread.php?86477-Import-dữ-liệu/page2
Từ bài 19 trở đi
Cảm ơn Thầy,chủ đề đó em cũng đã xem nhưng do lúc đấy em cũng chưa biết thế nào là code nên cũng không để ý.
Giờ thì xem lại mới thấy chủ đề đó thật tuyệt vời.Cảm ơn Thầy!

Hiện tại em chưa thể áp dụng được cái chỗ làm sao để đưa dữ liệu lần lượt ở sheet3 của file này vào sheet3 của file kia đến sheet5 của file này vào sheet5 của file kia.

Trong file đính kèm code của Thầy mới chỉ viết theo 1 sheets theo tùy ý.
Mong Thầy tiếp tục giúp đỡ cho trường hợp màu đỏ ạ.
Cảm ơn Thầy.
 

File đính kèm

Upvote 0
Bạn tham khảo
Mã:
Sub Main()
  Dim FileName As String, SheetName As String, RangeAddress As String
  Dim arr
  FileName = ThisWorkbook.Path & "\Ket qua.xlsx"
  'SheetName = "Sheet3"
  'RangeAddress = "B2:D100"
  'arr = GetData(FileName, SheetName, RangeAddress)
  'If IsArray(arr) Then
  For i = 1 To 3
  SheetName = "Sheet" & i + 2
  RangeAddress = "B2:D100"
  arr = GetData(FileName, SheetName, RangeAddress)
  If IsArray(arr) Then
    ThisWorkbook.Sheets(i + 1).Range("B2").Resize(UBound(arr, 1) + 1, UBound(arr, 2) + 1).Value = arr
    'MsgBox "Data has been successfully imported!"
  End If
  Next i
End Sub
 
Upvote 0
Bạn tham khảo
Mã:
Sub Main()
  Dim FileName As String, SheetName As String, RangeAddress As String
  Dim arr
  FileName = ThisWorkbook.Path & "\Ket qua.xlsx"
  'SheetName = "Sheet3"
  'RangeAddress = "B2:D100"
  'arr = GetData(FileName, SheetName, RangeAddress)
  'If IsArray(arr) Then
  For i = 1 To 3
  SheetName = "Sheet" & i + 2
  RangeAddress = "B2:D100"
  arr = GetData(FileName, SheetName, RangeAddress)
  If IsArray(arr) Then
    ThisWorkbook.Sheets(i + 1).Range("B2").Resize(UBound(arr, 1) + 1, UBound(arr, 2) + 1).Value = arr
    'MsgBox "Data has been successfully imported!"
  End If
  Next i
End Sub

Đoạn code anh thêm vào trông rất đẹp mắt và dễ sử dụng,có lẽ cũng chỉ có cách này là hay nhất!
Cảm ơn anh nhiều!
 
Upvote 0
Anh trai cho em hỏi thêm ở đầu bài em đưa ra là lấy dữ liệu tại vùng "A10:E22" và "T10:AA:226"
Vậy cái RangeAddress = "B2:D100" và Sub Main sẽ viết thế nào ạ?
 
Upvote 0
Làm 2 lần: Làm xong vùng A10:E22 rồi làm tiếp vùng T10:AA226 thôi
Cảm ơn Thầy em cũng đã nghĩ đến phải làm cách đó.
----
Xin hỏi Thầy còn trường hợp này ạ.
Vậy bạn muốn code VBA sẽ nàm ở file nào? Hay code lại nằm ở 1 file khác nữa?

Qua ý tưởng Thầy hỏi thì em cũng nghĩ đến và đã làm thêm 1 file trung gian và muốn code đặt trong file này.
Mong muốn làm sao có thể chỉ mở 1 file trung gian này lên và chạy code thì dữ liệu ở các sheets màu đỏ trong file A sẽ lần lượt chuyển sang các sheets màu đỏ trong file A' ... dữ liệu ở các sheets màu đỏ trong file B sẽ lần lượt chuyển sang các sheets màu đỏ trong file B' ... dữ liệu ở các sheets màu đỏ trong file C sẽ lần lượt chuyển sang các sheets màu đỏ trong file C' ...
Cách chuyển dữ liệu cũng giống như các bài trên chỉ khác là code đặt ở file trung gian và trường hợp này là chuyển nhiều file cùng một lúc.

Nói là được voi đòi tiên thì cũng không sai nhưng vì vấn đề này cũng thường xuyên xảy ra trong công việc nên rất cần thiết và hữu ích khi có sự chuyển giao dữ liệu nên kính mong Thầy và các Anh Chị xem xét cho ý kiến và giúp đỡ ạ.

Cảm ơn Thầy,cảm ơn GPE!

Thêm ý:File trung gian chỉ có tác dụng chuyển giao dữ liệu từ các file A sang A' ... chứ không lấy dữ liệu từ file nào vào trong file trung gian này cả,Hix!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy em cũng đã nghĩ đến phải làm cách đó.
----
Xin hỏi Thầy còn trường hợp này ạ.


Qua ý tưởng Thầy hỏi thì em cũng nghĩ đến và đã làm thêm 1 file trung gian và muốn code đặt trong file này.
Mong muốn làm sao có thể chỉ mở 1 file trung gian này lên và chạy code thì dữ liệu ở các sheets màu đỏ trong file A sẽ lần lượt chuyển sang các sheets màu đỏ trong file A' ... dữ liệu ở các sheets màu đỏ trong file B sẽ lần lượt chuyển sang các sheets màu đỏ trong file B' ... dữ liệu ở các sheets màu đỏ trong file C sẽ lần lượt chuyển sang các sheets màu đỏ trong file C' ...
Cách chuyển dữ liệu cũng giống như các bài trên chỉ khác là code đặt ở file trung gian và trường hợp này là chuyển nhiều file cùng một lúc.

Nói là được voi đòi tiên thì cũng không sai nhưng vì vấn đề này cũng thường xuyên xảy ra trong công việc nên rất cần thiết và hữu ích khi có sự chuyển giao dữ liệu nên kính mong Thầy và các Anh Chị xem xét cho ý kiến và giúp đỡ ạ.

Cảm ơn Thầy,cảm ơn GPE!

Thêm ý:File trung gian chỉ có tác dụng chuyển giao dữ liệu từ các file A sang A' ... chứ không lấy dữ liệu từ file nào vào trong file trung gian này cả,Hix!

Thì cũng vẫn là những code đã có, thêm đoạn code trung gian mở file A' lên là xong mà. Bạn tự suy nghĩ xem
Chỉ có 1 điểm cần lưu ý: Các tham chiếu phải được chỉ chính xác ----> Workbooks("Tên wb").Sheets("Tên Sh").Range("Vùng dữ liệu") ---> Có nghĩa là phải sửa Thisworkbook trong code đã có thành chổ màu đỏ
 
Upvote 0

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

Back
Top Bottom