Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 是否有Google Sheets公式或查询来获取日期范围内的月份数组?_Google Sheets - Fatal编程技术网

Google sheets 是否有Google Sheets公式或查询来获取日期范围内的月份数组?

Google sheets 是否有Google Sheets公式或查询来获取日期范围内的月份数组?,google-sheets,Google Sheets,我有一个开始日期和结束日期,DATEDIF可以很容易地得到其中的月数。我希望在该范围内每个月写出,例如,对于日期范围: Mar 1, 2016 - Jul 31, 2018 …我希望迭代该范围内的月数,并从开始日期开始为该范围内的每个月返回一行: Mar 2016 Apr 2016 May 2016 (the rest of 'em) Apr 2018 May 2018 Jun 2018 这也许能更好地说明我在追求什么。此表显示了我的来源,一张唯一的订阅表,每个订阅都有一个ID、一个费率以及

我有一个开始日期和结束日期,DATEDIF可以很容易地得到其中的月数。我希望在该范围内每个月写出,例如,对于日期范围:

Mar 1, 2016 - Jul 31, 2018
…我希望迭代该范围内的月数,并从开始日期开始为该范围内的每个月返回一行:

Mar 2016
Apr 2016
May 2016
(the rest of 'em)
Apr 2018
May 2018
Jun 2018
这也许能更好地说明我在追求什么。此表显示了我的来源,一张唯一的订阅表,每个订阅都有一个ID、一个费率以及开始和结束日期:

我希望自动生成的表将遍历每个唯一的订阅ID行,然后在该订阅ID的开始-结束日期为每个月的订阅付款提供一行:

这第二个表我只是想让它变得动态,并且依赖于第一个表中的内容,以节省时间

我知道我必须投入时间,想办法像其他人一样做到这一点,但如果你知道仅仅使用Google Sheets的标准功能和查询是否有可能做到这一点,我将充满新的希望


提前感谢所有患者的指导。

我很好奇是否可以用配方奶粉

结果如下:
=query({TRANSPOSE(SPLIT)(TEXTJOIN(“,1,TRANSPOSE(ARRAYFORMULA)(TEXT(ROW)(INDIRECT(“a1:a”)和MAX(FILTER(DATEDIF(D2:D,E2:E,“M”),A2:a”))*(TRANSPOSE(FILTER(DATEDIF(D2:D,E2:E,“M”),A2:a)”)>=ROW(INDIRECT(a1:a”)和MAX(FILTER(FILTER(DATEDIF(D2:D,E2:E,“M”),A2:a“,”),“;”),”),“,”,”,
数组公式(文本)(EOM)(
VLOOKUP(转置)(拆分(联接(“),报告(行(间接)(“A1:A”&计数A(A2:A))&“,”,过滤器(DATEDIF(D2:D,E2:E,“M”),A2:A“”),“,”),过滤器({行(A2:A)-行(A2)+1,D2:D},A2:A“”),2,),
转置(SPLIT(TEXTJOIN(“),1,TRANSPOSE(TEXT(ROW)(INDIRECT)(“a1:a”和MAX(FILTER(DATEDIF(D2:D,E2:E,“M”),A2:a)”))*(TRANSPOSE(FILTER(DATEDIF(D2:D,E2:E,“M”),TRANSPOSE(FILTER)(FILTER)(DATEDIF(D2:D,E2:E,“M”),A2:a)”)>=行(indirective(“a1:a”和MAX(FILTER(DATEDIF(D2:D,E2:D,E2:E,“E,“M”),A2:a)”),“))),”1
),“年月日”),
数组格式(VLOOKUP(转置)(拆分(联接(“,报告(行(间接)(“A1:A”&计数A(A2:A)))&“,”,过滤器(DATEDIF(D2:D,E2:E,“M”),A2:A“),”),”),过滤器({行(A2:A)-行(A2)+1,A2:C},A2:A“,{2,4}),“选择Col1,Col3,Col2,Col4标签Col1'付款Id',Col3'订阅U Id',Col2 PAYMENTMOUNT'格式,Col4'$4)

如果您了解js,那么最好使用应用程序编写脚本 剧本


如果您了解js,那么最好使用apps脚本编写脚本。这看起来更像是unpivot。如果这最终是适合这项工作的工具,那么是的……我只是希望在工作表功能方面尽我所能。我会搜索unpivot主题。这应该是可行的。在稍后可以隐藏的列中,在顶部单元格(在我的例子中是A2)中,将一个月最早的第一天放在数据中(或者我想你可以用一分钟来计算)。紧靠位置下方,然后根据需要向下拖动=如果(月份(A2)=12,日期(年份(A2)+1,1,1),日期(年份(A2),月份(A2)+1,1))。然后,我根据以下内容(C3和D3)修改了我的开始和结束日期:=query(A2:A,“选择一个where(A>=date)”&TEXT(C3,“yyyy-MM-dd”)&TEXT(C3,“yyyyy-MM-dd”)&A,它给出了我想要的确切日期列表。我想它可能可以扩展以满足您的需要。您可以使用=arrayformula(TEXT(query(A2:A,“选择*where(A>=date)”&TEXT)获得您想要的格式(C3,“yyyy-MM-dd”)&“这是一个很难理解的查询!谢谢你这么麻烦。我想问一下,为什么使用apps脚本编写脚本更好,它是否会更可读/更易于维护?哇,这太令人印象深刻了。当我无法在数组公式中放入间接时,我陷入了困境。@user2136000,脚本的主要原因是公式使用了join+split constr在我看来,虽然我没有说得很精确,但对于写n次东西的基本任务,你不需要加入、拆分或使用rept。相反,你可以说=arrayformula(if(isblank(A1:A30),“this guy”,“this guy”)),然后把它抽象出来,把30连在一起,然后你用间接的,“这个家伙”变成了一个单元格引用。但是我刚才写的东西让你创建了30次“这个家伙”。如果这么简单地使用if,这有点奇怪,但它是行得通的。谢谢你,@jeremy kahan,好主意!