2

我有一列存储日期,我尝试实现一个条件格式自定义公式,如果一天是奇数或偶数,它会切换整行(或一行的多个单元格)的背景颜色。

这是我的工作表的逗号分隔值版本以及我试图实现的目标。日期和时间在不同的列中。我可以有多个具有相同日期(不同时间)的行。具有相同日期的行必须具有相同的颜色。

Date,       Time, Data
01/12/2014, 01:00, "xxxx" -> BG = X
01/12/2014, 03:00, "xxxx" -> BG = X
02/12/2014, 01:00, "xxxx" -> BG = Y
03/12/2014, 01:00, "xxxx" -> BG = X
03/12/2014, 02:00, "xxxx" -> BG = X
04/12/2014, 03:00, "xxxx" -> BG = Y

为了计算这一天是偶数还是奇数,我编写了一个简单的函数来返回自 1970 年 1 月 1 日以来的天数:

/**
 * Return the day of the year of a date or a range
 *
 * @param {date}|{Array.Array} Date or range.
 * @return The day of year.
 * @customfunction
 */
function DAYSFROM70(date) 
{
  if (date.map) {
    return date.map(DAYSFROM70);
  } else {
    if (!date instanceof Date || !date.getTime) {
      return "";
    } else {
      return Math.ceil(date.getTime() / 86400000);
    }
  }
}

这是我尝试应用的自定义公式(注意 DAYSFROm70 函数使用范围作为参数),但没有成功:

=ISODD(DAYSFROM70($B$2:$B$101))

以下公式为单元格背景着色(但我显然不能使用它,星期天和星期一都是奇数):

=ISODD(WEEKDAY($B$2:$B$101))

我的脚本有问题,但我不知道是什么...

查看此电子表格进行测试: https ://docs.google.com/spreadsheets/d/1U49FoeMPKlvjCURsqS7GxTH62u_fTJNCcH12XFQtWVQ

谢谢你的帮助。


4

3 回答 3

4

为什么你不能这样做:=isodd(day(A1)) ??

  • 选择整张纸
  • 点击格式->条件格式
  • 从下拉列表中选择“自定义公式”
  • 在公式框中输入:=isodd(day($A1))
  • 选择您的格式(背景颜色)
  • 点击确定。

编辑

在您的问题中,您没有具体说明“一天很奇怪”是什么意思。

因为您想为“每隔一天”为行着色,而不管年、月或年中的哪一天,您都可以这样做(使用内置函数): =isodd(DATEVALUE($A1))

[请阅读以上关于应用条件公式的说明。您不需要使用范围或数组]

不要参考条件格式公式中的范围!!"=ISEVEN(WEEKDAY($B$2:$B$23))" <- 不!!

"=isodd(DATEVALUE($A2))" <- 是的!!(其中 A2 是您正在格式化的范围的最顶行 - 如条件格式弹出对话框中的“范围”框中所写)

于 2014-09-09T10:23:54.530 回答
0

Google 电子表格似乎不支持该格式的日期。使用您的功能,尝试该格式时出现错误,但如果我从最后删除时间,它工作正常。

解决方法:将日期添加为自定义格式:https ://support.google.com/docs/answer/56470?hl=en

通过设置格式,我得到了它:“12/1/2014 1:00:00”:

Year(1930)-Month(08)-Day(05),Hour(1):Minute(1)

- - 编辑 - - -

我将条件格式设置为:

=ISODD(DAYSFROM70($A1))

我在 A 列中有日期,所以如果日期是奇数,这将改变整行。

希望这可以帮助

于 2014-09-09T10:29:35.547 回答
0

如果您的日期在 ColumnA 中,请尝试格式、条件格式...,自定义公式为:

=isodd(text($A1,"#"))  

将选择的格式应用于范围:A:Z(或根据需要扩展)。

于 2014-09-09T22:13:09.920 回答