如何计算excel中的非零数?

时间:2012-06-25 20:31:35

标签: excel vba excel-vba

我正在尝试创建一个宏,它将遍历整个工作簿并计算员工工作的天数。工作表的工作在几天内完成,因此所有T必须找到的日子不是零。我尝试使用COUNTIF(A11:A12,">0")并收到错误Expected : list separator or )。我正在使用For Each循环来处理工作表。我想将所有信息放在工作簿末尾的新工作表中,其中包含员工姓名和工作日期。我对视觉基础很新,但对c#非常好。

我现在已经走到了这一步

Option Explicit

Sub WorksheetLoop2()
    ' Declare Current as a worksheet object variable.
    Dim Current As Worksheet
    Dim LastColumn As Integer

    If WorksheetFunction.CountA(Cells) > 0 Then
    ' Search for any entry, by searching backwards by Columns.
        LastColumn = Cells.Find(What:="*", After:=[A1], _
        SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious).Column
    End If

    ' Loop through all of the worksheets in the active workbook.
    For Each Current In Worksheets
        Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range(Cells(11, LastColumn), Cells(16, LastColumn)), ">0")
        Current.Range("A28") = Application.WorksheetFunction.CountIf(Current.Range("Al17:Al22"), ">0")
    Next
End Sub

当我运行此操作时,我收到错误method range of object'_worksheet' failed。我也无法找到在摘要表上获取所有信息的方法。

1 个答案:

答案 0 :(得分:1)

VBA解决方案,根据您上面的上一条评论。

良好的VBA编程习惯需要始终在您的代码中使用Option Explicit,这样您就知道何时没有正确声明变量,或者有时候,如果代码不好!在这种情况下,你会发现只是写A27并不意味着你将值返回到单元格A27,而只是将你得到的值设置为变量A27。或许你可能不会确切知道,但你会发现你的问题真的很快!

此代码应该为您解决:

Option Explicit

Sub WorksheetLoop2()

'Declare Current as a worksheet object variable.
Dim Current As Worksheet

' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
    Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range("A11:A12"), ">0")
Next

End Sub

如果有帮助,非VBA解决方案:

假设您有一个摘要表,并且每个员工都在一个单独的工作表上,A列中的天数和B列中的工作小时数,请在摘要B1的公式栏中输入公式,然后在A列中运行名称列表。 / p>

Sheet