如何使用arrayforumla自动填充日期

时间:2016-04-04 21:39:10

标签: google-sheets array-formulas

我正在使用Google表格进行数据输入,只要有人提交表单,就会自动填充我网站上的数据。用户的数据导入到我的工作表中,带有时间戳(A列)。

使用Arrayformula函数,我想要一个列来自动填充该月内时间戳的所有日期。例如,如果输入1/5/2016作为时间戳,我希望在2016年1月1日至2016年1月31日期间自动填充公式。

此外,我还想在Arrayformula专栏中添加其他几个月。例如,如果在A列中输入1/5/2016和2/3/2016,我希望公式填写2016年1月1日至2016年2月29日的日期。

我知道我可以手动写入日期并将它们拖到列中,但是我有很多工作表,使用Arrayformula会节省很多时间。我在B栏中尝试了类似的公式,但它没有自动填充日期空白。我正在寻找什么?

以下是我所指的可编辑电子表格的副本:https://docs.google.com/a/flyingfx.com/spreadsheets/d/1Ka3cZfeXlIKfNzXwNCOWV15o74Bqp-4zaj_twC3v1KA/edit?usp=sharing

4 个答案:

答案 0 :(得分:5)

简短回答

Cell A1

1/1/2016

细胞A2

=ArrayFormula(ADD(A1,row(INDIRECT("A1:A"&30))))

解释

在Google表格中,日期是序列化数字,其中整数是天,分数是小时,分钟等。一旦牢记这一点,接下来就是找到一个有用的结构。

  • INDIRECT(reference_string,use_A1_notation)用于通过将高度指定为硬编码常量来计算所需大小的范围,在本例中为30。你不应该担心这个结构中的循环引用。

  • ROW(reference)返回连续数字数组。

  • A1是开始日期。

  • ADD(value1,value2)。它与使用+相同。由于第一个参数是标量值,第二个参数是值数组,因此它返回与第二个参数大小相同的数组。

  • ArrayFormula(array_formula)显示array_formula

  • 返回的值
  • 由于A1是日期,因此默认情况下返回的值也会格式化为日期。

答案 1 :(得分:1)

除了上述内容,我还有另一种选择,它允许您仅编辑第一行,然后添加保护(就像我喜欢在整个第一行中对其他公式使用此方法一样):

=ARRAYFORMULA(
  IF(
    ROW(A1:A) = 1,
    "Date",
    IF(
      ROW(A1:A) = 2,
      DATE(2020, 1, 1),
      DATE(2020, 1, 1) + (ROW(A1:A) - 2)
    )
  )
)
// pseudo code!
const START_DATE = 2020-01-01

if (currentRow == 1)
  print "Date"
else if (currentRow == 2)
  print START_DATE
else 
  print START_DATE + (currentRow - 2)

注意:

  • 初始日期是硬编码的(确保两个实例匹配!)
  • ROW(A1:1)返回当前行号,因此第一个if语句的计算结果为“如果这是第1行,则呈现Date
  • “如果这是第2行,则显示硬编码日期”
  • (nB:向日期添加整数会增加一天)
  • “否则将A2中的日期增加(调整后的)行数”(减去两个表示前两个if(A1和A2)处理的两行。例如:在第3行中,我们要添加1到第2行中的日期,所以current:3 - 2 = 1

这是一个实时示例(我在偶数月中添加了条件格式,以帮助进行健全性检查以确保每月的最后一天是正确的):

https://docs.google.com/spreadsheets/d/1seS00_w6kTazSNtrxTrGzuqzDpeG1VtFCKpiT_5C8QI/view#gid=0

此外-我发现以下VScode扩展名可用于突出显示Google表格公式的语法:https://github.com/leonidasIIV/vsc_sheets_formula_extension

Row1标头技巧是兰迪(Randy)通过https://www.tillerhq.com/what-are-your-favorite-google-spreadsheet-party-tricks/

提供的

答案 2 :(得分:0)

好。谢谢。

要使列表长度适应所选月份中的天数,请用30替换静态eomonth(A1;0)-A1+1。例如2月只有28或29天。

=ArrayFormula(ADD(A1,row(INDIRECT("A1:A"&eomonth(A1;0)-A1))))

答案 3 :(得分:0)

按月增加

如果有人希望能够按月递增,那么这就是我能够实现的一种方式。您的解决方案@ptim让我步入正轨,谢谢。

公式

放在B1

第一个月= 2020-11-01 [命名范围]

=ARRAYFORMULA(
    IF(
        ROW(A:A) = 1,
        "Date",
        IF(
            LEN(A:A),
            EDATE( First_Month, ROW( A:A ) -2 ),
            ""
        )
    )
)

结果

ID      Month
1       2020-11-01
2       2020-12-01
3       2021-01-01
4       2021-02-01
5       2021-03-01