【问题标题】:Cell value in calendar instead of Highlight日历中的单元格值而不是突出显示
【发布时间】:2016-01-10 00:30:43
【问题描述】:

我有一个休假日历,它使用条件格式在日历中突出显示每个员工休假日期的日期,这是完美的,但我希望而不是突出显示它在日历中显示日期前面提到的名称。

=SUMPRODUCT((B3=$E$19:$E$150))=1

我想在日历中显示姓名而不是绿色突出显示。 公式或 VBA;什么都可以接受。

【问题讨论】:

  • 答案将取决于您如何在 A3:A14 中输入月份名称。起初我以为它们只是由于单元格左对齐而键入的文本,但后来我注意到您在合并单元格 E19:L22 中的日期上强制左对齐。所以 A3:A14 可以是格式为mmmm 的实际日期,强制左对齐。它们是什么?
  • @Jeeped Calendar 使用公式“=DATE($D$1,ROWS($A$3:$A3),B$2)”

标签: excel excel-formula vba


【解决方案1】:

在 B3 中输入:

=IFERROR(INDEX($A$20:$A$151,MATCH(1,IF(DATE($D$1,ROWS($A$3:$A3),B$2)>=$E$20:$E$151,IF(DATE($D$1,ROWS($A$3:$A3),B$2)<=$I$20:$I$151,1)),0)),"")

这是一个数组公式,必须用 Ctrl-Shift-Enter 确认。然后向下复制。

如果名称仅在假期的第一天是必需的,那么更简单的 INDEX/MATCH 函数对就足够了。

在 B3 中,

=IFERROR(INDEX($A$20:$A$150,  MATCH(DATE(YEAR($A3), MONTH($A3), B$2), $E$20:$E$150, 0)), "")

向右和向下填充。

  

注意事项:

如果有重叠,这些只会返回名字。

根据您的本地设置,您可能需要将分隔符从 , 更改为 ;

如果您仍然想要条件格式,请将条件格式公式更改为:

=B3<>""

【讨论】:

  • 不错的公式,但我认为该名称仅用于进入假期跨度的第一个单元格('在日期前面提到日历')。实际上应该更容易一些。
  • @KzhelFarmer 正如 ti7 所说,如果这是比 vba 最好的愿望,公式不适用于未知数,例如要连接的人名数量。使用公式的唯一方法是为每个员工连接一个公式,因此您可以使用SMALL() 函数对我的公式进行修改,这将使其更长,并将其乘以员工人数。该公式将很大并且容易出错。这也是一个新问题,我回答了你原来的问题,它应该被标记为正确。如果您想提出新问题,请写一篇新帖子。
  • @KzhelFarmer - 我怎么知道你会在收到答案后立即更改问题的条件?我猜只是体验这些类型的问题。答案是不,你不能那样做!。您的列宽太窄,不能允许多个三个字符的“名称”。文本 CANNOT 溢出到下一个单元格,因为该单元格也将有一个公式;即使第二个单元格返回"",也足以截断从第一个单元格溢出的文本。
  • @KzhelFarmer - 您需要完全放弃任何基于公式的解决方案,以支持 VBA 程序;可能在添加到开始日期列时触发Worksheet_Change 事件宏。
  • @KzhelFarmer - 充分改变问题的条件以至于非常有效的提议解决方案不再有效,这确实被认为是非常糟糕的礼仪。如果您终于弄清楚了您需要什么,那么通过将建议的解决方案之一标记为“已接受的答案”或完全删除该问题来关闭此问题。根据您修改后的要求开始一个新问题。顺便说一句,要求 VBA 代码的人预计会表现出最初的努力。 SO 不是一个“给我的代码”网站。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2016-08-07
  • 2012-11-13
相关资源
最近更新 更多