【问题标题】:How to find the nth non-blank row of a column?如何找到列的第 n 个非空白行?
【发布时间】:2019-08-26 13:24:40
【问题描述】:

好的...长话短说,我在代码中发现了一个错误,我认为我可以简单地找到“A”列(即第 213 行)中的最后一行。但是,我实际上需要第 219 行。这个间隙可能不一致,但是“A”列中有 17 个非空白单元格(第 17 个非空白单元格是第 213 行)和“B 列中的第 17 个非空白单元格” " 是第 219 行(这是我需要提取的行号)。于是我找到了这个公式:

TagCount = sheet(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count

这将返回 17...

现在我需要能够在“B”列中找到第 17 个(或任何 TagCount)非空白单元格(实际上我只需要行号)。

【问题讨论】:

  • 我很高兴看到一个不使用循环的创造性答案(我不能保证存在循环)
  • 是的,我也是...我可能会迷迷糊糊地尝试弄清楚如何使用循环来完成它,但是...我希望有一个更优雅的解决方案。跨度>
  • 最后一行 (219) 中是否有值,并且您正在尝试在值范围内查找第 n 个空白单元格,或者您是否正在尝试在填充范围之后查找第 n 个空白单元格?
  • A 列大部分为空,有 17 个非空白单元格...例如,非空白单元格为:A29、A38、A42... ...A213 等... 其中 A213是第 17 个非空白单元格。 B列大部分是空白单元格,有80个非空白单元格......例如,非空白单元格是:B35,B43,B45......B219等......其中B219是第17个非空白单元格细胞。我想在 B 列(即单元格 B219)中找到第 17 个非空白单元格。真的,我想要的是行号 --> "219"

标签: excel vba


【解决方案1】:

另一种可能的方法(如果我理解正确的话)是使用以下方法。我正在评估一个 Excel 公式,该公式将在 B 列中找到第 n 个单元格,其中第 n 个单元格是 A 列中常量数的计数。这是一个数组公式,可以在工作表中评估,但在 VBA 中评估它,因为它是一个 VBA 问题。

Dim BRng As Range, nthCell As Range
Dim EvalStr As String

With Sheets(1)
    Set BRng = .Range(.Cells(1, 2), .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 2))
End With

EvalStr = "=INDEX(" & BRng.Address & ",SMALL(ROW(" & BRng.Address & ")+(100*(" & BRng.Address & "="""")), COUNTA(A:A)))"
Set nthCell = Application.Evaluate(EvalStr)

MsgBox nthCell.Address

【讨论】:

    【解决方案2】:

    我不得不放弃并实际使用循环!这将选择 B 列中第 n 个填充的单元格,其中 n 是 A 列中的标记数。这确实假设 B 列的格式与 A 列非常相似,因此请告诉我是否需要对其进行调整才能正常工作。

    Sub GetMatchingTagInB()
    
        Dim TagCount As Long
        TagCount = Sheets(1).Range("A:A").Cells.SpecialCells(xlCellTypeConstants).count
    
        Dim rngB As Range
        Set rngB = Sheets(1).Range("B:B").Cells.SpecialCells(xlCellTypeConstants)
    
        Dim cel As Range
        For Each cel In rngB
            TagCount = TagCount - 1
            If TagCount = 0 Then
                'do stuff here
                cel.Select
            End If
        Next cel
    
    End Sub
    

    【讨论】:

    • 谢谢...这并不像我希望的那么简单,但可能尽可能简单。
    • @XCELLGUY 我仍然希望这可以在没有循环的情况下完成:)
    • @Marcucciboy2 我刚查过,你不用遍历区域,For Each cel in rngB.Cells 就够了
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 2022-07-28
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多