2016-08-25 20 views
1

実際に範囲をExcelに設定せずにこれを行うにはどうすればよいですか?理想的には、計算のためだけに内部で(一時的に)VBAに格納されます。 FormulaArrayは範囲オブジェクトにのみ適用されるので、明らかに現在のコードは機能しません。VBA:NAを無視して範囲選択から最小値と最大値を取得

Dim lower As Double 
    lower.FormulaArray = "=RoundDown(Min(If(Not(ISNA(objSelection)), objSelection)), 0)" 
    Dim upper As Double 
    upper.FormulaArray = "=RoundUp(Max(If(Not(ISNA(objSelection)), objSelection)), 0)" 

答えて

1

あなたはストレートdouble型の変数に式を解決したい場合は、呼び出すためにExcel Application objectを使用ROUNDDOWN,ROUNDUPおよびAGGREGATEは直接機能します。

Dim lower As Double, upper As Double, objSelection As Range 

Set objSelection = Selection 

'trim any full row or column selections down to the used range 
Set objSelection = Intersect(objSelection.Parent.UsedRange, objSelection) 

lower = Application.RoundDown(Application.Aggregate(15, 6, objSelection, 1), 0) 
upper = Application.RoundUp(Application.Aggregate(14, 6, objSelection, 1), 0) 
Debug.Print lower 
Debug.Print upper 
+0

優れています(連続していない範囲で)。ありがとう! – rocketman

3

あなたが引用符からVBAの一部を除去し、&と一緒に文字列を連結します:

Dim lower As Double 
lower = ActiveSheet.Evaluate("=RoundDown(Min(If(ISNUMBER(" & Selection.Address & "), " & Selection.Address & ")), 0)") 
Dim upper As Double 
upper = ActiveSheet.Evaluate("=RoundUp(Max(If(ISNUMBER(" & Selection.Address & "), " & Selection.Address & ")), 0)") 
+0

私は下に「無効な修飾子」が表示されています。これはRangeオブジェクトではないためですか?私はFormulaArrayがRangeオブジェクトでしか動作しないと思った? – rocketman

+0

私の悪い、私は宣言ではなく式を外しました。 edit @rocketman –

+0

を参照してください。連続していない範囲を選択しても動作しないようです... – rocketman

関連する問題