- ベストアンサー
EVCEL VBA での最小値の検索
EVCEL VBAで飛び飛びの複数の指定したセル群から最小の値を持つセルのアドレスを抽出する記述を教えてください。 たとえば、あらかじめ指定したA2とB3とE5のセルの値のうち最小の値を持つセルの値とアドレスを取得する記述を教えてください。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >あらかじめ指定したA2とB3とE5のセルの値のうち最小の値を持つセルの値とアドレスを取得する記述を教えてください。 本来は、「あらかじめ指定したセル」に、きちんとした法則があれば、関数で可能なような気がします。たぶん、「あらかじめ指定したセル」は、名前定義を行うつもりなのでしょうね。だから、以下のSelection は、仮に、ということにしてください。 '-------------------------------------------- Sub FindMinimum() Dim myRng As Range Dim c As Range Dim minVal As Double Dim myFirstAddress As String Dim buf As String If TypeName(Selection) <> "Range" Then Exit Sub Set myRng = Selection '名前定義の場合は、ここから If WorksheetFunction.Count(myRng) = 0 Then MsgBox "範囲を指定してください。", vbCritical: Exit Sub minVal = WorksheetFunction.Min(myRng) Set r = myRng.Find(minVal) With myRng Set c = .Find(What:=minVal, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then myFirstAddress = c.Address Do buf = buf & ", " & c.Address Set c = .FindNext(c) Loop Until c Is Nothing Or c.Address = myFirstAddress End If End With MsgBox minVal & ": " & Mid$(buf, 2), , "最小値とアドレス" Set myRng = Nothing End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test() Dim sh As Worksheet Set sh = Worksheets("Sheet1") x = Application.WorksheetFunction.Min(sh.Range("a1"), sh.Range("c3"), sh.Range("d5")) MsgBox x End Sub をご参考に。 セル指定のニーズやパターンが質問から良くわからないが、プログラムの中に入れられるなら上記。 Cells(i,j)の形ででRangeを相対化できます。
お礼
大変参考になりました。最小値はこれで取得できましたが、アドレスが取得できなかったので、BLUEPIXYさんの構文と組み合わせてみてやってみます。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
CTRL+で飛び飛びの範囲を指定してマクロを呼び出すとして 概ね、こんな感じ Public Sub Sample() Dim x As Range, min As Range, minValue Dim wk As String, a, i 'minValue は、指定した範囲の最小値、空白セルが有る場合は0 minValue = Application.WorksheetFunction.min(Selection) wk = "" For Each x In Selection If minValue = x.Value Then wk = wk & x.Address & "," '同一の最小値が有る場合があるのでアドレスを集める End If Next If wk <> "" Then wk = Left(wk, Len(wk) - 1) '最後のカンマを取り除く End If a = Split(wk, ",") 'アドレスの集まりを配列にする For i = 0 To UBound(a) Debug.Print a(i) '配列で取り出す(テストプリント) Next End Sub
お礼
大変に長い構文例を作成していただきありがとうございました。 私の質問がわかりにくかったと思いますが、最小値のアドレスは取得できましたが、その値が取得できませんでした。 この構文を参考に研究してみます。 ありがとうございました。
お礼
大変ご丁寧にアドバイスありがとうございます。 これで悩んでいたことがほとんど解決したと思います。 どうもありがとうございます。