Thêm 2 vùng dữ liệu từ bảng tính vào chung 1 mảng.

Liên hệ QC

MỹHạnhCB

Đi mây, về gió. !!!
Tham gia
25/3/22
Bài viết
123
Được thích
18
Xin chào các anh chị diễn đàn GPE.
Các anh chị cho em hỏi là mình có thể lưu 2 vùng trên bảng tính excel vào chung 1 mảng được không ạ.
Em vd mong muốn:
-Tại File 1 (khung A) em có range("A2:C12") em sẽ thực hiện gán vào arr() = range("A2:C12").Value.
- Và tiếp theo em mở File 2 (khung B) em có range("F2:H14"), và thực hiện thêm nối tiếp vào mảng arr(). Để khi trả ra được kết quả như khung C. Mà không phải dùng for để thực hiện thêm từng ô vào mảng. Mong các anh chị hướng dẫn ạ, Em xin cám ơn nhiều.
 

File đính kèm

  • 1660279879412.png
    1660279879412.png
    31.8 KB · Đọc: 22
Xin chào các anh chị diễn đàn GPE.
Các anh chị cho em hỏi là mình có thể lưu 2 vùng trên bảng tính excel vào chung 1 mảng được không ạ.
Em vd mong muốn:
-Tại File 1 (khung A) em có range("A2:C12") em sẽ thực hiện gán vào arr() = range("A2:C12").Value.
- Và tiếp theo em mở File 2 (khung B) em có range("F2:H14"), và thực hiện thêm nối tiếp vào mảng arr(). Để khi trả ra được kết quả như khung C. Mà không phải dùng for để thực hiện thêm từng ô vào mảng. Mong các anh chị hướng dẫn ạ, Em xin cám ơn nhiều.
Câu trả lời là có thể được nhé bạn. Bạn gửi 2 files đó lên xem thử nhé.
 
Upvote 0
.... Mà không phải dùng for để thực hiện thêm từng ô vào mảng. ...
"for" tức là bạn muốn nói dùng vòng lặp để nối từng dingf của bảng B vào đuôi bảng C?

Có đến vài cách làm. Nhưng có thực tế, tức là dễ và nhanh hơn dùng vòng lặp hay không thì tùy theo ứng dụng của bạn.
 
Upvote 0
Câu trả lời là có thể được nhé bạn. Bạn gửi 2 files đó lên xem thử nhé.
Em gửi anh 2 file mẫu. Vì tính chât dữ liệu nên em không để file gốc được. Mong anh thông cảm. Em cám ơn ạ
Bài đã được tự động gộp:

"for" tức là bạn muốn nói dùng vòng lặp để nối từng dingf của bảng B vào đuôi bảng C?

Có đến vài cách làm. Nhưng có thực tế, tức là dễ và nhanh hơn dùng vòng lặp hay không thì tùy theo ứng dụng của bạn.
Dạ đúng ạ, nhưng em đã thử chạy for cho 1 file dữ liệu của em (114 cột và 4000 dòng) thì khá là lâu. Trong khi đó mục đích chính của em là (kiểu như mở file thực hiện copy và dán) thì em sẽ dùng cách là lưu vào 1 mảng đến cuối cùng chỉ trả giá trị ra cho 1 file gốc thôi ( nên em dùng gán cả vùng dữ liệu của từng file vào 1 mảng (nối tiếp), sau đó trả ra kết quả 1 lần thôi mà không thực hiện trả ra nhiều lần.
 

File đính kèm

  • test.zip
    26.6 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Em gửi anh 2 file mẫu. Vì tính chât dữ liệu nên em không để file gốc được. Mong anh thông cảm. Em cám ơn ạ
Bài đã được tự động gộp:


Dạ đúng ạ, nhưng em đã thử chạy for cho 1 file dữ liệu của em (114 cột và 4000 dòng) thì khá là lâu. Trong khi đó mục đích chính của em là (kiểu như mở file thực hiện copy và dán) thì em sẽ dùng cách là lưu vào 1 mảng đến cuối cùng chỉ trả giá trị ra cho 1 file gốc thôi ( nên em dùng gán cả vùng dữ liệu của từng file vào 1 mảng (nối tiếp), sau đó trả ra kết quả 1 lần thôi mà không thực hiện trả ra nhiều lần.
Bạn thử code sau nhé:

Mã:
Sub GopDL_HLMT()
    Dim strSQL As String
    strSQL = "Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test1.xlsx].[Sheet1$] " & _
             "Union All Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test2.xlsx].[Sheet1$] "
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0 Xml;"
        Sheet1.Range("A2").CopyFromRecordset .DataSource
    End With
End Sub
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub GopDL_HLMT()
    Dim strSQL As String
    strSQL = "Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test1.xlsx].[Sheet1$] " & _
             "Union All Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test2.xlsx].[Sheet1$] "
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0 Xml;"
        Sheet1.Range("A2").CopyFromRecordset .DataSource
    End With
End Sub
Code xịn sò quá ạ, nhưng với kiến thức hạn hẹp mà để tùy biến dữ liệu thì em chịu ạ :p. Em cám ơn anh nhiều
Bài đã được tự động gộp:

Code xịn sò quá ạ, nhưng với kiến thức hạn hẹp mà để tùy biến dữ liệu thì em chịu ạ :p. Em cám ơn anh nhiều
Ví dụ như em muốn lấy từ dòng thứ 10 và cột 100 thì như thế nào ạ
 
Upvote 0
Code xịn sò quá ạ, nhưng với kiến thức hạn hẹp mà để tùy biến dữ liệu thì em chịu ạ :p. Em cám ơn anh nhiều
Bài đã được tự động gộp:


Ví dụ như em muốn lấy từ dòng thứ 10 và cột 100 thì như thế nào ạ
Bạn thử code sau nhé:

Mã:
Sub GopDL_HLMT()
    Dim strSQL As String
    strSQL = "Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test1.xlsx].[Sheet1$A9:CV] " & _
             "Union All Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test2.xlsx].[Sheet1$A9:CV] "
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0 Xml;"
        Sheet1.Range("A13").CopyFromRecordset .DataSource
    End With
End Sub
 
Upvote 0
Bạn thử code sau nhé:

Mã:
Sub GopDL_HLMT()
    Dim strSQL As String
    strSQL = "Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test1.xlsx].[Sheet1$A9:CV] " & _
             "Union All Select * From " & "[EXCEL 12.0;Database=" & ThisWorkbook.Path & "\test2.xlsx].[Sheet1$A9:CV] "
    With CreateObject("ADODB.Recordset")
        .Open (strSQL), "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0 Xml;"
        Sheet1.Range("A13").CopyFromRecordset .DataSource
    End With
End Sub
Vâng, em cám ơn anh nhiều ạ
 
Upvote 0
Web KT

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

Back
Top Bottom