我试图在自动过滤的电子表格上运行PercentRank函数,以使其仅在可见单元上运行。我试图定义一个范围对象即:VBA函数仅在可见范围
Dim x As Range
x = ActiveSheet.Range("K1:K6027").Rows.SpecialCells(x1CellTypeVisible)
,然后使用该范围内的功能,即尝试:
PercentRank = WorksheetFunction.PercentRank(Range(x, *value to be ranked*))
但是,代码返回“编译错误:参数不可选”消息。我假设这是由于percentrank函数的语法需要两个参数来设置它运行的值的范围,但是我只是在概念上不清楚如何将其转换为代码。任何帮助将非常感激。
1.您获得的错误,因为你要包括在范围内的第二个标准,')'是在错误的空间。 2.“x”已经是一个范围对象,所以你不需要Range():'WorksheetFunction.PercentRank(x,*值被排名*)'3.我不认为百分比排名可以与不相关的范围一起工作。所以你可能需要写出代码来长时间在vba中进行这项工作,你可能需要遍历整个范围。 –
让vba长时间工作(如果需要)的替代方法是将脱节的范围复制到工作表中的随机列,使其连续,然后调用“PercentRank”。仍然是一个解决方法,但可能更清洁,更少的代码。 –
@ScottHoltzman我不知道,这是一个简单的循环来计算低于第二个标准的数字,并将其除以该范围内的单元格数量。或者,正如我想到的那样,Loop通过这些组并使用countif()来计算并除以单元的总数。两种方法都很快。 –