吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 257|回复: 5
收起左侧

[资源求助] 求一个Excel版的日历

[复制链接]
Jevier 发表于 2026-3-31 20:10
30吾爱币
求一个Excel版的日历,可以在日期下面写数字,主要用于记录每天的外块收入,然后还可以支持鼠标选中区域后,左下角可以显示求和、平均数、计数等信息,最好可以支持跨年

最佳答案

查看完整内容

以下是新代码,所有月份从上到下垂直排列在一个工作表里,使用起来更方便,不用切换Sheet。 Sub CreateSingleSheetIncomeCalendar() Dim ws As Worksheet Dim year As Integer, month As Integer Dim rowStart As Long Dim firstDay As Date Dim startCol As Integer Dim dayNum As Integer, i As Integer, c As Integer Dim monthTitleRow As Long Application.ScreenUpdatin ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

老梁不说话 发表于 2026-3-31 20:10
Jevier 发表于 2026-3-31 21:34
这么多个sheet表可以合成一个吗,就是按月从上到下,全部在一个sheet里面

以下是新代码,所有月份从上到下垂直排列在一个工作表里,使用起来更方便,不用切换Sheet。

Sub CreateSingleSheetIncomeCalendar()
    Dim ws As Worksheet
    Dim year As Integer, month As Integer
    Dim rowStart As Long
    Dim firstDay As Date
    Dim startCol As Integer
    Dim dayNum As Integer, i As Integer, c As Integer
    Dim monthTitleRow As Long
   
    Application.ScreenUpdating = False
   
    ' 创建或清空主工作表
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets("全年外快日历").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
   
    Set ws = ThisWorkbook.Sheets.Add
    ws.Name = "全年外快日历"
   
    rowStart = 2   ' 从第2行开始
   
    For year = 2025 To 2027
        For month = 1 To 12
            monthTitleRow = rowStart
            ' 月份标题
            ws.Cells(rowStart, 2).Value = year & "年 " & month & "月   每日外快收入记录"
            ws.Cells(rowStart, 2).Font.Size = 16
            ws.Cells(rowStart, 2).Font.Bold = True
            ws.Range(ws.Cells(rowStart, 2), ws.Cells(rowStart, 8)).Merge
            ws.Cells(rowStart, 2).HorizontalAlignment = xlCenter
            
            rowStart = rowStart + 2
            
            ' 星期标题
            ws.Cells(rowStart, 2).Value = "周一"
            ws.Cells(rowStart, 3).Value = "周二"
            ws.Cells(rowStart, 4).Value = "周三"
            ws.Cells(rowStart, 5).Value = "周四"
            ws.Cells(rowStart, 6).Value = "周五"
            ws.Cells(rowStart, 7).Value = "周六"
            ws.Cells(rowStart, 8).Value = "周日"
            
            With ws.Range("B" & rowStart & ":H" & rowStart)
                .Font.Bold = True
                .Interior.Color = RGB(0, 102, 204)
                .Font.Color = vbWhite
                .HorizontalAlignment = xlCenter
            End With
            
            rowStart = rowStart + 1
            
            firstDay = DateSerial(year, month, 1)
            startCol = Weekday(firstDay, vbMonday) + 1   ' 周一从第2列开始
            
            dayNum = 1
            Dim currentRow As Long
            currentRow = rowStart
            
            For i = 1 To 42
                c = ((i - 1) Mod 7) + 2
               
                If i >= startCol And dayNum <= Day(DateSerial(year, month + 1, 0)) Then
                    ' 日期
                    ws.Cells(currentRow, c).Value = dayNum
                    ws.Cells(currentRow, c).Font.Bold = True
                    ws.Cells(currentRow, c).HorizontalAlignment = xlCenter
                    
                    ' 收入输入格(日期下方)
                    ws.Cells(currentRow + 1, c).NumberFormat = "#,##0.00"
                    ws.Cells(currentRow + 1, c).Interior.Color = RGB(255, 255, 153)  ' 浅黄色
                    
                    dayNum = dayNum + 1
                End If
               
                If c = 8 Then
                    currentRow = currentRow + 3   ' 日期行 + 收入行 + 间隔行
                End If
            Next i
            
            rowStart = currentRow + 3   ' 下一个月留点间隔
        Next month
    Next year
   
    ws.Columns("B:H").ColumnWidth = 14
    ws.Rows.RowHeight = 22
   
    ws.Range("A1").Select
    Application.ScreenUpdating = True
   
    MsgBox "单个工作表全年日历创建完成!(2025-2027)", vbInformation
End Sub
老梁不说话 发表于 2026-3-31 20:37
新建一个Excel文件,按 Alt + F11 打开VBA编辑器,插入一个模块,粘贴以下代码,然后运行 CreateIncomeCalendar 即可自动生成2025-2027年所有月份的模板(可自行改年份)。

Sub CreateIncomeCalendar()
    Dim year As Integer
    Dim month As Integer
    Dim ws As Worksheet
    Dim firstDay As Date
    Dim startCol As Integer
    Dim i As Integer, r As Integer, c As Integer
    Dim dayNum As Integer
   
    Application.ScreenUpdating = False
   
    For year = 2025 To 2027
        For month = 1 To 12
            Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            ws.Name = year & "年" & Format(month, "00") & "月"
            
            ws.Range("A1").Value = year & "年 " & month & "月  每日外快收入记录"
            ws.Range("A1").Font.Size = 16
            ws.Range("A1").Font.Bold = True
            
            ' 星期标题
            ws.Range("B3:H3").Value = Array("周一", "周二", "周三", "周四", "周五", "周六", "周日")
            ws.Range("B3:H3").Font.Bold = True
            ws.Range("B3:H3").Interior.Color = RGB(0, 102, 204)
            ws.Range("B3:H3").Font.Color = vbWhite
            
            firstDay = DateSerial(year, month, 1)
            startCol = Weekday(firstDay, vbMonday) + 1   ' 周一=2
            
            dayNum = 1
            r = 4
            For i = 1 To 42
                c = ((i - 1) Mod 7) + 2
                If i >= startCol And dayNum <= Day(DateSerial(year, month + 1, 0)) Then
                    ' 日期
                    ws.Cells(r, c).Value = dayNum
                    ws.Cells(r, c).Font.Bold = True
                    ws.Cells(r, c).HorizontalAlignment = xlCenter
                    
                    ' 收入输入格(日期下方)
                    ws.Cells(r + 1, c).Value = 0   ' 默认0
                    ws.Cells(r + 1, c).NumberFormat = "#,##0.00"
                    ws.Cells(r + 1, c).Interior.Color = RGB(255, 255, 153)  ' 浅黄色突出
                    
                    dayNum = dayNum + 1
                End If
               
                If c = 8 Then
                    r = r + 3   ' 每行占3行高度(日期 + 收入 + 间隔)
                    c = 1
                End If
            Next i
            
            ' 美化
            ws.Columns("B:H").ColumnWidth = 12
            ws.Rows("4:100").RowHeight = 25
        Next month
    Next year
   
    ThisWorkbook.Sheets(1).Select
    Application.ScreenUpdating = True
    MsgBox "跨年日历模板创建完成!(2025-2027)", vbInformation
End Sub


运行后这样
          周一     周二     周三   ...
4行     1       2        3
5行    0.00   125.50    0.00     ← 这里输入收入
6行(空行)

直接在日期下方的黄色格子输入金额,选中任意一片收入格子区域(可跨多月、跨Sheet)。
Excel左下角状态栏会立刻显示:求和、平均值、计数、最小值、最大值。
 楼主| Jevier 发表于 2026-3-31 21:34
老梁不说话 发表于 2026-3-31 20:37
新建一个Excel文件,按 Alt + F11 打开VBA编辑器,插入一个模块,粘贴以下代码,然后运行 CreateIncomeCale ...

这么多个sheet表可以合成一个吗,就是按月从上到下,全部在一个sheet里面
shzjz123 发表于 2026-4-1 07:49
理解你的需求——这本质上是一个“带数据记录功能的日历模板”。Excel完全能实现,而且不用复杂公式,核心就两点:

记录数字:日期下方单元格手动填入收入金额。

统计功能:Excel的状态栏(窗口最底部)本身就能自动显示求和、平均数、计数,只要用鼠标一拖拽选中区域就行。

下面给你一个可以直接用的模板设计思路,你可以按步骤自己创建,也可以直接套用这个结构。

方案:一个“单页滚动”的跨年日历
这种方案的好处是:一年12个月紧凑排在一页上,不用翻工作表,年份可调,所有数据一目了然。

1. 模板结构设计(推荐)
A        B        C        D        E        F        G        H
1        年份        2026                                               
2                1月                        2月                       
3        一        1        8        15        22        29        一        5
4        二        2        9        16        23        30        二        6
5        三        3        10        17        24        31        三        7
6        四        4        11        18        25                四        8
7        五        5        12        19        26                五        9
8        六        6        13        20        27                六        10
9        日        7        14        21        28                日        11
10        收入                                                收入       
11                                                               
12                3月                        4月                       
13        一        1        8        15        22        29        一        5
…        …        …        …        …        …        …        …        …
说明:

每个月份占 8列 × 9行(星期行 + 日期行 + 收入行)。

年份在顶部,修改后所有日期自动变化(如果愿意可以用公式,但手动改年份更简单)。

收入行专门用来填数字,位于该月日期行的下方。

右侧留出空间给下一个月,依此类推排满12个月。

2. 如何实现“选中区域后自动求和/平均数/计数”
这个你完全不需要写公式,Excel自带:

选中任意一组收入数字的单元格区域(比如一月全部“收入”行的格子)。

看向Excel窗口最底部左下角的状态栏:

默认会显示 “平均值”、“计数”、“求和”。

如果没有显示,可以在状态栏右键单击,勾选你需要的项目。

这就是你要的效果,而且即时响应。

3. 跨年支持怎么做
非常简单,两种方式:

方式一(推荐):在表格顶部放一个“年份”单元格,每年新建一个工作表(Sheet),命名为“2026”、“2027”……把模板复制过去。

方式二:把所有年份放在同一个Sheet里,每个月下方多留几行用于记录,但长期数据多了会显得杂乱。更建议用方式一,清晰、易统计。

如果你想跨年对比,再做一个“汇总表”,用 SUMIF 按年份汇总就行。

4. 如果你想要更“自动”的版本
如果你希望:

修改年份后,所有日期(星期几对应的日期)自动刷新

自动区分不同月份的天数

自动标记周末

那么需要用到 DATE、WEEKDAY、MONTH 等函数。这个模板我可以帮你生成一个可直接下载的Excel文件结构说明,或者你告诉我你用的是 Windows / Mac / 网页版,我可以把公式和布局写成你直接能复制粘贴的格式。

总结
你的核心需求:

&#9989; 日历形式,日期下面写数字 → 用“日期行+收入行”结构

&#9989; 选中区域左下角显示求和/平均/计数 → Excel状态栏原生支持

&#9989; 支持跨年 → 每年一个Sheet,或顶部年份可调

如果你告诉我你更习惯 一页显示一整年(12个月紧凑) 还是 一个月一个Sheet(数据更多) ,我可以把具体的行列布局和公式直接给你,你照着填就能用。
beoimlife 发表于 2026-4-1 08:40
还可以这样用,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-5 18:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表