2017-05-16 6 views
0

問題:Excel VBA - 範囲にDOUBLE値が含まれている場合、範囲内の最大(または特定の値)のアドレスを探します。

範囲が2つあります。私は最大値のアドレスを取得したいと思います。 私はmatch関数を試しましたが、doubleを比較することはできません(偽の結果を返します)。そして、私の範囲は順序付けられていません。

醜い解決策があります(たとえば、5桁の精度が必要な場合は10000を掛けて整数部分を取得して比較しますが、20000を超える行では非常に遅いです)より洗練されたソリューション。

感謝:)

サンプルデータ:次のセルdouble値が大きい場合、これらのDebug.Print

B 7.59999999999934E-02 
C 7.00000000000074E-02 
D 0.335000000000008 
E 8.19999999999936E-02 
F 8.49999999999937E-02 
G 7.39999999999981E-02 
H 5.49999999999926E-02 
I 0.070999999999998 
J 0.165000000000006 
K 7.59999999999934E-02 
+0

をあなたには、いくつかのサンプルデータをポストすることはできますか? – BruceWayne

+0

私は最高の解決策は、Excelの最大機能を忘れて、私は実際の最大数のアドレスを追跡することができます自分の最大の機能を書くことだと思う。 –

答えて

0

の後の数字は、なぜ、あなたの範囲を反復処理し、変数を変更していませんか?この範囲を終了したら、findキーを使用してセルの行と列を返します。下記を参照

Dim i as Variant 
For Each i In Worksheets("yourWorkSheet").Range(Range("youStartCell"), Range("yourStartCell").End(xlDown)).Cells 
    If i.Offset(-1) < i Then 
     i = i.value 
    End if 
Next 

このような感じです。ループの最初の行の場合を処理する必要がありますが、私はそれを行う場合は、何もする必要はありません。タイプに定義されて

'Find max and its address in range 
Public Function maxAddress(rng As Range) As DoubleLong 

Dim cell As Range 

For Each cell In rng 
    If IsNumeric(cell.Value2) Then 
     If cell.Value2 > maxAddress.db Then 
      maxAddress.db = cell.Value2 
      maxAddress.lg = cell.Row 
     End If 
    End If 
Next cell 
End Function 

+0

はい、ありがとうございます。これは、カスタムmax関数と非常によく似ています。私はいくつかの同様のアプローチを作った:) –

+0

良いカルマのupvote、ないupvote = badluck –

+0

私はupvoteしようとしたが、私は15未満の評判を持っています。私はこれまで何度もサイトを使用していませんでした。投票は私のために無効になっています。 –

0

これは私の最終的な解決策である

Public Type DoubleLong 
    db As Double 
    lg As Long 
End Type 
関連する問題