首页 > 解决方案 > 我只想在找到某个单词/字符之前在列中选择一个范围

问题描述

我需要帮助来设置变量的范围。基本上,我有一列带有“如果”公式。公式中的结果返回“”或数字。这是我目前所拥有的。这将选择所有行,因为它在整个列的公式中“找到”“”。

Set rngEnd = wkLS.Columns(cLS).Find("").Offset(-1, 0)

考虑到“”仅显示在最后一个带有数字的单元格之后的行中,如何仅选择包含数字的范围?

标签: excelvba

解决方案


你的方式或提问不是我能看得更清楚......假设我明白你想问什么,请试试这个。代码可能看起来比它应该的更复杂,因为我不知道cLS变量是如何声明的。如果它是 a Long,代码会更简单。但它可以是一个字符串"A:A"...

如果您需要从列的第一行到第一个空行的范围(使用Find):

Set rngEnd = wkLS.Range(wkLS.Columns(cLS).Cells(1, 1).Address, wkLS.Columns(cLS).Find("").Offset(-1, 0).Address)
Debug.Print rngEnd.Address

如果您需要从列的第一行到最后一个空行的范围:

Set rngEnd = wkLS.Range(wkLS.Columns(cLS).Cells(1, 1).Address, wkLS.Cells(wkLS.Cells(wkLS.Rows.count, wkLS.Columns(cLS).Column).End(xlUp).Row, 1).Address)

如果您需要一个不连续的范围,只包含不为空的单元格,直到最后一个空行,但假设存在这样的空单元格,请使用下一个代码:

Dim wkLS As Worksheet, rngEnd As Range, cLS As Long
Set wkLS = ActiveSheet: cLS = 1 'for A:A column, change for yours
Dim c As Range, finalRange As Range
Set rngEnd = wkLS.Range(wkLS.Columns(cLS).Cells(1, 1).Address, _
            wkLS.Cells(wkLS.Cells(wkLS.Rows.count, wkLS.Columns(cLS).Column).End(xlUp).Row, 1).Address)
        For Each c In rngEnd.Cells
            If c.Value <> "" Then
                If finalRange Is Nothing Then
                    Set finalRange = c
                Else
                    Set finalRange = Union(finalRange, c)
                End If
            End If
        Next
    Debug.Print finalRange.Cells.count, finalRange.Address

推荐阅读