Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


31909 / 76734 ←次へ | 前へ→

【50068】Re:データ整理
発言  ichinose  - 07/7/7(土) 8:40 -

引用なし
パスワード
   おはようございます。

>今、金属を引っ張って圧縮というのを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列の値も抜き出したいということです。
>ますますわかりづらいですがよろしくい願いします。

こういう情報処理の問題では、

入力データの定義(例を必ず掲載)

出力データの定義(例を必ず掲載)

は不可欠ですよ!!

1 hits

【50060】データ整理 07/7/6(金) 16:28 質問
【50061】Re:データ整理 Lindy 07/7/6(金) 16:51 発言
【50068】Re:データ整理 ichinose 07/7/7(土) 8:40 発言
【50095】Re:データ整理 07/7/8(日) 22:06 発言
【50099】Re:データ整理 07/7/9(月) 12:20 質問
【50117】Re:データ整理 ichinose 07/7/10(火) 7:47 発言
【50121】Re:データ整理 07/7/10(火) 10:54 発言
【50133】Re:データ整理 ichinose 07/7/10(火) 20:38 発言
【50138】Re:データ整理 Lindy 07/7/11(水) 10:15 発言
【50143】Re:データ整理 07/7/11(水) 12:02 お礼

31909 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free