【问题标题】:How to set a range as the intersection of UsedRange WITHOUT first row + Another Column?如何将范围设置为 UsedRange WITHOUT 第一行 + 另一列的交集?
【发布时间】:2012-06-28 17:50:11
【问题描述】:

我有一个范围变量“rng”。 我需要将 rng 设置为: (1) 工作表上的 usedrange 不包括第一列,并且 (2) 以第6列为例

目前,我有:

Set rng = Intersect(.UsedRange, .Columns(6)).SpecialCells(xlCellTypeVisible)
' Because the range is filtered and i only need to select visible cells

但这会返回一个包含标题行的列。我只需要列中的数字。

(1) 任何快速的功能/方法/属性可以做到这一点? (2) 我如何找到这个范围的大小? rng.rows.count 总是返回 ONE,即使 rng 中有多个单元格。我应该使用 rng.count 吗?有什么区别?

非常感谢,

阿尔

【问题讨论】:

  • .usedrange.offset(0,1).resize(.usedrange.rows.count,usedrange.columns.count-1)

标签: excel vba set intersect header-row


【解决方案1】:

我看到您已经接受了一个答案,但我看不出它如何满足您不包括标题行的要求。这是我的解决方案。它还回答了您关于如何获取行数的问题 2:

Sub GetRangeAndCountRows()
Dim rng As Excel.Range
Dim rngArea As Excel.Range
Dim RowCount As Long

With ActiveSheet
    Set rng = Intersect(.UsedRange.Resize(.UsedRange.Rows.Count - 1, .UsedRange.Columns.Count).Offset(1, 0), .Columns(6)).SpecialCells(xlCellTypeVisible)
    Debug.Print rng.Address
    For Each rngArea In rng.Areas
        RowCount = RowCount + rngArea.Rows.Count
    Next rngArea
    Debug.Print RowCount
End With
End Sub

【讨论】:

  • 我看到关于标题行的两个措辞,但我认为既然 OP 坚持这一列,他只是想砍掉第一列。但这很有趣,因为它实际上与原始行做同样的事情,因为它选择了 F 列中所有使用的单元格。起初我忽略了它,但你说得很好。
  • 感谢斯科特和道格。我进行了一些实验,直到我发现我需要的不仅仅是斯科特的第一个答案。然而,Scott 和 Doug 的回答仍然为我提供了如何解决大部分问题的见解(我是一个普通的 VBA 用户,但不是一个绝对的初学者,所以有时即使帖子没有 100% 回答我的问题,它让我了解如何修改它并有效地使用它)。
【解决方案2】:

Tim 上面的评论当然效果很好。

这个答案是为了与上面的代码保持一致,也可能更容易阅读。

添加 .UsedRange.Offset(,1) 而不是 .UsedRange 以忽略 Interesect 公式中 UsedRange 中的第一列。:

Set rng = Intersect(.UsedRange.Offset(,1), .Columns(6)).SpecialCells(xlCellTypeVisible)

【讨论】:

  • 请注意,如果最后一列中有内容,这将失败并出现运行时错误。
  • 实际上,经过深思熟虑,我认为你真的想要这个,如果你想摆脱你的标题行Set rng = Intersect(.UsedRange,.UsedRange.Offset(1), .Columns(6)).SpecialCells(xlCellTypeVisible) 这基本上给了你 F2:F(lastrow in used range)。我在评论中留下了这个,因为你已经接受了答案......(这主要是我在抓住它后忽略它的原因。)
  • 请注意,如果最后一行有内容,这将失败,类似于我上面的评论。通常,如果最后一行(或列)中有内容并且您执行 Offset(1,)(或 (,1)),则您正在尝试创建一个超出工作表最后一行(或列)的范围。这就是为什么您需要在 Offset 之前减少一行(或列)的大小。
  • 呃!看到您的第一条评论,您会认为我会注意到这一点。今天对我来说不是一个美好的一天 :) 感谢您的耐心和解释。这绝对有帮助。我不经常使用 Resize,但我想我需要更多地发现它。
  • 你打赌!很高兴我们有这个优秀的论坛来分享我们所知道的。
猜你喜欢
  • 2022-01-10
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2018-04-23
  • 2011-08-23
相关资源
最近更新 更多