如何编写宏来对具有#N / A值的列求和?

时间:2017-03-24 13:17:56

标签: excel vba excel-vba

我希望创建一个宏,它总结一个总是包含几个#N / A值的列,列中的单元格数量每天都会改变,#N / A值的位置也会改变。< / p>

我还想将结果放在最后一个值下面的第一个空单元格中,即列底部的第一个空单元格。

这是我能得到的:

Option Explicit

Sub Total()
'
' Total Macro

Dim rg As Range

Dim Cell As Range, Target As Range

Set Target = Range("D65536").End(xlUp)
    For Each Cell In Target
    Cell.Errors(xlEvaluateToError).Ignore = True
Set rg = Range("D65536").End(xlUp)
    rg.Offset(1, 0).Value = "=sumif(D1:D100 " <> 0 & rg.Row & ")"
    Range("D65536").End(xlUp).Select
Selection.Font.Bold = True

Next

End Sub

我使用D1:D100,但仅仅因为100将覆盖我的列中的单元格数量。这给了一个奇怪的结果,更多的是#N / As,然后是一个True。我不认为我应该尝试在代码中使用公式。

由于

2 个答案:

答案 0 :(得分:3)

我会循环检查该值是否为数字,然后将其添加到总数中:

Sub mysum()
Dim lstRow As Long
Dim ws As Worksheet
Dim i As Long

Set ws = Worksheets("Sheet5") 'Change to your sheet

With ws
    lstRow = .Cells(.Rows.Count, 4).End(xlUp).Row
    For i = 1 To lstRow
        If IsNumeric(.Cells(i, 4)) Then
            .Cells(lstRow + 1, 4) = .Cells(lstRow + 1, 4) + .Cells(i, 4)
        End If
    Next i
 End With
End Sub

答案 1 :(得分:0)

您可以使用SpecialCells():

Sub total()
    With Worksheets("SheetName") '<--| Change to your actual sheet name
        With .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))
             .Cells(.Rows.Count,1).Offset(1).Value = WorksheetFunction.Sum(.SpecialCells(xlCellTypeConstants, xlNumbers))
        End With
    End With
End Sub