Excel VBA ghi phạm vi dữ liệu vào phạm vi có kích thước khác nhau - nên dùng vòng lặp hay mảng?

Xin chào,

Tôi có 20 quốc gia trong phạm vi 'Sheet1.A1:A20' mà tôi cần ghi vào một phạm vi khác 5 lần 'Sheet2.A1:A100' (5 lần một "khối" nằm dưới khối khác).

Tôi có nên sử dụng vòng lặp và biến tăng (bộ đếm) để thực hiện việc này không?

Dim k As Integer

Với i = 1 đến 20

Với k = 1 đến 100

Sheet2.Range(Cells(k, 1), Cells(k, 1)).Value = Sheet1.Range(Cells(i, 1), Cells(i, 1)).Value

k=k+18

Tiếp theo k

Tiếp theo tôi

HOẶC với một mảng (một dạng nào đó; mã giả):

Dim source() As Int

Dim dest() As Int

Đặt nguồn = Sheet1.Range("A1:A20")

Đặt dest = Sheet2.Range("A1:A100")

> đích = nguồn x 5

Tôi đọc được rằng việc đọc toàn bộ phạm vi vào một mảng rồi chuyển toàn bộ vào một mảng khác cùng một lúc sẽ hiệu quả hơn nhiều so với việc lặp nhiều lần? Ngoài ra, bất kỳ sự trợ giúp nào về "phiên bản sử dụng mảng" đều rất được hoan nghênh.

Rất cảm kích mọi sự giúp đỡ!




Trả lời:

Sub CombineRanges()

Trang tính ("Trang tính 1").Kích hoạt
ActiveSheet.Range("A1:A20").Select
Lựa chọn.Sao chép
Trang tính ("Trang tính 2").Kích hoạt
ActiveSheet.Range("D1:D100").Select
ActiveSheet.Paste

Application.CutCopyMode = False
Vùng ("A1"). Chọn

End Sub

Trân trọng,

Amit Tandon

Nếu câu trả lời này giải đáp được thắc mắc của bạn, vui lòng đánh dấu là Đã trả lời.



Trả lời:

Mảng sẽ nhanh hơn đối với một số lượng bản ghi tối thiểu, và thông thường số lượng tối thiểu đó khá lớn. Trong trường hợp của bạn, việc sử dụng mảng không được khuyến khích vì việc chuyển nội dung vào mảng có chi phí phát sinh, và vì số lượng bản ghi của bạn thấp, nên phương pháp này không tốt hơn so với cách thông thường.

Bạn có thể sử dụng đoạn mã sau trong mô-đun chuẩn để thực hiện điều tương tự -

Sub Copy5Times()
Dim LastRow càng dài, tôi càng dài
Dim SSheet As Worksheet, TSheet As Worksheet
Đặt SSheet = Worksheets("Sheet1")
Đặt TSheet = Worksheets("Sheet2")
Với i = 1 đến 5
LastRow = TSheet.Range("A" & Rows.Count).End(xlUp).Row
Nếu LastRow = 1 thì LastRow = 0
SSheet.Range("A1:A20").Copy TSheet.Range("A" & LastRow + 1)
Tiếp theo tôi
End Sub

Comments

Popular posts from this blog

Xử lý hàng loạt các tệp Excel được bảo vệ bằng mật khẩu

Thu hẹp và mở rộng cột trong Excel

Excel - Tôi có thể tạo một danh sách động đọc một biến, sau đó lọc qua một mảng để trả về một danh sách các giá trị dựa trên biến đó không?