2017-04-05 14 views
1

私は、可視セル上でのみ実行されるように、自動フィルタリングされたスプレッドシート上でPercentRank関数を実行しようとしています。私はつまり、範囲オブジェクトを定義しようとした:可視範囲のVBA関数

Dim x As Range 
x = ActiveSheet.Range("K1:K6027").Rows.SpecialCells(x1CellTypeVisible) 

し、その範囲に関数すなわち使用してみました:

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

をしかし、そのコードは、「エラーコンパイル:引数オプションではありません」を返すメッセージを。私はそれが実行される値の範囲を設定するために2つの引数を必要とするpercentrank関数の構文が原因であると仮定していますが、概念的にはそれをコードに変換する方法については明確ではありません。どんな助けでも大歓迎です。

+2

1.範囲内の2番目の基準を含んでいるため、そのエラーが発生しています。 ')は間違ったスペースにあります。 2. 'x'は既にRangeオブジェクトなので、Range()は必要ありません:' WorksheetFunction.PercentRank(x、* valueは*にランク付けされます) '3. Percent Rankは分離された範囲で動作するとは思いません。だからあなたは、VBAで仕事をするためのコードを書く必要があるかもしれません、あなたは範囲をループする必要があるかもしれません。 –

+0

ワーク・シートの中のランダムな列に連結された範囲をコピーして、それを連続させ、それに対して 'PercentRank'を呼び出すことで、長時間の作業を行うことができます(必要な場合)。まだ回避策がありますが、おそらくより洗練され、コードは少なくなります。 –

+0

@ScottHoltzman私は分かりませんが、それは第2の基準以下の数を数える単純なループであり、範囲内のセルの数で割ったものです。または、私が考えるように、グループをループしてcountif()を使用してカウントを取得し、セルの総数で除算します。いずれの方法もかなり速くなります。 –

答えて

2

Set xを使用する必要があります。また、大括弧はシフトする必要があります。

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

私はPercentRankがばらばらの範囲で動作するとは思わない。 –

+0

@ScottCranerです。 –

+0

@pehです。 –