专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
完美Excel  ·  使用VBA选择所选区域第1个单元格 ·  2 天前  
Excel之家ExcelHome  ·  Excel数据整理的本手、妙手和奇手大PK ... ·  6 天前  
Excel之家ExcelHome  ·  Excel替换有技巧,用过一次都说好 ·  3 天前  
Excel之家ExcelHome  ·  Excel又多了一项新功能,实用指数A+ ·  6 天前  
完美Excel  ·  加强版的使用VBA保存和关闭工作簿的代码 ·  6 天前  
51好读  ›  专栏  ›  完美Excel

统计两个日期之间的星期日数

完美Excel  · 公众号  · Excel  · 2024-11-14 05:58

正文

学习Excel技术,关注微信公众号:

excelperfect


标签:Excel公式

如果想要知道两个日期之间有多少个星期日,该用什么公式呢?

如下图1所示,在单元格B1B2中分别放置两个日期,因为这两个日期之间的天数不长,很容易知道这两个日期之间有2个星期日。

1
单元格B4中的公式为:

=SUMPRODUCT((WEEKDAY(ROW(INDIRECT(B1 & ":" & B2)))=1)*1)

那这个公式是怎么得出结果的呢?

我们知道,Excel是以数字来存储日期的,如果把日期单元格的格式设置为数字格式,你会看到如下图2所示的结果。

2
公式中:

INDIRECT(B1 & ":" & B2)

在执行计算时会转换为如下图3所示。

3
INDIRECT函数会将这些数字文本转换引用,这样:

ROW(INDIRECT(B1 & ":" & B2))

会成为:

ROW($45597:$45607)

接着转换成:

{45597;45598;45599;45600;45601;45602;45603;45604;45605;45606;45607}

作为WEEKDAY函数的参数,即:

WEEKDAY({45597;45598;45599;45600;45601;45602;45603;45604;45605;45606;45607})

WEEKDAY函数将这些数字转换成代表每个日期的从17的数字,其中星期日为1、星期一为2……,星期六为7,即:

{6;7;1;2;3;4;5;6;7;1;2}

将其与1比较,返回:

{FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE}

1相乘,将TRUE/FALSE转换为1/0,即:

{0;0;1;0;0;0;0;0;0;1;0}

作为SUMPRODUCT函数的参数,得到结果:

2

更进一步,如果要统计两个日期之间周末(即星期六与星期日)的天数,则可以在单元格B4中输入公式:

=SUMPRODUCT((WEEKDAY(ROW(INDIRECT(B1 & ":" & B2)))={1,7})*1)

结果如下图4所示。

4
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。