2016-03-24 6 views
0

私はvbaの範囲から数値を見つけてセルのアドレスを返すプログラムを書いたが、プログラムは実際の値ではなく絶対値形式で数値を検索する。例えば0.5の範囲を検索すると、範囲内に-0.5があり、最初に来ると-0.5の位置が得られます。絶対数ではなく実際のプログラムを検索する方法はありますか?これはプログラムです:絶対数ではない実際の数を検索する方法

Function findvalue(minvalue As Range, indicated As Range, reference As Range) As Variant 

For n = 0 To indicated.Rows.Count - 1 

Set c = ActiveSheet.Cells(indicated.Row + n, indicated.Column).Find(minvalue.Value, LookIn:=xlValues) 

If Not c Is Nothing Then 
    findvalue = c.Address 
    findvaluerow = c.Row 
    findvaluecolumn = c.Column 

    GoTo finish 
End If 
Next 
For n = 0 To reference.Rows.Count - 1 
Set c = ActiveSheet.Cells(reference.Row+n, reference.Column).Find(minvalue.Value, LookIn:=xlValues) 
    If Not c Is Nothing Then 
    findvalue = c.Address 
    findvaluerow = c.Row 
    findvaluecolumn = c.Column 
     GoTo finish 
End If 
Next 
findvalue = 0 
finish: 
End Function 

答えて

3

OK、まずは、後藤を使用しないでください。私はちょうどそれを、私は百万回の理由を書き留めたくありません。しかし、gotoは非常に悪い習慣です。

実際の質問については、.Find関数にLookAt:=xlWholeパラメータを追加してみてください。この方法では、検索値全体が一致するセルのみが検索されます。

Set c = ActiveSheet.Cells(indicated.Row + n, Indicated.Column).Find(minvalue.Value, LookIn:=xlValues, LookAt:=xlWhole) 

このようにそれを書き、後藤を避けるために:読み、従うことが

For n = 0 To indicated.Rows.Count - 1 
    Set c = ActiveSheet.Cells(indicated.Row + n, indicated.Column).Find(minvalue.Value, LookIn:=xlValues, LookAt:=xlWhole) 
Next 
if c is nothing then 
    For n = 0 To reference.Rows.Count - 1 
    Set c = ActiveSheet.Cells(reference.Row+n, reference.Column).Find(minvalue.Value, LookIn:=xlValues, LookAt:=xlWhole) 
    Next 
End If 

If Not c Is Nothing Then 
    findvalue = c.Address 
    findvaluerow = c.Row 
    findvaluecolumn = c.Column 
Else 
    findvalue = 0 
End If 

、クリーナー明るく、より簡単に。同じですが、動作します。 :)

+0

それで、それは機能しましたか? – vacip

関連する問題