如何以某种方式更改录制的宏
=transpose(filter($AZ#:$BS#,$AZ#:$BS#<>""))
在该行的D列中粘贴=transpose(filter($F#:$Y#,$F#:$Y#<>""))
和E列=transpose(filter($BW#:$CP#,$BW#:$CP#<>""))
我正在尝试在Google表格上编写一个宏,该宏将在A列中找到下一个唯一的名称,然后将公式1应用于C列,将公式2应用于D列,将公式3应用于该行的E列,其中下一个唯一值是。
我记录了我手动执行的宏,但是我真的不愿意这样做,因为我有大约2,000个唯一的名称。
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);
};
答案 0 :(得分:4)
我相信您的目标如下。
=transpose(filter($AZ2:$BS2,$AZ2:$BS2<>""))
,=transpose(filter($F2:$Y2,$F2:$Y2<>""))
和=transpose(filter($BW2:$CP2,$BW2:$CP2<>""))
。在这种情况下,为了实现您的目标,我使用以下流程。
请将以下脚本复制并粘贴到Spreadsheet的容器绑定脚本的脚本编辑器中。并设置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<>""))');
}
我想我唯一的问题是我不确定转置公式如何更改,并且我想知道如果Im引用另一个工作表示例中的数据该怎么写:transpose(filter('Raw Data-Austin'! $ BW2:$ CP2,'Raw Data-Austin'!BW2:$ CP2 <>“”))
关于this your additional question,在这种情况下,请进行以下修改。
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<>""))`);
答案 1 :(得分:1)
与Tanaike在their answer上所做的一样,我认为最好从头开始,而不是编辑已录制的宏,因为已录制的宏会激活每个要编辑的单元格,但这会使您的“宏”变慢甚至更多不必要的重要。
因此,您应该首先了解Google Apps脚本使用JavaScript。 Tanaike的答案使用了一些有趣的编程内容,例如:
以及某些特定的电子表格服务功能,例如
如果尚未完成,请阅读https://developers.google.com/apps-script/guides/sheets
相关