我有一个包含3列的表格,分别是“开始日期”,“结束日期”和“金额”。我想按如下所示在新表中按天划分多个记录。
此表是Data Studio报表的来源,因此理想情况下,我希望它会自动更新。
原始表
Start Date End Date Amount
01/01/2020 05/01/2020 55
02/01/2020 04/01/2020 90
新表
Date Amount
01/01/2020 55
02/01/2020 55
03/01/2020 55
04/01/2020 55
05/01/2020 55
02/01/2020 90
03/01/2020 90
04/01/2020 90
[这里,我已经使用google-apps-scripts来获取您的原始表,并在同一Google表格中获取新表。您可以根据需要更改此代码。希望这会有所帮助!
假设您是应用程序脚本的新手,我将从基本知识进行解释。
打开您的Google表格文档,然后转到工具->脚本编辑器。您将定向到scripts.google.com,并将获得一个空白的应用脚本文件(扩展名为.cs)。使用此脚本可获得以下输出。运行代码,并允许访问Google工作表。希望这对您有所帮助!请问您是否需要进一步的澄清!
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var date_values = []
var amount
date1 = data[1][0]
date2 = data[1][1]
amount = data[1][2]
while(date1<=date2){
date_values.push(new Date(date1))
date1.setDate(date1.getDate()+1)
}
doTest(date_values, amount)
}
function doTest(arr, amount) {
const no_dates = arr.length
for (var k=2; k<no_dates+2; k++){
SpreadsheetApp.getActiveSheet().getRange('E'+k).setValue(arr.shift());
SpreadsheetApp.getActiveSheet().getRange('F'+k).setValue(amount);
}
}
我在这里是新手,但我想我找到了实现所需目标的公式。尽管确实有人会知道如何消除该要求,但它确实需要一个帮助器专栏。
假设您的数据在B3:D6中,则两个主要公式在F3中:
=ArrayFormula(rept(B3:B6 & ";",(C3:C6-B3:B6+1)))
和在F10中:
=ArrayFormula(transpose(split(concatenate( F3:F6,";"),";",1,1)))
以下是示例表:https://docs.google.com/spreadsheets/d/1Y4sH9oDdO1TiC3i-sfZJDZGGmEr9PIZd6k-da5f6P2c/edit?usp=sharing
首先进行日期减法,并使用分隔符将“开始日期”值重复多次。第二个连接了helper列中的所有日期值,然后将所有日期值分成一列。
最后,对原始数据列使用日期值来完成VLOOKUP,以查找金额。
CONCATENATE函数可能有限制(50,000个字符?),该限制会限制最大值的数量,具体取决于您的日期差异。
让我知道这是否有帮助。