Gộp 2 mảng 2 chiều trong VBA

Liên hệ QC

anhtuan2939

Thành viên hoạt động
Tham gia
5/7/16
Bài viết
165
Được thích
130
Chào mọi người!
Giả sử em có 2 bảng có cấu trúc dữ liệu giống nhau và nằm ở 2 sheet khác nhau (sheet1 và sheet2). Trong VBA em khai báo 2 bảng này vào 2 mảng
sArr1 = sheet1.range("A2:E16")
sArr2 = sheet2.range("A2:E16")
Mọi người cho em hỏi có cách nào để gộp 2 mảng này với nhau để tạo thành 1 mảng sArr chứa dữ liệu của cả 2 mảng này không ạ? Em cảm ơn!

Như hình mình họa thì sau khi gộp thì mảng sArr sẽ chứa giá trị như bên phải, có nghĩa sẽ bao gồm
A1,B1,C1,D1,E1
A2,B2,C2,D2,E2
..............
A30,B30,C30,D30,E30
1662968240492.png
 
Test thử, dán kết quả từ vùng H2
PHP:
Option Explicit
Sub copy()
Dim i&, j&, sArr1(), sArr2(), sArr()
sArr1 = Sheet1.Range("A2:E16").Value
sArr2 = Sheet2.Range("A2:E16").Value
ReDim sArr(1 To UBound(sArr1) * 2, 1 To UBound(sArr1, 2))
For i = 1 To UBound(sArr1)
    For j = 1 To UBound(sArr1, 2)
        sArr(i, j) = sArr1(i, j)
        sArr(i + UBound(sArr1), j) = sArr2(i, j)
    Next
Next
Range("H2").Resize(UBound(sArr), UBound(sArr, 2)).Value = sArr
End Sub
 
Upvote 0
Test thử, dán kết quả từ vùng H2
PHP:
Option Explicit
Sub copy()
Dim i&, j&, sArr1(), sArr2(), sArr()
sArr1 = Sheet1.Range("A2:E16").Value
sArr2 = Sheet2.Range("A2:E16").Value
ReDim sArr(1 To UBound(sArr1) * 2, 1 To UBound(sArr1, 2))
For i = 1 To UBound(sArr1)
    For j = 1 To UBound(sArr1, 2)
        sArr(i, j) = sArr1(i, j)
        sArr(i + UBound(sArr1), j) = sArr2(i, j)
    Next
Next
Range("H2").Resize(UBound(sArr), UBound(sArr, 2)).Value = sArr
End Sub
Đã có giá trị trong sArr1 và sArr2 thì gán thẳng xuống sheet chứ chạy lòng vòng chi cho mắc công vậy ta?
 
Upvote 0
Đã có giá trị trong sArr1 và sArr2 thì gán thẳng xuống sheet chứ chạy lòng vòng chi cho mắc công vậy ta?
Dạ, đây cũng là 1 cách ạ, nhưng mục đích của em là để tạo ra 1 mảng mới để chạy vòng lặp để thực hiện các phép tính khác mà không cần gán dữ liệu xuống sheets.
 
Upvote 0
Loại bàu này cứ khoảng một vài tháng lại có người hỏi. Ở đây đã có nhiều bài giải rồi.

Giải thuật ghép hai vùng là:
- tìm vùng trống trong sheet
- copy vùng 1 vào
- copy vùng 2 tiếp theo
- lấy dữ liệu vào array
- xóa (delete enbtire row) vùng vừa chép tạm.

Gải thuật ghép 2 mảng là:
- Redim một mảng mới. Số dòng bằng tổng 2 số dòng mảng a và b, số cột bằng max cột a và b
- vòng lặp thứ nhất chép a vào c
- vòng lặp thứ hai chép b vào c

Giải thuật cao cấp là dùng phép copy memory. Nhưng phép này không cần chỉ ra chi tiết ở đay. Nếu bạn đến trình độ cao cấp thì bạn đã biết ròi.
 
Upvote 0
Loại bàu này cứ khoảng một vài tháng lại có người hỏi. Ở đây đã có nhiều bài giải rồi.

Giải thuật ghép hai vùng là:
- tìm vùng trống trong sheet
- copy vùng 1 vào
- copy vùng 2 tiếp theo
- lấy dữ liệu vào array
- xóa (delete enbtire row) vùng vừa chép tạm.

Gải thuật ghép 2 mảng là:
- Redim một mảng mới. Số dòng bằng tổng 2 số dòng mảng a và b, số cột bằng max cột a và b
- vòng lặp thứ nhất chép a vào c
- vòng lặp thứ hai chép b vào c

Giải thuật cao cấp là dùng phép copy memory. Nhưng phép này không cần chỉ ra chi tiết ở đay. Nếu bạn đến trình độ cao cấp thì bạn đã biết ròi.
Dạ, với bài 2 và bài 4 đã gợi ý cho em giải thuật 1 và giải thuật 2 rồi. Để em nghiên cứu giải thuật dùng phép copy memory. Cảm ơn anh đã hướng dẫn.
Bài đã được tự động gộp:

vì kích thước của hai vùng là bằng nhau nên có thể dùng *2, còn nếu khác nhau thì bạn dùng UBound(sArr1) + UBound(sArr2)
 
Upvote 0
Nếu bạn xài office 365 thì nó mới ra 2 hàm mới để gộp mảng.
1. VSTACK
2. HSTACK
Cách sử dụng gg nhé b.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom