• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:任意の1分平均から、それに対し-10%(又は+10%)の1分平均が現れ)

条件を満たす時間を求めるための方法について教えてください

このQ&Aのポイント
  • 任意の1分平均から、それに対し-10%(又は+10%)の1分平均が現れるまでの時間を求める方法を教えてください。
  • VLOOKUP関数では、条件式ではなく検索値を指定するため、思うような結果が得られません。
  • B列には1分平均値のデータがあり、C列にはB列の値を+10%した値があります。C列の値を元に条件+10%が現れる時間を求めたいと考えています。どのような方法を使えば良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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%側は応用してみてください。

water18
質問者

お礼

ご回答ありがとうございます。 データは必ずしも単調増加ではないので訂正3のように処理してみたいと思います。

その他の回答 (1)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

関数での処理は思いつかなかったので、マクロで作ってみました。 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 こんな感じでどうでしょう?

関連するQ&A