2017-04-05 4 views
6

@Chips Ahoyによって提出されたquestionに基づいて、範囲内の可視セルのPercentRankを見つけるためにUDFを作成することにしました。SpecialCells(xlCellTypeVisible)がUDFで動作しない

@Chipsは構文の修正に満足しているようですが、実際にはUDFを正しく動作させることができません。

以下を実行すると、2つのアドレス出力が同じになります。私の例では、=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を使用して、Win7で64ビット、64ビットを使用します。

私はすぐに窓からそれを実行した場合、私のUDFが機能することを発見した

BRAINのフライUPDATE:

?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 
+0

'Rows.'削除:' x.SpecialCells(xlCellTypeVisible)を.Address' –

+0

はその@ScottCraner、残念ながらありません変更をしようとしました。 – CLR

答えて

4

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 
+2

ありがとう@CallumDA、それは完璧です。 Microsoftには修正するバグとそれを実行するための食欲がないように見えます。 – CLR

関連する問題