|
おはようございます。
>今、金属を引っ張って圧縮というのを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列の値も抜き出したいということです。
>ますますわかりづらいですがよろしくい願いします。
こういう情報処理の問題では、
入力データの定義(例を必ず掲載)
出力データの定義(例を必ず掲載)
は不可欠ですよ!!
|
|