Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在没有第一行的情况下将范围设置为UsedRange的交点+;另一个专栏?_Excel_Vba_Set_Intersect_Header Row - Fatal编程技术网

Excel 如何在没有第一行的情况下将范围设置为UsedRange的交点+;另一个专栏?

Excel 如何在没有第一行的情况下将范围设置为UsedRange的交点+;另一个专栏?,excel,vba,set,intersect,header-row,Excel,Vba,Set,Intersect,Header Row,我有一个范围变量“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 但这将返回一个列,其中也包含标题行。我

我有一个范围变量“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中有多个单元格,rng.rows.count始终返回一个。我应该使用rng.count吗?有什么区别

多谢各位


当然,蒂姆上面的评论效果不错

这个答案与上面的代码保持一致,并且可能更容易阅读

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

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

当然,蒂姆上面的评论效果不错

这个答案与上面的代码保持一致,并且可能更容易阅读

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

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

我看到您已经接受了一个答案,但我不知道它如何满足您不包含标题行的要求。这是我的解决方案。它还回答了您关于如何获取行计数的问题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

我看到您已经接受了一个答案,但我不知道它如何满足您不包含标题行的要求。这是我的解决方案。它还回答了您关于如何获取行计数的问题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

.usedrange.offset(0,1).resize(.usedrange.rows.count,usedrange.columns.count-1)
.usedrange.offset(0,1).resize(.usedrange.rows.count,usedrange.columns.count-1)
请注意,如果最后一列中有内容,此操作将失败,并出现运行时错误。实际上,经过进一步思考后,我认为您确实需要这样做,如果您试图删除标题行
Set rng=Intersect(.UsedRange,.UsedRange.Offset(1),.Columns(6)).SpecialCells(xlCellTypeVisible)
这基本上为您提供了F2:F(使用范围内的最后一行)。我在评论中留下了这个,因为你已经接受了答案。。。(这就是我在抓到它后忽略它的主要原因。)请注意,如果最后一行中有类似于我上面评论的内容,则此操作将失败。一般来说,如果在最后一行(或列)中有某些内容,并且您执行了偏移(1、)(或(,1)),则您试图创建一个超出工作表最后一行(或列)的范围。这就是为什么你需要在偏移量之前少调整一行(或一列)的大小!看到你的第一句话,你会认为我会注意到这一点。今天对我来说不是个好日子:)谢谢你的耐心和解释。这绝对有帮助。我不经常使用调整大小,但我想我需要更多地发现它。当然!很高兴我们有了这个优秀的论坛来分享我们所知道的。请注意,如果最后一列中有内容,这将失败并导致运行时错误。事实上,经过进一步思考,我认为如果您试图删除标题行
Set rng=Intersect(.UsedRange,.UsedRange.Offset(1),.Columns(6))。SpecialCells(xlCellTypeVisible)
这基本上给了你F2:F(使用范围内的最后一行)。我在评论中留下了这个,因为你已经接受了答案…(这就是为什么我抓到它后忽略了它。)请注意,如果最后一行中有类似于我上面的评论的内容,则此操作将失败。通常,如果最后一行(或列)中有内容,并且您执行偏移(1,)(或(,1))操作,则您正试图创建一个超出工作表最后一行(或列)的范围。这就是您需要调整一行大小的原因(或专栏)在抵消之前。嗯!看到你的第一句话,你会认为我会注意到。今天对我来说不是个好日子:)谢谢你的耐心和解释。这肯定会有帮助。我不经常使用Resize,但我想我需要更多地了解它。当然!我们有一个很好的论坛来分享我们所知道的。我看到关于标题行的两个措词,但我想既然OP坚持在专栏上,他只想删掉第一个列。但这很有趣,因为它实际上与原始行做了相同的事情,因为它选择了F列中所有使用过的单元格。起初我忽略了它,但你提出了一个很好的观点。感谢Scott和Doug。我花了一些实验,直到我发现我需要比Scott的第一个答案更多的东西。然而,Scott和D仍然需要oug的回答确实为我提供了如何解决大部分问题的见解(我是一个普通的VBA用户,但不是一个绝对的初学者,所以有时即使帖子没有100%回答我的问题,它也让我了解如何修改它并有效地使用它).我看到了标题行的第二行,但我想既然OP坚持在该列上,他只是想删掉第一列。但很有趣,因为它实际上与原始行做了相同的事情,因为它选择了F列中所有使用过的单元格。一开始我忽略了它,但你提出了一个很好的观点。谢谢Scott和Doug。谢谢你好吧,让我做一些实验,直到我发现我需要做的比斯科特的第一个答案更多。然而,斯科特和道格的答案确实为我提供了如何解决大部分问题的见解(我是一个普通的VBA用户,但不是一个绝对的初学者,所以有时即使帖子没有100%回答我的问题,它也会让我了解如何修改它并有效地使用它)。