Excel 仅在可见范围内使用VBA功能

Excel 仅在可见范围内使用VBA功能,excel,vba,Excel,Vba,我试图在自动筛选的电子表格上运行PercentRank函数,以便它只在可见单元格上运行。我尝试定义一个范围对象,即: Dim x As Range x = ActiveSheet.Range("K1:K6027").Rows.SpecialCells(x1CellTypeVisible) 然后尝试使用该范围的功能,即: PercentRank = WorksheetFunction.PercentRank(Range(x, *value to be ranked*) ) 但该代码返回“编译错

我试图在自动筛选的电子表格上运行PercentRank函数,以便它只在可见单元格上运行。我尝试定义一个范围对象,即:

Dim x As Range
x = ActiveSheet.Range("K1:K6027").Rows.SpecialCells(x1CellTypeVisible)
然后尝试使用该范围的功能,即:

PercentRank = WorksheetFunction.PercentRank(Range(x, *value to be ranked*) )

但该代码返回“编译错误:参数非可选”消息。我假设这是因为percentrank函数的语法需要两个参数来设置它所运行的值的范围,但我只是不清楚如何从概念上把它转换成代码。任何帮助都将不胜感激。

您需要设置x并使用它。此外,您的括号需要移动:

Set x = ActiveSheet.Range("K1:K6027").Rows.SpecialCells(xlCellTypeVisible)
MyPercentRank  = WorksheetFunction.PercentRank(x, *value to be ranked*)

1.您得到该错误是因为您将第二个条件包括在范围中,
位于错误的空间中。2.
x
已经是一个范围对象,因此您不需要range():
WorksheetFunction.PercentRank(x,*要排序的值*)
3。我认为百分比排名不会在不连贯的范围内起作用。因此,您可能需要编写代码来完成vba中的长期工作,您可能需要在整个范围内循环。@ScottCraner-我更多地考虑代码行。但是一种方式可能是6个,另一种方式可能是1/2打:)@ScottHoltzman,或者如果过滤器的标准很简单,COUNTIFS()除以COUNTIF()也可以。而且
x1CellTypeVisible
中有一个打字错误,应该是
xlCellTypeVisible
。意味着第二个字符应该是小写的
L
而不是一个。@Scott Craner我应该注意,在筛选工作表时,筛选工作表所依据的标准已经排序,以便每个筛选结果都是连续的行范围。例如,第一个自动筛选结果返回第1-40行,第二个自动筛选结果返回第41-100行,等等。您认为这仍然会给PercentRank带来问题吗?我不相信PercentRank会在不连贯的范围内工作。@ScottCraner它会。@peh是的。@CLR谢谢您,我尝试了这个,它修复了语法问题,但是我现在得到一个运行时错误1004“无法获取Range类的SpecialCells属性”。对这个问题有什么见解吗?我有,谢谢你发现了。我可能会在一个新的问题中发布我的UDF,让大家看看。