Lỗi excel tự thêm dòng ở cuối Table sau khi chạy công thức bằng VBA, nhờ mọi người giúp đỡ!

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

NguyenDang88

Thành viên mới
Tham gia
23/7/09
Bài viết
7
Được thích
3
Em chào cả nhà,

Em có file excel như đính kèm, code vẫn chạy ra kết quả bình thường. Chỉ là sau khi chạy xong lại tự động thêm dòng ở cuối table.
Nhờ cả nhà xem giúp em code có vấn đề gì không và sửa lỗi này như thế nào ạ.
Em cám ơn!

Công thức cột A
Sub CThucNoiChuoi_SheetOrder()
Dim arr(), kq(), i As Long, LR As Long
With Sheets("ORDER")
LR = .Range("E" & Rows.Count).End(xlUp).Row

If LR < 4 Then
Exit Sub
End If

arr = .Range("B4:T" & LR).Value
ReDim kq(1 To LR, 1 To 19)

For i = 1 To UBound(arr, 1)
If arr(i, 2) <> "" Then

kq(i, 1) = arr(i, 2) & arr(i, 3) & arr(i, 4) & arr(i, 5) & arr(i, 6) & arr(i, 7)
Else
kq(i, 1) = ""
End If

Next i

.Range("A4").Resize(i, 1).Value = kq
End With
End Sub

Công thức cột M
Sub CThucCotBalance_SheetOrder()
Dim arr(), kq(), i As Long, LR As Long

With Sheets("ORDER")
LR = .Range("E" & Rows.Count).End(xlUp).Row

If LR < 4 Then
Exit Sub
End If

arr = .Range("B4:T" & LR).Value
ReDim kq(1 To LR, 1 To 19)

For i = 1 To UBound(arr, 1)
kq(i, 1) = arr(i, 14) + arr(i, 11) - arr(i, 10)
Next i

.Range("M4").Resize(i, 1).Value = kq
End With
End Sub

Công thức cột Q
Sub CThucCotRemain_SheetOrder()
Dim arr(), kq(), i As Long, LR As Long

With Sheets("ORDER")
LR = .Range("E" & Rows.Count).End(xlUp).Row

If LR < 4 Then
Exit Sub
End If

arr = .Range("B4:T" & LR).Value
ReDim kq(1 To LR, 1 To 19)

For i = 1 To UBound(arr, 1)
If arr(i, 2) <> "" Then

kq(i, 1) = arr(i, 15) - arr(i, 14)
Else
kq(i, 1) = ""
End If
Next i

.Range("Q4").Resize(i, 1).Value = kq
End With
End Sub

1700797134180.png

1700797245290.png
 

File đính kèm

  • DEMO.xlsm
    3.8 MB · Đọc: 7
Thay "i" dòng cuối cùng của 3 sub bằng Ubound(arr)

Mã:
.Range("A4").Resize(UBound(arr), 1).Value = kq

Hỏi thêm: Cả 3 sub đều loop cùng 1 range, và ra 3 kết quả khác nhau, sao không gom về 1 cáisub và loop 1 lần thôi
Mã:
For =1 to ...
   kq1
   kq2
   kq3
Next
 
Upvote 0
Excel đâu có tự thêm dòng.
Lỗi này là lỗi bạn không có căn bản về vòng lặp.
Sau khi dứt vòng lặp, i có trị là UBound(arr,1) + 1. Bạn dùng nó để resize khoảng ghi kết quả thì dư 1 dòng.
 
Upvote 0
Thay "i" dòng cuối cùng của 3 sub bằng Ubound(arr)

Mã:
.Range("A4").Resize(UBound(arr), 1).Value = kq

Hỏi thêm: Cả 3 sub đều loop cùng 1 range, và ra 3 kết quả khác nhau, sao không gom về 1 cáisub và loop 1 lần thôi
Mã:
For =1 to ...
   kq1
   kq2
   kq3
Next
.Range("A4").Resize(UBound(arr), 1).Value = kq
=> code này em làm ok rồi.

Hỏi thêm: Cả 3 sub đều loop cùng 1 range, và ra 3 kết quả khác nhau, sao không gom về 1 cáisub và loop 1 lần thôi
=> dạ em không chuyên VBA, do bữa trước để công thức excel dữ liệu nhiều xử lý chậm nên em mới chuyển qua vba, cần tới đâu thì tìm hiểu sửa tới đó. Anh nói em cũng ngộ ra rồi á :)
Cám ơn anh nhiều ạ ;)

Bài đã được tự động gộp:

Excel đâu có tự thêm dòng.
Lỗi này là lỗi bạn không có căn bản về vòng lặp.
Sau khi dứt vòng lặp, i có trị là UBound(arr,1) + 1. Bạn dùng nó để resize khoảng ghi kết quả thì dư 1 dòng.
dạ em chào anh ạ,
Excel đâu có tự thêm dòng.
=> Em k biết tại sao nên cũng k biết diễn tả sao cho đúng -\\/.
Lỗi này là lỗi bạn không có căn bản về vòng lặp.
=> Anh nói đúng rồi đó ạ...
Sau khi dứt vòng lặp, i có trị là UBound(arr,1) + 1. Bạn dùng nó để resize khoảng ghi kết quả thì dư 1 dòng.
=> Dạ em hiểu rồi, cám ơn anh đã giải thích ...
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom