分享免费的编程资源和教程

网站首页 > 技术教程 正文

在 Excel 日历制作中,尤其是动态日历方案,会用到的多个函数详解

goqiw 2025-08-06 19:34:57 技术教程 4 ℃ 0 评论

在 Excel 日历制作中,尤其是动态日历方案,会用到多个核心函数。下面我将详细解析这些函数的作用、参数和使用技巧:




核心日期函数

1. DATE(year, month, day)

作用:创建指定日期

参数

year:年份(如 2025)

month:月份(1-12)

day:日期(1-31)

示例 =DATE(2025,8,1) → 返回2025年8月1日的序列值

日历应用:生成目标月份的第一天

2. EOMONTH(start_date, months)

作用:返回指定月份最后一天

参数

start_date:起始日期

months:偏移月数(0=当前月,1=下个月,-1=上个月)

示例 =EOMONTH(DATE(2025,8,1),0) → 2025/8/31

日历应用:确定当月天数范围

3. WEEKDAY(serial_number, [return_type])

作用:返回星期几的数字表示

参数

serial_number:日期值

return_type(重要):

1:周日=1 → 周六=7

2:周一=1 → 周日=7(推荐)

3:周一=0 → 周日=6

示例 =WEEKDAY("2025-8-1",2) → 5(星期五)

日历应用:确定每月 1 号是星期几




逻辑控制函数

4. IF(logical_test, value_if_true, [value_if_false])

日历公式中的嵌套结构 =IF(月份检查, "", IF(星期位置判断, "", IF(首行处理, 首日, 后续日期)))

实际应用 =IF(MONTH($C$1)<>$A$2, "",
IF(WEEKDAY($C$1,2)>COLUMN(A1), "",
IF(ROW(A1)=1, $C$1,
IF(B4+1<=$C$2, B4+1, "")
)
)
)

5. AND(logical1, [logical2], ...) / OR(logical1, [logical2], ...)

日历应用 =AND(B5>=开始日期, B5<=结束日期) // 标记任务区间
=OR(WEEKDAY(B5,2)=6, WEEKDAY(B5,2)=7) // 标记周末





查找与匹配函数

6. INDEX(array, row_num, [column_num])

作用:返回区域中指定位置的值

日历应用:提取事件描述 =INDEX(事件描述列, MATCH(当前日期, 日期列, 0))

7. MATCH(lookup_value, lookup_array, [match_type])

参数

match_type=0:精确匹配

组合应用 =INDEX($B:$B, MATCH(B5, $A:$A, 0))
// 在A列查找日期,返回B列对应事件

8. COUNTIF(range, criteria)

日历应用:标记节假日 =COUNTIF(节假日列表, B5)>0 // 条件格式公式




辅助定位函数

9. ROW([reference]) / COLUMN([reference])

作用:获取行号/列号

动态技巧 COLUMN(A1) // 向右拖动时:A1→1, B1→2, C1→3...
ROW(A1) // 向下拖动时:A1→1, A2→2, A3→3...

日历应用:动态判断单元格位置 =IF(WEEKDAY($C$1,2)>COLUMN(A1), "", $C$1)

10. SEQUENCE(rows, [columns], [start], [step])(Excel 365 专属)

高级日历方案 =LET(
首日, DATE(A1,A2,1),
最后日, EOMONTH(首日,0),
天数, DAY(最后日),
起始空白, WEEKDAY(首日,2)-1,
SEQUENCE(6,7,首日-起始空白,1)
)





格式转换函数

11. TEXT(value, format_text)

日历应用 =TEXT(DATE(A1,A2,1),"yyyy年m月") // → "2025年8月"
=TEXT(B5,"d") // 只显示日期数字

12. MONTH(serial_number) / DAY(serial_number)

验证函数 MONTH("2025-8-15") → 8
DAY("2025-8-15") → 15





函数组合实战解析

动态日历核心公式分解


=IF(

   MONTH($C$1)<>$A$2, "",               // 检查是否目标月份

   IF(

      WEEKDAY($C$1,2)>COLUMN(A1), "",   // 检查是否在1号之前的位置

      IF(

         ROW(A1)=1, $C$1,               // 如果是第一行显示1号

         IF(

            B4+1<=$C$2, B4+1, ""       // 后续日期递增

         )

      )

   )

)


各部分的协同工作:

$C$1 = DATE($A$1,$A$2,1)(当月 1 号)

$C$2 = EOMONTH($C$1,0)(当月最后一天)

COLUMN(A1):动态列定位(向右填充时:1→2→3...)

ROW(A1):动态行定位(向下填充时:1→2→3...)

B4+1:日期递增逻辑(依赖前一个单元格)




使用技巧与注意事项


绝对引用 vs 相对引用

锁定基准日期:$C$1$C$2

允许行列动态变化:COLUMN(A1)ROW(A1)


错误处理 =IFERROR(原公式, "")



性能优化

避免整列引用:A:AA2:A100

使用LET函数(Excel 365)减少重复计算


日期显示格式 右键单元格 → 设置格式 → 自定义 → 输入 "d"(只显示天数)






函数关系图


graph TD

    A[年份输入] --> B[DATE函数]

    C[月份输入] --> B

    B --> D[生成当月1号]

    D --> E[EOMONTH求最后一天]

    D --> F[WEEKDAY求星期几]

    F --> G[COLUMN定位起始列]

    E --> H[日期范围验证]

    G --> I[日历网格构建]

    H --> I

    I --> J[条件格式标记]


掌握这些函数的组合应用,你就能创建出功能强大的动态日历系统。实际使用时建议分段测试公式,逐步构建完整的日历逻辑。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表