【问题标题】:Counting Blank and Non-Blank cells计数空白和非空白细胞
【发布时间】:2016-08-15 09:57:37
【问题描述】:

我想只计算给定数据范围内的所有空白和非空白单元格,直到单元格有数据为止。但我也有一个有限的参考,它来自O4:O18

根据上面的示例,我只需将第 4 行的空白单元格计数到数据为 asd 的单元格。有什么帮助吗?谢谢!

count的用途是对非空白单元格中的空白单元格进行计数。假设最后一行有数据是 15,所以 15 将是最后一行有数据,从第 4 行到第 15 行,将计算 Range 中的空白单元格。

【问题讨论】:

  • 如果您从起始单元格计数到第一个包含数据的单元格,它们不会都是空白的吗?它总是从第 4 行开始吗?
  • 所以你想获取 Range("O4:O18") 中空白单元格和非空白单元格的数量?
  • @DarrenBartrup-Cook 是的,它将始终从第 4 行开始,并将开始计算空白单元格,直到单元格包含数据。谢谢
  • 我不确定你想要什么。你能举两个例子,告诉我们计数应该是多少?
  • @Rémi 更新了我的问题。谢谢

标签: vba excel


【解决方案1】:

您可以使用worksheetfunction 轻松获得所需的结果,试试这个:

Sub test()
    Dim iBlank&, iNonBlank&, rng As Range

    Set rng = Range("O4:O" & [O4:O18].Find("*", , , , , xlPrevious).Row)

    With WorksheetFunction
        iNonBlank = .CountA(rng)
        iBlank = .CountBlank(rng)
    End With

    MsgBox "Blank: " & iBlank & vbNewLine & "NonBlank: " & iNonBlank
End Sub

【讨论】:

  • 是的,这会计算空白和非空白单元格。但我想要的是只计算给定范围内非空白单元格中空白的单元格。谢谢。
  • 甜蜜而简单 :) 谢谢!
  • 刚刚注意到一些东西,为什么你的变量中有&
  • @ramj 这只是一种简写方式,& 表示as Long% 表示as Integer$ 表示as String@ 表示as Currency! 表示as Single# 表示as Double,如果未指定,则变量将为as Variant
【解决方案2】:

我不能 100% 确定您的目标是什么。我了解您的最大范围从“O4”到“O18”(它可以更小),并且您想从“O4”到该范围内的最后一个非空白单元格,计算空白和非空白的数量细胞。如果确实是你想做的,试试下面的代码(解释在里面):

Sub CountingBlankAndNonBlank()

    Dim MyRange As Range
    Dim LastRow As Long, TotalRange As Long
    Dim CountBlank As Long, CountNonBlank As Long

    'Find the last row with data in the Range("O4:O18")
    LastRow = 19 - Range(Cells(18, 15), Cells(Rows.Count, 15).End(xlUp)).Count

    'Set a range from "O4" to last cell with data
    Set MyRange = Range(Cells(4, 15), Cells(LastRow, 15))

    'How many cells in my Range
    TotalRange = LastRow - 3

    'How many blank cells in my Range
    CountBlank = MyRange.SpecialCells(xlCellTypeBlanks).Count

    'How many non-blank cells in may range (Total - Blank)
    CountNonBlank = TotalRange - CountBlank

    MsgBox "There are:" & vbNewLine _
        & "  - " & CountBlank & " blank cells" & vbNewLine _
        & "  - " & CountNonBlank & " non-blank cells" & vbNewLine _
        & "  - " & LastRow & " would be the lastrow"

End Sub

【讨论】:

  • 它计算非空白单元格中的空白单元格。但即使我在列中添加另一个非空白单元格,它也会返回相同的计数。谢谢
  • 它的最后一行总是13,这是为什么呢?
  • 你复制了我的确切代码吗?它非常适合我
  • 是的,我已经全部复制了。 13 始终是返回的最后一行。
【解决方案3】:

计算空白单元格(在第二个示例中返回 3,如果所有单元格都为空白,则返回 #N/A):

=COUNTBLANK($O$4:INDEX($O$4:$O$18,LOOKUP(2,1/($O$4:$O$18<>""),ROW($O$4:$O$18))-3))

计算非空白单元格(在您的第二个示例中返回 6,如果所有单元格为空白,则返回 1):

=COUNTA($O$4:INDEX($O$4:$O$18,LOOKUP(2,1/($O$4:$O$18<>""),ROW($O$4:$O$18))-3))

使用此处的查找公式:What is this programmer doing with his Lookup function?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2017-01-19
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2016-08-01
    相关资源
    最近更新 更多