- ベストアンサー
エクセル2003マクロ
お世話になります。 エクセル2003のマクロで、 ある範囲(たとえば、Cells(1,1)~Cells(1,10)の中の最小値のセルの(値でなく)アドレスを拾う方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 私は、数年マクロを書いてきて、初めて知りました。最小値が、0の場合は、Find メソッドでは取れないのですね。(それをご存知で質問されていたのですか?足元を掬われそうです^^;) ループという方法もあるけれど、それでは、ちょっとレベルが低くみられそうです。 ただし、これは、マクロと同じことが、関数でも出来るような気がします。 以下は、範囲に同値がある場合は、最初に見つけたものしかアドレスが出せません。 '----------------------------------------- Sub FindMinimum() Dim r As Range Dim myVal As Double Dim i As Integer Set r = Range(Cells(1, 1), Cells(1, 10)) If WorksheetFunction.Count(r) = 0 Then Exit Sub myVal = WorksheetFunction.Min(r) On Error Resume Next i = WorksheetFunction.Match(myVal, r, 0) On Error GoTo 0 If i > 0 Then MsgBox r.Cells(i).Address End If Set r = Nothing End Sub '----------------------------------------- Sub FindMinimum2() '失敗の見本 Dim r As Range Dim r2 As Range Dim myVal As Double Set r = Range(Cells(1, 1), Cells(1, 10)) If WorksheetFunction.Count(r) = 0 Then Exit Sub myVal = WorksheetFunction.Min(r) Set r2 = r.Find(myVal, LookIn:=xlValues) MsgBox r2.Address Set r = Nothing End Sub
その他の回答 (1)
- merlionXX
- ベストアンサー率48% (1930/4007)
Sub test() Set Rng = Range(Cells(1, 1), Cells(1, 10)) If Application.WorksheetFunction.Count(Rng) = 0 Then MsgBox "数字がないわ", vbCritical, "( ̄ロ ̄;)!! " Exit Sub End If mn = Application.WorksheetFunction.Min(Rng) Set mnc = Rng.Find(What:=mn, LookIn:=xlValues, LookAt:=xlWhole) MsgBox mnc.Address Set mnc = Nothing End Sub
お礼
Sub thanks() MsgBox "有難う御座います。M(__)M" & Chr(13) & "参考にさせて頂きます。" End Sub
お礼
回答ありがとうございます。 >(それをご存知で質問されていたのですか? いやいや、私とてもそーゆーところとかけ離れたマクロ初心者で、 まったく存知あげておりませんでしたですー。 いま作っているプログラムが終わったら基礎からマクロを見直そうと 思っておりますー。 おかげさまで進行しました。有難う御座います。