VBA如何获取选中区域的最小行号?是否有无需遍历的方法?
获取选择区域中行号最小的单元格的解决方案
问题描述
我通过Application.InputBox让用户选择单元格区域,希望获取该区域中行号最小的单元格。请问是否有现成函数可实现此需求,还是必须遍历所有单元格?当用户从上到下选择区域时无问题,但如果选中的区域为"A10;A200;A1"这类不连续区域,使用以下代码得到的结果是行10,而非预期的行1:
Set Rng = Application.InputBox( _ Title:="Selection", _ Prompt:="Please select cells", _ Type:=8) Myfirstrow = Rng(1).Row
解决方案
不需要遍历所有单元格,Excel对象模型提供了现成的属性直接解决这个问题:
直接获取最小行号:使用
Rng.Row属性,它会返回所选区域中最顶部(行号最小)单元格的行号,不受选择顺序或区域是否连续的影响。修改代码为:Set Rng = Application.InputBox( _ Title:="Selection", _ Prompt:="Please select cells", _ Type:=8) Myfirstrow = Rng.Row这样就能得到正确的最小行号(比如示例中的行1)。
获取最小行号对应的单元格对象:如果你需要的是最小行号的单元格对象,可以结合
Rng.Row和Rng.Column(返回最左侧列号)来获取:Set MinRowCell = Rng.Parent.Cells(Rng.Row, Rng.Column)
原代码出错原因
Rng(1)的行为是返回用户选择区域时第一个选中的单元格,而非行号最小的单元格。当用户先选A10再选A1时,Rng(1)指向的就是A10,所以得到行10的结果,这和预期逻辑不符。而Rng.Row是Excel内置属性,专门针对区域整体位置返回顶部行号,完全符合需求。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

