2017-07-20 19 views
2

私は列の最大値を見つけるためにフォローコードを使用しています。私はその値がどこにあるかの絶対参照番号を知る必要があります。私はFORループでその絶対参照番号を使用し、その値が見つかった場所の隣接セルにあるものを確認したいと考えています。返す絶対参照番号

rng = Application.WorksheetFunction.Max(Columns("H")) 

その最大値が存在する場所を見つけるための方法があります私は試合を使用して試してみましたが、私はエラー2042

adrs = Application.Match(rng, Range("H:H"), 0) 

を取得していますか?

ご注意くださいタイムスタンプを検索していますので、CLNGのラッピングRNGはオプションではありません。

+1

'Application.WorksheetFunction.Max(Columns(" H "))'は適切な値を返しますか? – avb

+1

あなたの上記のコードは私のために働きます、列Hのいくつかのセルにエラーが含まれている可能性はありますか? – CLR

+0

@avbはいそうです。私は入れ子にされたIFの直前にFORループの始めにそれを使用し、常に最新(最大)の値を返します。 –

答えて

0

これを試してください:あなたは正しい参照を使用していることを確認する必要があり

Dim rng As Range 
Dim maxValue As Integer 
'you set your area that you get mxaimum value from 
Set rng = Range("H:H") 
'determine the maximum value 
maxValue = Application.WorksheetFunction.Max(rng) 
'select cell which contains found value 
'(Find returns Range objects, so you can use it as you like) 
rang.Find(maxValue).Select 
+0

それを行うより効率的な方法がありますが、効率はそうではなかったので、私はあなたの方法に固執しました。 –

0

例えば、コードがSheet1で実行されていて、データがSheet2である場合、エラーが発生する可能性があります。これを例として、コードとデータが異なる場合adrs変数のError 2042が得られましたWorkSheets

また、常にOption Explicitに覚えておいて、変数をdelcareするように強制します。

は、以下のことを試してみてください。

Option Explicit 

Sub FindMaxValueAndReturnRowNum() 

    Dim SomeWorkSheet As Worksheet 
    'Here you can change the Sheet1 to that of you data sheet name 
    Set SomeWorkSheet = ThisWorkbook.Sheets("Sheet1") 

    Dim MaxNum As Long 
    Dim adrs As Long 

    'Notice the reference to where the code needs to evaluate 
    'if there is no reference to a specific sheet then it will use the active sheet. 
    MaxNum = Application.WorksheetFunction.Max(SomeWorkSheet.Columns("H")) 
    'adrs will return the row number 
    adrs = Application.Match(MaxNum , SomeWorkSheet.Range("H:H"), 0) 

End Sub 
0

それとも単にこの?

Dim rng As Range 
Set rng = Columns("H").Find(Application.Max(Columns("H"))) 
If Not rng Is Nothing Then 
    MsgBox rng.Address(0, 0) 
End If 
関連する問題