Excel - 月份的日期和日期

Excel - 月份的日期和日期

我尝试了一些“日期”公式,但无法使其发挥作用。

这是我的问题:

我想建立一个电子表格,允许用户在 A1 中输入月份和年份。

我希望我的电子表格自动在 A 列中填充月份的“天数”,例如,如果月份从周三开始,那么周三就是第一天。然后,我希望在 B 列中填充日期,例如 01/12/2018(英国格式)。

另外,我希望省略星期日。我有一个手动版本,我必须每月输入值,但我想将其自动化,因为这需要完成 80 次,我不想首先手动填充,然后复制并粘贴 79 次。

有什么建议么?

答案1

假设您在单元格 A1 中输入的月份和年份是数字条目,例如 01/18、1/18、01/2018 或 1/2018,则您可以使用以下公式来制定列表。

首先在 B3 中输入以下公式。

=DATE(RIGHT(A1,LEN(A1)-FIND("/",A1)),LEFT(A1,FIND("/",A1)-1),1)+(WEEKDAY(DATE(RIGHT(A1,LEN(A1)-FIND("/",A1)),LEFT(A1,FIND("/",A1)-1),1))=1)

它看起来有点复杂,但这是因为要处理 A1 中可能出现的 4 种不同日期条目。如果您的日期输入格式不同,则需要使用不同的公式来计算每月第一天的日期。

在上面的公式中,它基本上找到“/”,并利用其位置来确定要拆分多少字符串以分别获取月份和年份的数字。获取月份和年份的数字后,信息被放入 DATE 公式中,该公式正在查找以下格式的信息:

=DATE(year, month, day)

由于已知日期是正在调查的月份的开始日期,因此设置 day = 1。等式 WEEKDAY 的下一部分确定星期几。如果星期几是星期日,则该月的第一天需要增加 1。由于布尔结果 TRUE 相当于 Excel 数学运算中的 1,而 FALSE 相当于 0,因此只需在确定月份第一天的公式中添加 WEEKDAY()=1 即可。

获得列表开头的种子后,您需要为下一行的日期添加 1,如果上一行是星期六,则为日期添加额外的 1。此外,您要确保新日期值不超过月底,对于我的程序,我还想确保上面的行不为空。在 B4 中使用以下公式并向下复制足够远以确保您涵盖最大可能的日期数量。

=IF(B3<>"",IF(B3+1+(WEEKDAY(B3)=7)>EOMONTH($B$3,0),"",B3+1+(WEEKDAY(B3)=7)),"")

这将生成跳过星期日的日期列表。

您有几个选项可以显示星期几。选项 1 是使用公式。基本上,以下公式将从 B 列中获取日期,并将值格式化为仅将星期几显示为字符串。在 A3 中使用以下公式并复制下来:

=TEXT(B3,"DDDD")

OR

=IF(B3<>"",TEXT(B3,"DDDD"),"")

如果您最终将公式复制到 B 中的公式之后,并最终引用空单元格而不是包含“”的单元格,则第二个方程式将显示空白。

波克

答案2

输入值如“3 2020”在细胞内A1并运行:

Sub INeedDates()
    Dim A1 As Range: Set A1 = Range("A1")
    Dim d As Date, i As Long

    i = 2
    arr = Split(A1, " ")
    d = DateSerial(arr(1), arr(0), 1)

    While CInt(Month(d)) = CInt(arr(0))
        If Format(d, "dddd") <> "Sunday" Then
            Cells(i, "A").Value = Format(d, "dddd")
            Cells(i, "B").Value = d
            Cells(i, "B").NumberFormat = "d/m/yyyy"
            i = i + 1
        End If
        d = d + 1
    Wend
End Sub

在此处输入图片描述

答案3

当我做(大致)类似的事情时,我通常喜欢将月份和年份输入分开,以便其他人以后使用时非常简单。(我见过很多人在 Excel 中难以正确输入日期。)

我建议以下设置:(抱歉,有些公式太长,本表一行无法写完。)

╔════╦═════════════════════════════════════════════════╦════════════════════════════════╗
║CELL║                   DATA/FORMULA                  ║               COMMENTS         ║
╠════╬═════════════════════════════════════════════════╬════════════════════════════════╣
║    ║                                                 ║                                ║
║ A1 ║  "Month"                                        ║ Locked cell with bold, centered║
║    ║                                                 ║ text, yellow fill, and red bor-║
║    ║                                                 ║ der on left, right & top sides ║
║    ║                                                 ║                                ║
║ B1 ║  "Year"                                         ║ Locked cell with bold, centered║
║    ║                                                 ║ text, yellow fill, and red bor-║
║    ║                                                 ║ der on left, right & top sides ║
║    ║                                                 ║                                ║
║ A2 ║  11                                             ║ Unlocked cell with Data Valid- ║
║    ║                                                 ║ ation requiring a whole number ║
║    ║                                                 ║ from 1 to 12 (inclusive), right║
║    ║                                                 ║ justified with red border on   ║
║    ║                                                 ║ left, right & bottom sides     ║
║    ║                                                 ║                                ║
║ B2 ║  2018                                           ║ Unlocked cell with Data Valid- ║
║    ║                                                 ║ ation requiring a whole number ║
║    ║                                                 ║ from 1 to 12 (inclusive), left ║
║    ║                                                 ║ justified with red border on   ║
║    ║                                                 ║ left, right & bottom sides     ║
║    ║                                                 ║                                ║
║ A3 ║  "Day"                                          ║ Locked cell, formatted as      ║
║    ║                                                 ║ heading to below table         ║
║    ║                                                 ║                                ║
║ B3 ║  "Date"                                         ║ Locked cell, formatted as      ║
║    ║                                                 ║ heading to below table         ║
║    ║                                                 ║                                ║
║ A4 ║  =IF(B4="","",TEXT(B4, "DDDD"))                 ║ This shows the name of the day ║
║    ║                                                 ║ of the date found in cell B4   ║
║    ║                                                 ║                                ║
║ B4 ║ =IF(WEEKDAY(DATE(B2, A2, 1))-1, DATE(B2, A2, 1),║ This picks the date of the 1st ║
║    ║  DATE(B2, A2, 2))                               ║ day of the month chosen above, ║
║    ║                                                 ║ unless it's a Sunday, then it  ║
║    ║                                                 ║ is the following day (Monday)  ║
║    ║                                                 ║                                ║
║ A5 ║  Copy A4 to these cells                         ║ As you copy A4 to these cells  ║
║ to ║                                                 ║ Excel will automatically alter ║
║ A29║                                                 ║ each to reference the cell in  ║
║    ║                                                 ║ column B of this row           ║
║    ║                                                 ║                                ║
║ B5 ║ =IF(B4="","",IF(IF(WEEKDAY(B4+1)-1,B4+1,B4+2)>= ║ This picks the date after B4   ║
║    ║ EOMONTH(B4,0),"",IF(WEEKDAY(B4+1)-1,B4+1,B4+2)))║ unless it's a Saturday, then it║
║    ║                                                 ║ picks the next Monday, unless  ║
║    ║                                                 ║ it would go into the next month║
║    ║                                                 ║                                ║
║ B6 ║  Copy B5 to these cells                         ║ As you copy B5 to these cells, ║
║ to ║                                                 ║ Excel will automatically alter ║
║ B29║                                                 ║ each one to reference the cell ║
║    ║                                                 ║ above it instead of B4         ║
╚════╩═════════════════════════════════════════════════╩════════════════════════════════╝

下面是实际运行的截图:
Excel 中的表格以“星期名称”和“日期”格式显示 2018 年 11 月除星期日以外的其他日子。

答案4

虽然不是最巧妙的解决方案,但快速又简单。如果您在单元格 A1 中输入月份的第一天,则在 A2 中添加此公式...

=IF(TEXT(A1,"DDDD")="Sunday",A1+1,A1)
then A3
=IF(TEXT(A2+1,"DDDD")="Sunday",A2+2,A2+1)

然后,您可以从那里向下复制公式。它会将星期日排除在您的列表之外。唯一会出现的星期日是您可能在单元格 A1 中输入的星期日。我针对 2019 年 9 月进行了测试,因为第一个是星期日。它返回

02/09/2019
03/09/2019
04/09/2019
05/09/2019
06/09/2019
07/09/2019
09/09/2019

希望有所帮助。

布拉德

相关内容