使用应用程序脚本更新一系列单元格中的公式

凯尔W

我是编码新手。谢谢你的帮助。

我有一个每天维护的预算/支出跟踪电子表格。每个月我都会创建一个新标签并跟踪我的费用。我还有一个“总计”选项卡,它汇总了所有月份选项卡中跨多个类别的所有费用。

我的目标是有一个菜单按钮,我可以在每月的 1 日选择它执行以下操作。

  1. 创建一个新选项卡并用月份的三个字母缩写命名它,即“Sep”[我下面的代码完成了其中的一部分,但我需要帮助]
  2. 清除新选项卡上某些范围内的内容 [我下面的代码是这样做的]
  3. 将“总计”选项卡上的 vlookup 公式复制到新月份的新列,并将公式从上个月更新到新月份(参见下面的示例)。我的“总计”选项卡每个月都有一列。行是我的支出类别。每个单元格都根据它所在的月份列从月份选项卡中提取支出。 [我需要这方面的帮助]

    =iferror(VLOOKUP($A3, Apr !$H$14:$I$23,2,FALSE),0)

    =iferror(VLOOKUP($A3, May !$H$14:$I$23,2,FALSE),0)

我当前的代码(部分完成 1 和 2 完全)如下。寻求帮助将我的月份选项卡重命名为三个字母的月份(例如,Dec)并更新“总计”选项卡(根据上面的第 3 项)。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('New Monthly Tab');
  var item = menu.addItem('Create New Tab', 'newMonthTab');
  item.addToUi();
}

function newMonthTab () {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var tz = ss.getSpreadsheetTimeZone();
    var sheet = ss.getActiveSheet();
    var date = Utilities.formatDate(new Date(), tz, 'MM');

  //duplicates and renames the tab
    SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet();
    ss.renameActiveSheet(date);

  //clears content
    ss.getRange('A15:D23').activate();
    ss.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    ss.getRange('I8:J11').activate();
    ss.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    ss.getRange('M2:O35').activate();
    ss.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    ss.getRange('W1').activate();
    ss.getRange('X1:X15').copyTo(ss.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
    ss.getRange('X1:X15').activate();
    ss.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
}

2020 年 5 月 18 日更新:以下是我对“总计”选项卡进行手动更新时创建的宏中的代码。我希望在单击“新月度标签”菜单时发生这种情况,但我不确定如何获取脚本以使用新月标签的名称更新 vlookup 公式。我相信有一种更优雅的方法可以做到这一点。

   function updatetotalstab() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('G3').activate();
  spreadsheet.getRange('F3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getCurrentCell().setFormula('=iferror(VLOOKUP($A3,Jun!$H$14:$I$23,2,FALSE),0)');
  spreadsheet.getRange('G4:G12').activate();
  spreadsheet.getRange('G3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('G23').activate();
  spreadsheet.getRange('F23').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getCurrentCell().setFormula('=iferror((index(Jun!$R$2:$R$11,match($A23,Jun!$Q$2:$Q$11,0))),0)');
  spreadsheet.getRange('G24:G36').activate();
  spreadsheet.getRange('G23').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('G43').activate();
  spreadsheet.getRange('F43').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getCurrentCell().setFormula('=iferror((index(Jun!$X$2:$X$13,match($A43,Jun!$V$2:$V$13,0))),0)');
  spreadsheet.getRange('G44:G50').activate();
  spreadsheet.getRange('G43').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('G52:G56').activate();
  spreadsheet.getRange('G43').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
齐加诺奇卡

对于你的第一个问题:

日期可以根据太简单的日期格式进行格式化

对于 3 个字母的月份,您可以使用: var date = Utilities.formatDate(new Date(), tz, 'MMM');

你的第二个问题:

要扩展 functionnewMonthTab()的功能并设置具有动态内容的公式,月份的名称,可以date通过简单地将公式的静态部分(作为字符串)和动态变量 ( ) 与+.

样本:

...
var date = Utilities.formatDate(new Date(), tz, 'MMM');
ss.renameActiveSheet(date);
// define here the cell in which you want to paste the formula:
var cell = sheet.getRange('G3');
var formula = '=iferror(VLOOKUP($A3,' + date + '!$H$14:$I$23,2,FALSE),0)';
cell.setFormula(formula);
...

我希望这个示例可以帮助您了解如何自己设置其他公式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用宏将公式粘贴到一系列单元格中

如何使用 Excel VBA 中的循环更新一系列单元格中的值

将公式应用于一系列单元格而无需拖放

Excel:使用多单元格数组公式将函数应用于一系列范围

VBA 从一系列单元格中获取公式作为文本

使用脚本从一系列单元格插入注释

使用目标偏移量清除Excel中的一系列单元格

在Excel VBA中对一系列单元格使用自动填充

使用 VBA 验证一系列单元格中的日期

谷歌工作表时间戳脚本在删除或更新一系列单元格时不更新

与excel交互的Python错误将公式写入一系列单元格

VBA对一系列单元格求和

用逗号连接一系列单元格

选择并复制一系列单元格

一系列单元格的重复值

VBA Excel:连接一系列单元格

为If / Then语句包括一系列单元格

IF功能跨越一系列单元格

尝试在Google表格脚本中存储一系列行/单元格。想要然后更改行/单元格的颜色和格式

如何将我的VBA代码应用于一系列单元格?

如何使用Excel.Interop将列表中的值填充到Excel中的一系列单元格?

如何使用 VBA 将 Excel 中的一系列单元格粘贴到 Word 中

在一系列单元格上将ISFORMULA与ARRAYFORMULA一起使用

使用closedXML和C#将一系列单元格值放入列表中

如何在 ARRAYFORMULA 中为一系列单元格使用自定义函数?

如何在PHPExcel中的每个单元格名称数组中获取一系列单元格?

将值从工作表中的单元格复制到一系列单元格中

如何更改一系列列表中的单元格范围?(熊猫从 Excel 中读取)

使用应用程序脚本向特定单元格添加公式