私はホテル予約カレンダー ツールに取り組んでおり、任意の 2 つの検索日の間に表示される予約の1 泊あたりの平均価格を計算する必要があります。考慮事項:
- 予約はチェックイン日とチェックアウト日を使用して記録されます
- 単一の予約価格とともに (すべてが同じ行にあります)
- 毎日のチェックイン時間までに部屋が空になるため、チェックアウト日は空室としてカウントされます
- 検索した 2 つの日付の間に該当する日の予約値のみが必要です
- 明確にするために、予約は検索の 1 番目と 2 番目の日付を超えて延長することができますが、日付の端点を超えたこれらの日の 1 日の値は無視されます
- コードではなく数式を使用してこれを行いたい
私は一日中 SUMPRODUCT 式で遊んでいて、望ましい結果にかなり近づいています.
=ARRAYFORMULA(SUMPRODUCT(GTE(Bookings_EndDate,ReportExec_StartDate+1), LTE(Bookings_StartDate,ReportExec_EndDate+0),IF((Bookings_StartDate<=ReportExec_StartDate)*(Bookings_EndDate>=ReportExec_EndDate),((ReportExec_EndDate-ReportExec_StartDate+1)),IF(Bookings_StartDate<ReportExec_StartDate,Bookings_EndDate-ReportExec_StartDate,IF(Bookings_EndDate>ReportExec_EndDate,(ReportExec_EndDate+1)-Bookings_StartDate,0)))))
ここで問題だと思うのは、配列計算が最初の IF() によって満たされた条件のみを出力することです。したがって、これは間違ったアプローチであると確信しています。名前付き範囲のクイックオリエンテーション:
- ReportExec_StartDate / ReportExec_EndDate = 検索日 1 / 検索日 2
- Bookings_StartDate / Bookings_EndDate = チェックイン日 / チェックアウト日を含む列
最初の IF() 条件は、検索日までまたは検索日を過ぎたすべての予約を検索します 2 番目のネストされた IF() は、最初の検索日より前にのみ延長された予約を検索します 3 番目のネストされた IF() は、2 番目の検索日を超えてのみ延長された予約を検索します
Excel ではこれは簡単ですが、Google は私にとって新しいおもちゃです。