[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『探す対象が複数のセルにある場合、findでは何番目を示すかが不明』(skyblue)
関数のMAXで最大値を見つけ、その行を知りたいのですが、最大値が複数ある場合に、2番目の最大値の行を選択します。
先頭からとか最後尾からデータを選ぶようにはならないでしょうか?何か良い方法が有れば教えてください。
マクロは(1)、データは(2)です。
(1)マクロ
Sub test14()
Set aa = ThisWorkbook.Sheets("memo")
行数 = 8
Set w = Range(aa.Cells(1, 9), aa.Cells(行数, 9))
myMax = WorksheetFunction.Max(w)
Set q = w.Find(myMax)
If Not q Is Nothing Then
r = q.Row End If MsgBox q & " " & r Stop End Sub
(2)データ
100
45
34
8
100
43
8
100
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Sub test() Dim x, rng As Range With Range("I1", Range("I" & Rows.Count).End(xlUp)) x = Filter(.Worksheet.Evaluate("transpose(if(" & .Address & "=max(" & .Address & "),row(" & .Address & ")))"), False, 0) End With If UBound(x) = 0 Then '単一の場合 Range("I" & x(0)).Select Else '複数の場合 Range("I" & x(1)).Select '<- 上から2番目 Range("I" & x(UBound(x) - 1)).Select '<- 下から2番目 End If End Sub (seiya) 2019/04/15(月) 11:29
欲を言えば、元のマクロの改良例が有れば助かります。
(skyblue) 2019/04/15(月) 12:07
質問を読み違えました...
Set q = w.Find(myMax, w.Cells(w.Count))
に変更してください。 (seiya) 2019/04/15(月) 12:21
実は、中身が分からないまま、ご提示いただいたマクロにsheet情報を入れテストしました。
ご回答いただいたマクロでは、最大値が存在する複数のセルから上から2番目、下から2番目の行を得られるようです。
しかし、中間の行の情報を得ても、残りの行情報を得るためには後の処理が煩雑になるので、当方の案からの進捗が無く、次の質問を用意しているところでした。
データ数が膨大で、関数で処理しないと長時間がかかるので、今回の回答は本当に助かります。
(skyblue) 2019/04/15(月) 12:45
複数ある場合は上・下から2番目を取得と勘違いしました。
Findメソッドは範囲の左上端(今回の場合、一番上)の次のセルから検索を始めます。 なので、第二引数に範囲の右最下のセルを指定やると次のセル、すなわち左上端から検索します。 (seiya) 2019/04/15(月) 12:53
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.