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
Post a Comment