【问题标题】:Selecting all non-blank cells in variable range in Excel VBA在Excel VBA中选择可变范围内的所有非空白单元格
【发布时间】:2016-07-06 20:03:25
【问题描述】:

我有我在 Excel 上的数据集。从 B 列开始,它有从 B3 到周期性变大的变量数的连续数据(例如,今天是 B114,但明天数据可能会扩展到 B116)。单元格 B 中的数据是连续的,永远不会被删除。对于 B 列中的每一行连续数据,我也想选择 B-AG 列的行。但是,B 之后的行没有连续数据。

例如:有从B3到B120的连续数据。我想选择范围 B3:AG120。

我在 VBA 中编写的用于执行此操作的代码不起作用。它正确地停在 B120(在本例中),但是,一旦它到达 C-AG 列中的非连续数据,它就会吓坏并选择超过 120 的行。我不确定为什么这段代码不起作用,任何帮助都是非常感谢!

作为记录,工作表中几乎每个单元格中都有公式。但是,只有一些公式会用数据填充单元格。我想选择每个单元格,无论它是否在我的范围内填充数据。否则,我不想选择它。例如,B120 之后有空单元格,其中包含公式。我不想将这些包括在我的范围内。但如果 D40 中有一个空单元格(在 B3 和 AG120 之间),我确实希望将其包含在选择中。

Dim LR As Long, cell As Range, rng As Range
With Sheets("Sortable(2)")
    LR = .Range("B" & Rows.Count).End(xlUp).Row
    For Each cell In .Range("B3:B" & LR)
        If cell.Value <> "" Then
            If rng Is Nothing Then
               Set rng = cell
            Else
               Set rng = Union(rng, cell)
            End If
         End If
    Next cell
    rng.Select
End With

【问题讨论】:

  • .Range("B" &amp; Rows.Count).End(xlUp).Row 将计算带有公式的单元格。
  • 是的,我意识到了。这就是为什么它后面有一个 if 语句,如果它是空的,它不会将它添加到范围中
  • 您是否尝试过使用 cell.Text "" insead of cell.Value ""?
  • 感谢您的帮助,但 cell.Text 返回的结果与 cell.Value 相同

标签: vba excel select


【解决方案1】:
Dim lastVal As Range, sht As Worksheet

Set sht = Sheets("Sortable(2)")

Set lastVal = sht.Columns(2).Find("*", sht.Cells(1, 2), xlValues, _
                                xlPart, xlByColumns, xlPrevious)

Debug.Print lastVal.Address

sht.Range("B2", lastVal).Resize(, 32).Select 'select B:AG

【讨论】:

  • 这很完美!我很高兴能吻你——我为此苦苦挣扎了太久
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多