如何计算非矩形范围的列中的单元格

Cor*_*rus 3 excel vba excel-vba

所以我有一个将由用户选择的范围.它将是两列,通常不会彼此相邻.我需要计算所选范围的每列中的单元格数,以确定每列中的单元格数是否相等.(如果不是,我需要调整范围.)

例如,用户可以选择B5:B10和D6:D9.所以我需要代码分别返回6和4.

我试过了:

Set rng = Selection
rng.Columns(1).Count
Run Code Online (Sandbox Code Playgroud)

这返回1,这显然不是我需要的数字.

提前致谢!

Sco*_*man 6

您可以使用对象的Areas方法Range来获取范围的区域.区域是非连续范围内的连续范围组.

Set rng = Selection
For i = 1 to rng.Areas.Count
    debug.print rng.Areas(i).Cells.Count
Next
Run Code Online (Sandbox Code Playgroud)

这里需要注意的是,您可能需要测试,例如,如果用户选择了A1:B10,只需拖动鼠标.由于这是一个连续的范围,它只有一个Area,你不会得到两个不同的数字.如果您需要对此进行测试,可以执行以下操作.

Set rng = Selection

'non-contiguous ranges will always return one column, if there are mutiple columns both cell counts are equal by default
If rng.Columns.Count = 1 Then
    For i = 1 to rng.Areas.Count
        debug.print rng.Areas(i).Cells.Count
    Next
End If
Run Code Online (Sandbox Code Playgroud)