• ベストアンサー

エクセル2003マクロ

お世話になります。 エクセル2003のマクロで、 ある範囲(たとえば、Cells(1,1)~Cells(1,10)の中の最小値のセルの(値でなく)アドレスを拾う方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 私は、数年マクロを書いてきて、初めて知りました。最小値が、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

spaghetti09
質問者

お礼

回答ありがとうございます。 >(それをご存知で質問されていたのですか? いやいや、私とてもそーゆーところとかけ離れたマクロ初心者で、 まったく存知あげておりませんでしたですー。 いま作っているプログラムが終わったら基礎からマクロを見直そうと 思っておりますー。 おかげさまで進行しました。有難う御座います。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

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

spaghetti09
質問者

お礼

Sub thanks() MsgBox "有難う御座います。M(__)M" & Chr(13) & "参考にさせて頂きます。" End Sub

関連するQ&A