| 
    
     |  | おはようございます。 
 >今、金属を引っ張って圧縮というのを1サイクルとして、それを繰り返すという実験をしています。
 >データ数がおおいため、VBAで処理しようと思います。
 >各サイクルにおける引っ張る力の最大値、最小値を抜き出すプログラムはあるのですが、その最大、最小の時の他のデータも一緒に抜き出すにはどうしたらよいでしょうか?
 
 サンプルコードです。
 
 新規ブックの標準モジュールに
 
 以下のコードをコピーして下さい。
 
 '===================================================================
 Option Explicit
 Sub main()
 Dim rng As Range
 Dim ans As Variant
 Dim rw As Variant
 Call sample 'サンプルデータの作成
 With ActiveSheet
 Set rng = .Range("a2", .Cells(.Rows.Count, "a").End(xlUp))
 If rng.Row > 1 Then
 With rng
 Debug.Print "transpose(if(" & _
 .Address & "=max(" & .Address & _
 "),row(" & .Address & "),""×""))"
 '↑こんな配列数式を評価しています
 'イミディエイトウインドーで確認してください
 ans = Filter(Evaluate("transpose(if(" & _
 .Address & "=max(" & .Address & _
 "),row(" & .Address & "),""×""))"), _
 "×", False)
 '最小値の場合は、↑の数式のmax---->minに変更
 End With
 For Each rw In ans
 MsgBox .Range("a" & rw).Value & "----" & .Range("b" & rw).Value
 Next
 End If
 End With
 End Sub
 '===================================================================
 Sub sample()
 With ActiveSheet
 .Range("a1:b1").Value = Array("検索値", "参照データ")
 With .Range("a2:a31")
 .Formula = "=round(rand()*400,2)"
 .Value = .Value
 End With
 With .Range("b2:b31")
 .Formula = "=int(rand()*10000)+1"
 .Value = .Value
 End With
 End With
 End Sub
 
 
 上記のmainを実行するとアクティブシートに対して、
 サンプルデータを作成し、そのサンプルデータに対して
 A列の最大値とその最大値に対応するB列の値を表示します。
 
 サンプルデータ(sampleというプロシジャーの実行で作成)は、
 以下のようなデータです。
 
 
 A    B
 1  検索値  参照データ
 2  273.33   7569
 3  51.23    851
 4  367.71   2407
 5  160.6    2270
 6  143.8    5101
 7  353.74    161
 8  166.23    237
 9  228.17   2586
 10  166.86   5910
 ・
 ・
 ・
 A31まで作成します。
 上記の例だと、A列最大値は、4行目の367.71ですから、
 
 367.71 ----- 2407
 
 と表示されます。
 
 これが参考になりますか?
 
 
 >かなりわかりづらいかと思いますが、イメージとしてはA列に入れたデータを上記のように抜き出し、その抜き出した値と同じ行のB列の値も抜き出したいということです。
 >ますますわかりづらいですがよろしくい願いします。
 
 こういう情報処理の問題では、
 
 入力データの定義(例を必ず掲載)
 
 出力データの定義(例を必ず掲載)
 
 は不可欠ですよ!!
 
 
 |  |