基于客人入住和退房的条件格式动态日历

Conditional format dynamic calendar based upon check-in and check-out of guests

我制作了一个动态日历 here,您可以 view/download 对其进行测试。

您会看到一个月中的每一天都有 3 个单元格。中心单元用于识别当一位客人在同一天离开而另一位客人到达时发生的关键变化。在这种情况下,左侧单元格将填充为浅红色,中心为深红色,右侧单元格为浅红色。当客人退房但没有关键变化时,左侧单元格将填充浅红色,中间和右侧单元格均为绿色(例如 Dec 21st 2019 如下所示)。下图表示其他场景中的预期模式。

我现在需要创建一个公式,用于对每个 [date] 中的 3 个单元格进行条件格式化。如果我的数据(在单独的选项卡上)在 属性 未被占用时没有空白行,我可以使用公式 =COUNTIFS([Check-in_range],"<="&[date],[Check-out_range],">="&[date])>0 来检测 arrival/departure 天的时间。但是,数据中租赁季节的每一周都有空白行(出于个人原因),我该如何优化公式?

如果您问题中的条件格式公式对您来说效果很好,那么针对空白行的调整就相对简单了。试试这个公式:

=COUNTIFS([Check-in_range],"<="&[date],[Check-out_range],">="&[date],[Name_range],"<>")>0

在这种情况下 [Name_range] 应该指的是您 sheet Data.

的第 D

但是,据我所知,该公式仅适用于包含日期的单元格,不会导致您提供的图片。换行符使这件事变得有点棘手。如果您也需要帮助,请告诉我。

为了稍微简化,我建议使用浅绿色为单元格着色,因为这是默认设置。如果需要,条件格式将覆盖单元格颜色。

鉴于情况的变化,我将在这里制作一个新的答案。

假设您有以下命名范围

  • Start_Date 是您查找的所有开始日期 table;
  • End_Date 是您查找的所有结束日期(即 Start_Date + Nights)table;
  • 姓名 是您查找的所有姓名 table;
  • CCO 是所有 critical-change-over 日期,如果您已在 [ 中如下所示命名列,则可以使用以下公式找到这些日期=105=]: =IFERROR(IF(AND(MATCH([@[End Date]],[Start Date],0)>0,AA6<>0,AA7<>0),[@[End Date]],""),"") 其中 AA6 是同一行中的名称,而 AA7 是下一行中的名称。

然后按照步骤设置条件格式。 请注意,以下是在 Excel 而不是 google-sheets 中执行的,所有单元格引用均基于您在上一个问题中提供的前一个 sample workbook .我提供的 link 是包含所有条件格式的最终​​工作簿,因此您可以下载它并在 Excel.

中进行测试

设置 critical-change-over 日期的格式:

| Formatting for CCO |                     |                                    |
|--------------------|---------------------|------------------------------------|
| Section            | Formatting Rule     | Formatting Range                   |
| Sun                | =MATCH($D5,CCO,0)>0 | $C,$C,$C,$C,$C,$C |
| Mon                | =MATCH($G5,CCO,0)>0 | $F,$F,$F,$F,$F,$F |
| Tue                | =MATCH($J5,CCO,0)>0 | $I,$I,$I,$I,$I,$I |
| Wed                | =MATCH($M5,CCO,0)>0 | $L,$L,$L,$L,$L,$L |
| Thu                | =MATCH($P5,CCO,0)>0 | $O,$O,$O,$O,$O,$O |
| Fri                | =MATCH($S5,CCO,0)>0 | $R,$R,$R,$R,$R,$R |
| Sat                | =MATCH($V5,CCO,0)>0 | $U,$U,$U,$U,$U,$U |

为每个 天部分设置格式:

| Section | Formatting Rule                        | Formatting Range                                                      |
|---------|----------------------------------------|-----------------------------------------------------------------------|
| Sun     | =ISTEXT(LOOKUP($D5-1,Start_Date,Name)) | $B,$B,$B,$B,$B,$B                                    |
| Sun-Mon | =ISTEXT(LOOKUP($D5,Start_Date,Name))   | $C:$E,$C:$E,$C:$E,$C:$E,$C:$E,$C:$E |
| Mon-Tue | =ISTEXT(LOOKUP($G5,Start_Date,Name))   | $F:$H,$F:$H,$F:$H,$F:$H,$F:$H,$F:$H |
| Tue-Wed | =ISTEXT(LOOKUP($J5,Start_Date,Name))   | $I:$K,$I:$K,$I:$K,$I:$K,$I:$K,$I:$K |
| Wed-Thu | =ISTEXT(LOOKUP($M5,Start_Date,Name))   | $L:$N,$L:$N,$L:$N,$L:$N,$L:$N,$L:$N |
| Thu-Fri | =ISTEXT(LOOKUP($P5,Start_Date,Name))   | $O:$Q,$O:$Q,$O:$Q,$O:$Q,$O:$Q,$O:$Q |
| Fri-Sat | =ISTEXT(LOOKUP($S5,Start_Date,Name))   | $R:$T,$R:$T,$R:$T,$R:$T,$R:$T,$R:$T |
| Sat-Sun | =ISTEXT(LOOKUP($V5,Start_Date,Name))   | $U:$V,$U:$V,$U:$V,$U:$V,$U:$V,$U:$V |

请注意,CCO 的格式必须位于 Conditional Formatting Rules Manager 天部分 的格式之上,如下所示:

A tip here is to use Format Painter to quickly "create" conditional formatting rules across sections, however each copied rule needs to be modified with the correct formatting range and formatting rule as given above.

A second tip, you can copy and paste one set of formatting range and formatting rule as text string to a cell, make a few copies of the text strings, then use the Find and Replace function (as demonstrated below) to bulk change the cell references and then update the formatting range and formatting rule one by one.

请注意,header 行中不会有空白或白色单元格。全天header默认背景色为浅绿色填充,颜色会根据格式规则改变。

我还设置了以下规则来“隐藏”您的 VLOOKUP 函数在 NAMEEMAILPHONE 行中返回的零。逻辑是如果行的默认背景颜色为白色,则 0 (zero) 将字体颜色格式化为白色,或者默认为浅灰色背景的行为浅灰色。您可以为一行设置规则,然后使用 Format Painter 为相似的行复制相同的规则。

这是一个现场演示:

如果您有任何问题,请告诉我。干杯:)