web-dev-qa-db-ja.com

一連の値の中から基準を満たす最後と最初の値を見つける方法は?

これは私の入力のサンプルです:

sample input data

次に、結果として深夜があり、この結果を自動的に達成したいと思います。

enter image description here

つまり、1つの列に日時があり、その日の真夜中より前の最後の日時と、この真夜中より後の最初の日時を見つけたいと思います。 1日の日時は、1つでも、1つでも、複数でもかまいません。また、元の入力の隣の列にある値を見つける必要があります。

参考:入力データは私のガスメーターのスナップショットです。 [値]列の数値は、最初の列の時間の前に費やされた合計立方メートルです。 1日の支出を計算するには、これらの境界値を見つける必要があります。計算はできますが、入力でそれらの値を見つけることができません。

ありがとうございました!

2
jakubka

MATCH関数を使用することをお勧めします。 HLOOKUPVLOOKUPに似ていますが、値ではなくインデックス(1 ..n)を返す点が異なります(また、HLOOKUPVLOOKUP、おそらくそれらについて学ぶ必要があります)。 MATCH(D2, $A$2:$A$14)は、_$A$2:$A$14_以下の_D2_の最後の値のインデックスを返します。つまり、_D2_の深夜0時より前の最後の時間(のインデックス)。 (これは1から13までの整数の形式であり、少し混乱するかもしれませんが、すべて問題ありません。)冗長性を回避するには、「ヘルパー列」を使用すると便利です。だから私は=MATCH(D2, $A$2:$A$14)を_I2_に入れました。次に、次の式を入力します。

  • _E2_→=INDEX($A$2:$B$14, $I2, 1)
  • _F2_→=INDEX($A$2:$B$14, $I2, 2)
  • _G2_→=INDEX($A$2:$B$14, $I2+1, 1)
  • _H2_→=INDEX($A$2:$B$14, $I2+1, 2)

ここで、INDEXを使用して、列AおよびBから目的の値をフェッチします。

テスト/デモンストレーションの目的で、入力を少しクリーンアップしました。

 Columns A and B

結果は次のとおりです。

 Columns D through I

これは、_A2_より前の列Dの日付に対して爆発します。これを修正するには、別のヘルパー列(J)を追加し、GHを変更します。

  • _J2_→=IFERROR(I2, 1) + 1
  • _G2_→=INDEX($A$2:$B$14, $J2, 1)
  • _H2_→=INDEX($A$2:$B$14, $J2, 2)
3
Scott