Javascript 查找下一个唯一值并将公式添加到下两列
如何更改录制的宏以使其Javascript 查找下一个唯一值并将公式添加到下两列,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,如何更改录制的宏以使其 在A列中查找下一个唯一值 去那排 在该行的C列中,粘贴公式=转置(过滤器($AZ:$BS,$AZ:$BS,$AZ:$BS?)在该行的D列中粘贴=转置(过滤器($F?:$Y?,$F?:$Y?)和E列=转置(过滤器($BW?:$CP,$BW:$CP) 我试图在Google Sheets上编写一个宏,在a列中找到下一个唯一的名称,然后将公式1应用于C列,将公式2应用于D列,将公式3应用于下一个唯一值所在行的E列 我记录了我手动操作的宏,但我真的不想这样做,因为我有大约2000
=转置(过滤器($AZ:$BS,$AZ:$BS,$AZ:$BS?)
在该行的D列中粘贴=转置(过滤器($F?:$Y?,$F?:$Y?)
和E列=转置(过滤器($BW?:$CP,$BW:$CP)
我试图在Google Sheets上编写一个宏,在a列中找到下一个唯一的名称,然后将公式1应用于C列,将公式2应用于D列,将公式3应用于下一个唯一值所在行的E列 我记录了我手动操作的宏,但我真的不想这样做,因为我有大约2000个唯一的名称要做
function threeformulas() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('C2').activate();
spreadsheet.getCurrentCell().setFormula('=transpose(filter($AZ2:$BS2,$AZ2:$BS2<>""))');
spreadsheet.getRange('D2').activate();
spreadsheet.getCurrentCell().setFormula('=transpose(filter($F2:$Y2,$F2:$Y2<>""))');
spreadsheet.getRange('E2').activate();
spreadsheet.getCurrentCell().setFormula('=transpose(filter($BW2:$CP2,$BW2:$CP2<>""))');
spreadsheet.getRange('C12').activate();
spreadsheet.getRange('C2:E2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getRange('C22').activate();
spreadsheet.getRange('C2:E2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
函数三公式(){
var电子表格=SpreadsheetApp.getActive();
电子表格.getRange('C2').activate();
电子表格.getCurrentCell().setFormula('=转置(过滤器($AZ2:$BS2,$AZ2:$BS2')));
电子表格.getRange('D2').activate();
setFormula('=转置(过滤器($F2:$Y2,$F2:$Y2'));
spreadsheet.getRange('E2').activate();
setFormula('=转置(过滤器($BW2:$CP2,$BW2:$CP2'));
spreadsheet.getRange('C12').activate();
spreadsheet.getRange('C2:E2').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.copypesttype.PASTE_正常,false);
电子表格.getRange('C22').activate();
spreadsheet.getRange('C2:E2').copyTo(spreadsheet.getActiveRange(),SpreadsheetApp.copypesttype.PASTE_正常,false);
};
转置公式必须存在,因为数据库从D列到CP列吐出的报告非常不可靠。这里是数据的图像。我已经强调了下一个唯一值的位置。我相信您的目标如下
- 您想检查列“A”的值
- 当在列“A”中找到第一个唯一值时,需要将3个公式放入列“C”到“E”中。
- 在示例图像中,您希望将公式放入单元格“C2:E2”、“C12:E12”和“C22:E22”
- 在您的问题中,公式1、公式2和公式3分别是
,=转置(过滤器($AZ2:$BS2,$AZ2:$BS2”“)
和=转置(过滤器($F2:$Y2,$F2:$Y2”“)
)=转置(过滤器($BW2:$CP2,$BW2:$CP2”“)
sheetName
function myFunction() {
const sheetName = "Sheet1"; // Please set the sheet name.
// 1. Retrieve all values from the column "A".
// 2. Create the range list for putting 3 formulas.
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const ranges = sheet
.getRange("A2:A" + sheet.getLastRow())
.getValues()
.reduce((o, [a], i) => {
if (a != o.temp) {
o.temp = a;
const row = i + 2
o.f1.push(`C${row}`);
o.f2.push(`D${row}`);
o.f3.push(`E${row}`);
}
return o;
}, {f1: [], f2: [], f3: [], temp: ""});
// 3. 3 formulas are put using the created range list.
sheet.getRangeList(ranges.f1).setFormulaR1C1('=transpose(filter(R[0]C52:R[0]C71,R[0]C52:R[0]C71<>""))');
sheet.getRangeList(ranges.f2).setFormulaR1C1('=transpose(filter(R[0]C6:R[0]C25,R[0]C6:R[0]C25<>""))');
sheet.getRangeList(ranges.f3).setFormulaR1C1('=transpose(filter(R[0]C75:R[0]C94,R[0]C75:R[0]C94<>""))');
}
函数myFunction(){
const sheetName=“Sheet1”//请设置图纸名称。
//1.从列“A”中检索所有值。
//2.创建放置3个公式的范围列表。
const sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
常数范围=表
.getRange(“A2:A”+sheet.getLastRow())
.getValues()
.减少((o[a],i)=>{
如果(a!=o.temp){
o、 温度=a;
常量行=i+2
o、 f1.push(`C${row}`);
o、 f2.push(`D${row}`);
o、 f3.push(`E${row}`);
}
返回o;
},{f1:[],f2:[],f3:[],温度:'});
//3.使用创建的范围列表放置3个公式。
sheet.getRangeList(ranges.f1).setFormulaR1C1('=转置(过滤器(R[0]C52:R[0]C71,R[0]C52:R[0]C71“”));
sheet.getRangeList(ranges.f2).setFormulaR1C1('=转置(过滤器(R[0]C6:R[0]C25,R[0]C6:R[0]C25'));
sheet.getRangeList(ranges.f3).setFormulaR1C1('=转置(过滤器(R[0]C75:R[0]C94,R[0]C75:R[0]C94'));
}
参考资料:
sheet.getRangeList(ranges.f1).setFormulaR1C1('=转置(过滤器(R[0]C52:R[0]C71,R[0]C52:R[0]C71'));
sheet.getRangeList(ranges.f2).setFormulaR1C1('=转置(过滤器(R[0]C6:R[0]C25,R[0]C6:R[0]C25'));
sheet.getRangeList(ranges.f3).setFormulaR1C1('=转置(过滤器(R[0]C75:R[0]C94,R[0]C75:R[0]C94'));
致:
sheet.getRangeList(ranges.f1).setFormulaR1C1(`=transpose(过滤器('Raw Data Austin'!R[0]C52:R[0]C71,'Raw Data Austin'!R[0]C52:R[0]C71'))`);
sheet.getRangeList(ranges.f2).setFormulaR1C1(`=transpose(filter('Raw Data Austin'!R[0]C6:R[0]C25,'Raw Data Austin'!R[0]C6:R[0]C25'))`);
sheet.getRangeList(ranges.f3).setFormulaR1C1(`=transpose(filter('Raw Data Austin'!R[0]C75:R[0]C94,'Raw Data Austin'!R[0]C75:R[0]C94'))`);
- 在此修改中,请注意使用模板文字
- 您想检查列“A”的值
- 当在列“A”中找到第一个唯一值时,需要将3个公式放入列“C”到“E”中。
- 在示例图像中,您希望将公式放入单元格“C2:E2”、“C12:E12”和“C22:E22”
- 在您的问题中,公式1、公式2和公式3分别是
,=转置(过滤器($AZ2:$BS2,$AZ2:$BS2”“)
和=转置(过滤器($F2:$Y2,$F2:$Y2”“)
)=转置(过滤器($BW2:$CP2,$BW2:$CP2”“)
- 从列“A”中检索所有值
- 创建放置3个公式的范围列表
- 使用创建的范围列表放置3个公式 示例脚本: 请将以下脚本复制并粘贴到绑定容器的脚本编辑器中
- 我相信你的目标如下
sheet.getRangeList(ranges.f1).setFormulaR1C1('=transpose(filter(R[0]C52:R[0]C71,R[0]C52:R[0]C71<>""))');
sheet.getRangeList(ranges.f2).setFormulaR1C1('=transpose(filter(R[0]C6:R[0]C25,R[0]C6:R[0]C25<>""))');
sheet.getRangeList(ranges.f3).setFormulaR1C1('=transpose(filter(R[0]C75:R[0]C94,R[0]C75:R[0]C94<>""))');
sheet.getRangeList(ranges.f1).setFormulaR1C1(`=transpose(filter('Raw Data-Austin'!R[0]C52:R[0]C71,'Raw Data-Austin'!R[0]C52:R[0]C71<>""))`);
sheet.getRangeList(ranges.f2).setFormulaR1C1(`=transpose(filter('Raw Data-Austin'!R[0]C6:R[0]C25,'Raw Data-Austin'!R[0]C6:R[0]C25<>""))`);
sheet.getRangeList(ranges.f3).setFormulaR1C1(`=transpose(filter('Raw Data-Austin'!R[0]C75:R[0]C94,'Raw Data-Austin'!R[0]C75:R[0]C94<>""))`);