Tình nghĩa giang hồ
Thanh sơn bất cải, lục thủy trường lưu
- Tham gia
- 29/9/20
- Bài viết
- 330
- Được thích
- 429
Chào anh chị, em có vấn đề này nhờ anh chị hỗ trợ giúp.
Dữ liệu của em là ở Sheet 1. Kết quả mong muốn của em là ở Sheet 2.
Dòng 1: không làm gì hết.
Bắt đầu từ dòng số 2, tức là 1 dòng số 2 ở sheet 1 sẽ trở thành 7 dòng ở sheet 2( dòng 2, 3, 4, 5, 6, 7, 8). Trong 7 dòng thì có sự thay đổi 1 tí. Em có gửi hình, những điểm tô màu đỏ.
Em có viết một đoạn code cũng thực hiện được vấn đề này.
Nhưng đoạn code của em một nữa là mảng, còn một nữa là viết bình thường. Nên khi gặp nhiều dữ liệu là nó chậm.
Nhờ anh chị hỗ trợ giúp sửa lại hết thành mảng giúp em. Hoặc viết mới lại hết dùm em cũng được, em cảm ơn anh chị.
Sub MOT_DONG_THANH_BAY_DONG()
Sheet2.Range("A2:CF10000").ClearContents
Dim lr1 As Double, lc1 As Double
lr1 = Sheet1.Range("A1000000").End(xlUp).Row
lc1 = Sheet1.Range("XFD2").End(xlToLeft).Column
Dim lr2 As Double
lr2 = Sheet2.Range("A1000000").End(xlUp).Row
Dim arr1
arr1 = Sheet1.Range(Sheet1.Cells(2, 1), Sheet1.Cells(lr1, lc1)).Value
Dim arr2
ReDim arr2(1 To UBound(arr1, 1) * 7, 1 To UBound(arr1, 2))
For i = 1 To UBound(arr1, 1)
For j = 1 To UBound(arr1, 2)
For k = 1 To 7
arr2((i - 1) * 7 + k, j) = arr1(i, j)
Next k
Next j
Next i
Sheet2.Range(Sheet2.Cells(lr2 + 1, 1), Sheet2.Cells(lr2 + UBound(arr1, 1) * 7, lc1)).Value = arr2
(đoạn dưới lại viết bình thường, không phải là mảng)
Dim dong_cuoi As Long
dong_cuoi = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Dim h As Integer
For h = 1 To (dong_cuoi - 1) / 7
Sheet2.Range("E" & (h - 1) * 7 + 3) = "1999"
Sheet2.Range("K" & (h - 1) * 7 + 3) = "701"
Sheet2.Range("I" & (h - 1) * 7 + 4) = "1001"
Sheet2.Range("I" & (h - 1) * 7 + 5) = "1002"
Sheet2.Range("I" & (h - 1) * 7 + 6) = "1003"
Sheet2.Range("I" & (h - 1) * 7 + 7) = "1004"
Sheet2.Range("E" & (h - 1) * 7 + 8) = "4000"
Sheet2.Range("I" & (h - 1) * 7 + 8) = "4000"
Sheet2.Range("G" & (h - 1) * 7 + 8) = "400"
Sheet2.Range("H" & (h - 1) * 7 + 8) = "400"
Next h
Dữ liệu của em là ở Sheet 1. Kết quả mong muốn của em là ở Sheet 2.
Dòng 1: không làm gì hết.
Bắt đầu từ dòng số 2, tức là 1 dòng số 2 ở sheet 1 sẽ trở thành 7 dòng ở sheet 2( dòng 2, 3, 4, 5, 6, 7, 8). Trong 7 dòng thì có sự thay đổi 1 tí. Em có gửi hình, những điểm tô màu đỏ.
Em có viết một đoạn code cũng thực hiện được vấn đề này.
Nhưng đoạn code của em một nữa là mảng, còn một nữa là viết bình thường. Nên khi gặp nhiều dữ liệu là nó chậm.
Nhờ anh chị hỗ trợ giúp sửa lại hết thành mảng giúp em. Hoặc viết mới lại hết dùm em cũng được, em cảm ơn anh chị.
Sub MOT_DONG_THANH_BAY_DONG()
Sheet2.Range("A2:CF10000").ClearContents
Dim lr1 As Double, lc1 As Double
lr1 = Sheet1.Range("A1000000").End(xlUp).Row
lc1 = Sheet1.Range("XFD2").End(xlToLeft).Column
Dim lr2 As Double
lr2 = Sheet2.Range("A1000000").End(xlUp).Row
Dim arr1
arr1 = Sheet1.Range(Sheet1.Cells(2, 1), Sheet1.Cells(lr1, lc1)).Value
Dim arr2
ReDim arr2(1 To UBound(arr1, 1) * 7, 1 To UBound(arr1, 2))
For i = 1 To UBound(arr1, 1)
For j = 1 To UBound(arr1, 2)
For k = 1 To 7
arr2((i - 1) * 7 + k, j) = arr1(i, j)
Next k
Next j
Next i
Sheet2.Range(Sheet2.Cells(lr2 + 1, 1), Sheet2.Cells(lr2 + UBound(arr1, 1) * 7, lc1)).Value = arr2
(đoạn dưới lại viết bình thường, không phải là mảng)
Dim dong_cuoi As Long
dong_cuoi = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Dim h As Integer
For h = 1 To (dong_cuoi - 1) / 7
Sheet2.Range("E" & (h - 1) * 7 + 3) = "1999"
Sheet2.Range("K" & (h - 1) * 7 + 3) = "701"
Sheet2.Range("I" & (h - 1) * 7 + 4) = "1001"
Sheet2.Range("I" & (h - 1) * 7 + 5) = "1002"
Sheet2.Range("I" & (h - 1) * 7 + 6) = "1003"
Sheet2.Range("I" & (h - 1) * 7 + 7) = "1004"
Sheet2.Range("E" & (h - 1) * 7 + 8) = "4000"
Sheet2.Range("I" & (h - 1) * 7 + 8) = "4000"
Sheet2.Range("G" & (h - 1) * 7 + 8) = "400"
Sheet2.Range("H" & (h - 1) * 7 + 8) = "400"
Next h
File đính kèm
Lần chỉnh sửa cuối: