【问题标题】:Create a rolling date list in Excel在 Excel 中创建滚动日期列表
【发布时间】:2020-10-11 23:14:12
【问题描述】:

我想在 Excel 中创建一个滚动日期列表,如下所示:

Day     Date
Day 1   01-Jul-19
Day 1   02-Jul-19
Day 1   03-Jul-19
Day 1   04-Jul-19
Day 1   05-Jul-19
Day 1   06-Jul-19
Day 1   07-Jul-19
Day 2   02-Jul-19
Day 2   03-Jul-19
Day 2   04-Jul-19
Day 2   05-Jul-19
Day 2   06-Jul-19
Day 2   07-Jul-19
Day 2   08-Jul-19
Day 3   03-Jul-19
Day 3   04-Jul-19
Day 3   05-Jul-19
Day 3   06-Jul-19
Day 3   07-Jul-19
Day 3   08-Jul-19
Day 3   09-Jul-19
Day 4   04-Jul-19
  .         .
  .         .
  .         .

所以基本上发生的情况是,从特定的开始日期(在上面的示例中,01-07-19)开始,7 天的范围每次向前移动一天,直到到达结束日期。 是否有自动执行此操作的方法?

【问题讨论】:

    标签: excel vba date


    【解决方案1】:

    @ashvin10 您可以在 vba 中执行此操作,但您也可以使用 2 个公式完成此操作,而无需使用 vba,方法如下:

    为了便于说明,我们假设您从第一行的07/01/2019 开始,您的信息将显示在AB 列中。

    1. A1中输入字符串Day 1
    2. B1 中输入您的开始日期,例如07/01/2019
    3. A2 输入这个公式:="Day " & IF(MOD(ROW(A2),7)<>0, MID(A2,5,(LEN(A2)-4)), MID(A2,5,(LEN(A2)-4))+1)
    4. B2 输入这个公式:=IF(A2=A1,B1+1,OFFSET(B2,-7,0)+1)
    5. 高亮单元格A2B2
    6. 单击单元格B2 右下角可用的叉号
    7. 向下拖动公式,直到达到所需的结束日期
    8. 这些单元格会以您请求的格式填充您请求的值

    如果您绝对必须使用 vba 完成它,请告诉我,我也可以向您展示如何做到这一点,但这种方式要容易得多。

    编辑:@ashvin10 很抱歉,我指示您输入A2 的原始公式仅适用于Day 1Day 9,如果您进入超过9 天,它将无法正确显示。我已经修复了应该粘贴到A2 中的公式,所以现在无论你下降多少天它都可以工作。很抱歉造成混乱。

    【讨论】:

    • @ashvin10 我的一个公式是错误的,我已经在我的回答中更正了它,请查看编辑。
    【解决方案2】:

    另外,这也可以在 Python 中完成。

    import datetime
    
    start_date = '01-07-2019'
    end_date = '31-01-2020'
    output_file_name = 'rolling dates'
    output_file_extension = '.CSV'
    delimiter = '\t'
    
    with open((output_file_name + output_file_extension.lower()), 'w+') as file:
        header = "Day" + delimiter + "Date" + '\n'
        file.write(header)
    
        start_date_object = datetime.datetime.strptime(start_date, '%d-%m-%Y').date()
        end_date_object = datetime.datetime.strptime(end_date, '%d-%m-%Y').date()
        number_of_days = abs((end_date_object - start_date_object).days)
        next_day = start_date_object
    
        for i in range(1, number_of_days + 2):
            for j in range(7):
                file.write(("Day {0}" + delimiter + next_day.strftime('%d-%m-%Y') + '\n').format(i))
                next_day += datetime.timedelta(days=1)
            start_date_object += datetime.timedelta(days=1)
            next_day = start_date_object
    

    运行上面的代码后,我只是简单地创建了一个空白的 Excel 文件,然后从这段代码输出的 CSV 文件中导入数据。

    这可以说比@gharbad-the-weak 的答案更复杂,但我想我还是会把它包括在内。

    【讨论】:

    • 这是对我回答原则的很好的改编。赞成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多