- ベストアンサー
条件を満たす時間を求めるための方法について教えてください
- 任意の1分平均から、それに対し-10%(又は+10%)の1分平均が現れるまでの時間を求める方法を教えてください。
- VLOOKUP関数では、条件式ではなく検索値を指定するため、思うような結果が得られません。
- B列には1分平均値のデータがあり、C列にはB列の値を+10%した値があります。C列の値を元に条件+10%が現れる時間を求めたいと考えています。どのような方法を使えば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ケース1:B列が単調増加の場合 =INDEX(A:A,COUNTIF(B:B,"<"&B1*1.1)+1) または =IF(COUNTIF(B:B,">="&(B1*1.1)),INDEX(A:A,COUNTIF(B:B,"<"&B1*1.1)+1),"") ケース2:B列がランダムの場合 元のご相談: >+10%が現れる時刻 →訂正1 +10%のジャスト値が現れる時刻 (そんな都合の良い値が存在する保証があるのか?) =INDEX(A:A,MATCH(B1*1.1,B:B,0)) →訂正2 +10%以上の値が現れる時刻 =>最初に出てきた1.1倍以上の十分大きな数値がヒットする →訂正3 +10%以上で最も近い値が現れる時刻 =IF(COUNTIF(B:B,">="&B1*1.1),INDEX(A:A,MATCH(B1*1.1+MIN(IF($B$1:$B$1440>=B1*1.1,$B$1:$B$1440-B1*1.1)),B:B,0))) をコントロールキーとシフトキーを押しながらEnterで入力する もっともこれなら全体をB列昇順で並べ替え,ケース1に持って行った方が遙かに簡単です。 計算後コピーして値のみ貼り付けて値化し,A列昇順で再度並べ替えて元の順に戻します。 -10%側は応用してみてください。
その他の回答 (1)
- nattocurry
- ベストアンサー率31% (587/1853)
関数での処理は思いつかなかったので、マクロで作ってみました。 Sub test() Dim r, i For r = 1 To 1440 - 1 For i = r + 1 To 1440 If Cells(i, 2).Value > Cells(r, 3).Value Then Cells(r, 5).Value = Cells(i, 1).Value - Cells(r, 1).Value Exit For End If Next i If i > 31 Then Cells(r, 5).Value = "xxx" End If Next r End Sub こんな感じでどうでしょう?
お礼
ご回答ありがとうございます。 データは必ずしも単調増加ではないので訂正3のように処理してみたいと思います。