簡體   English   中英

SpecialCells(xlCellTypeVisible)在UDF中不起作用

[英]SpecialCells(xlCellTypeVisible) not working in UDF

基於@Chips Ahoy提出的問題 ,我決定創建一個UDF來查找范圍內可見單元格的PercentRank。

雖然@Chips似乎對我的語法修正感到滿意,但實際上我無法使我的UDF正常工作。

當我運行以下時,兩個地址輸出讀取相同。 在我的示例中使用公式=VisiblePercentRank($A$2:$A$41,0.5) ,兩個地址輸出到即時窗口讀取$A$2:$A$41 ,盡管自動過濾器隱藏了第3到第11行。

碼:

Function VisiblePercentRank(x As Range, RankVal As Double)
    Debug.Print x.Address, x.Rows.SpecialCells(xlCellTypeVisible).Address
    VisiblePercentRank = WorksheetFunction.PercentRank(x.Rows.SpecialCells(xlCellTypeVisible), RankVal)
End Function

嘗試刪除.Rows

Function VisiblePercentRank(x As Range, RankVal As Double)
    Debug.Print x.Address, x.SpecialCells(xlCellTypeVisible).Address
    VisiblePercentRank = WorksheetFunction.PercentRank(x.SpecialCells(xlCellTypeVisible), RankVal)
End Function

如果第二個輸出不是$A$2,$A$12:$A$41或者我錯過了什么?

使用Excel / Office 2013,64位Win7,64位。

大腦煎炸更新

我發現如果我從即時窗口運行它,我的UDF會起作用:

?VisiblePercentRank(range("A2:A41"),0.5)
$A$2:$A$41    $A$2:$A$11,$A$39:$A$41
 0.207 

但如果從單元格公式=VisiblePercentRank(A2:A41,0.5)

$A$2:$A$41    $A$2:$A$41

似乎已知SpecialCells在UDF中失敗。 幾個來源: 123

你必須創建自己的功能。 也許是這樣的:

Function VisiblePercentRank(x As Range, RankVal As Double)
    Debug.Print x.Address, VisibleCells(x).Address
    VisiblePercentRank = WorksheetFunction.PercentRank(VisibleCells(x), RankVal)
End Function

Private Function VisibleCells(rng As Range) As Range
    Dim r As Range
    For Each r In rng
        If r.EntireRow.Hidden = False Then
            If VisibleCells Is Nothing Then
                Set VisibleCells = r
            Else
                Set VisibleCells = Union(VisibleCells, r)
            End If
        End If
    Next r
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM