Giúp mình sửa lỗi #N/A ở cuối mỗi dòng khi chạy code tổng hợp dữ liệu từ các sheets. (1 người xem)

  • Thread starter Thread starter qtm1987
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

qtm1987

Thành viên thường trực
Tham gia
15/9/09
Bài viết
352
Được thích
262
Nghề nghiệp
Kế toán tổng hợp
Code này không biết lỗi ở đâu mà khi chạy code thì dữ liệu tổng hợp từ các sheets xuất hiện dòng #N/A ở phía sau rất nhiều. Mong mọi người giúp mình với.
PHP:
Sub TongHopDuLieu()
Dim i As Long, j As Long, sArray, arr()
Sheets("Total").Range("B4:BB65536").ClearContents
For Each dts In ActiveWorkbook.Worksheets
    i = i + 1
    With Sheets(i)
    If Sheets(i).Name = "Total" Then i = 1
    If Sheets(i).Name <> "Total" Then
        sArray = .Range(.[B4], .[B60].End(xlUp)).Resize(, 11).Value
        ReDim arr(1 To UBound(sArray, 1), 1 To 11)
        For j = 1 To UBound(sArray, 1)
            If Not IsEmpty(sArray(j, 1)) Then
                n = n + 1
                m = m + 1
                arr(j, 1) = sArray(j, 1)
                arr(j, 2) = sArray(j, 2)
                arr(j, 3) = sArray(j, 3)
                arr(j, 4) = sArray(j, 4)
                arr(j, 5) = sArray(j, 5)
                arr(j, 6) = sArray(j, 6)
                arr(j, 7) = sArray(j, 7)
                arr(j, 8) = sArray(j, 8)
                arr(j, 9) = sArray(j, 9)
                arr(j, 10) = sArray(j, 10)
                arr(j, 11) = dts.Name
            End If
        Next
        k = k + m
        k = k + 1
        Sheets("Total").Range("B" & k - m + 3).Resize(n, 11).Value = arr
        m = 0
    End If
    End With
Next
Sheets("Total").Select
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Code này không biết lỗi ở đâu mà khi chạy code thì dữ liệu tổng hợp từ các sheets xuất hiện dòng #N/A ở phía sau rất nhiều. Mong mọi người giúp mình với.
.............................................................
Không biết bạn muốn kết quả ra sao, làm thí thí vậy.
Chạy thử Sub này xem.
PHP:
Public Sub GPE()
Dim Ws As Worksheet, Sarr(), Darr(1 To 65000, 1 To 11)
Dim I As Long, J As Long, K As Long, N As Long
For N = 1 To 12
    Set Ws = Worksheets("T" & N)
    Sarr = Ws.Range(Ws.[B4], Ws.[B65000].End(xlUp)).Resize(, 10).Value
        For I = 1 To UBound(Sarr, 1)
            K = K + 1
            For J = 1 To 10
                Darr(K, J) = Sarr(I, J)
            Next J
            Darr(K, 11) = Ws.Name
        Next I
    K = K + 1
Next
With Sheets("Total")
    .[B4:Z65000].ClearContents
    .[B4].Resize(K, 11).Value = Darr
End With
Set Ws = Nothing
End Sub
 
Upvote 0
Code này không biết lỗi ở đâu mà khi chạy code thì dữ liệu tổng hợp từ các sheets xuất hiện dòng #N/A ở phía sau rất nhiều. Mong mọi người giúp mình với.
PHP:
Sub TongHopDuLieu()
Dim i As Long, j As Long, sArray, arr()
Sheets("Total").Range("B4:BB65536").ClearContents
For Each dts In ActiveWorkbook.Worksheets
    i = i + 1
    With Sheets(i)
    If Sheets(i).Name = "Total" Then i = 1
    If Sheets(i).Name <> "Total" Then
        sArray = .Range(.[B4], .[B60].End(xlUp)).Resize(, 11).Value
        ReDim arr(1 To UBound(sArray, 1), 1 To 11)
        For j = 1 To UBound(sArray, 1)
            If Not IsEmpty(sArray(j, 1)) Then
                n = n + 1
                m = m + 1
                arr(j, 1) = sArray(j, 1)
                arr(j, 2) = sArray(j, 2)
                arr(j, 3) = sArray(j, 3)
                arr(j, 4) = sArray(j, 4)
                arr(j, 5) = sArray(j, 5)
                arr(j, 6) = sArray(j, 6)
                arr(j, 7) = sArray(j, 7)
                arr(j, 8) = sArray(j, 8)
                arr(j, 9) = sArray(j, 9)
                arr(j, 10) = sArray(j, 10)
                arr(j, 11) = dts.Name
            End If
        Next
        k = k + m
        k = k + 1
        Sheets("Total").Range("B" & k - m + 3).Resize(n, 11).Value = arr
        m = 0
    End If
    End With
Next
Sheets("Total").Select
End Sub

Tôi chỉ ra những chỗ sai, chỗ thừa, chỗ chưa tối ưu để bạn tham khảo và thấy nếu có lý thì rút kinh nghiệm về lập trình. Nếu chỉ đề nghị code cho bạn để nhắm mắt sử dụng mà không cần hiểu thì quá dễ.
-------------
1. Xóa dòng n = n + 1
2. Sửa
Mã:
Sheets("Total").Range("B" & k - m + 3).Resize([COLOR=#ff0000]n[/COLOR], 11).Value = arr

thành
Mã:
Sheets("Total").Range("B" & k - m + 3).Resize([COLOR=#ff0000]UBound(arr)[/COLOR], 11).Value = arr

Thế là hết lỗi #N/A
-------------------------------------
3. Tại sao lại
Mã:
k = k + m
k = k + 1
mà không viết gọn thành
Mã:
k = k + m + 1
???

4. Nếu sửa ở điểm 3 thì tại sao lại
Mã:
k = k + m + 1
Sheets("Total").Range("B" & k - m + 3).Resize(UBound(arr), 11).Value = arr

mà không là
Mã:
For j = 1 To UBound(sArray, 1)
...
Next
Sheets("Total").Range("B" & k + 4).Resize(UBound(arr), 11).Value = arr
k = k + UBound(arr) + 1

???

Tức bỏ biến m không cần thiết.

Thực ra code
Mã:
n = n + 1
m = m + 1
trong vòng FOR chả để làm cái gì cả. Chỉ để tiêu tốn điện nước.

5. Mà sao lại copy từng ô thế???
Nếu tôi hiểu được việc bạn cần làm thì code thế này:

Mã:
Sub TongHopDuLieu()
Dim k As Long, j As Long, sArray
    Sheets("Total").Range("B4:BB65536").ClearContents
    For Each dts In Worksheets
        With dts
            If .Name <> "Total" Then
                sArray = .Range(.[B4], .[B60].End(xlUp)).Resize(, 11).Value
                For j = 1 To UBound(sArray)
                    sArray(j, 11) = .Name 'Ten Sheet
                Next j
                Sheets("Total").Range("B" & k + 4).Resize(UBound(sArray), 11).Value = sArray
                k = k + UBound(sArray) + 1
            End If
        End With
    Next
    Sheets("Total").Select
End Sub
 
Upvote 0
Hay quá. Cám ơn Ba Tê, cám ơn Siwtom đã giải thích chi tiết /-*+/. Copy từng ô là vì có cột cần lấy có cột không cần lấy, mình đang tính thuế TNCN nên tổng hợp từ các sheet bảng lương. hj. mình đang tập viết code nên code lỗi nhiều lắm.
 
Upvote 0

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

Back
Top Bottom