【问题标题】:Pasting Values Only For Certain Formulas仅为某些公式粘贴值
【发布时间】:2020-10-12 21:23:43
【问题描述】:

我有一个大型工作簿,其中包含几个选项卡上数百个指标的每周数据(列)。它通过SUMIFS 公式提取这些数据,在大多数选项卡上,有几行包含根据这些SUMIFS 公式计算的比率/比率。

这是一个玩具示例。

对于每张工作表,我只想粘贴基于“SUMIFS”的公式的值,并保留其他计算。我能够选择一个范围并逐个单元格地循环来完成此操作,但由于工作簿的大小,这需要很长时间。有没有办法以批量方式一次做到这一点?基本上,我只想在存在特定条件时复制和粘贴值。

【问题讨论】:

  • 请分享您当前的循环。
  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解For each sheet, I would like to paste values only for formulas that are based on 'SUMIFS', and leave the other calculations.Is there a way to do this at once in a batch-fashion? Basically, I want to copy and paste-values only if a certain condition exists.。为了正确了解您当前的情况和目标,您能否提供您当前的脚本和您期望的输出图像?
  • @Tanaike 我的目标是让单元格 C2:C3 和 C6:C7 成为值,同时将公式保留在 C10:C11 中。但是我需要大规模执行此操作(多列和多行,公式的位置在每个页面上都不同,所以我希望有一个通用宏可以选择一个范围并仅为包含 @987654327 的单元格粘贴值@.
  • 感谢您的回复。现在我注意到已经发布了答案。在这种情况下,我想尊重现有的答案。我认为它会解决您的问题。

标签: javascript google-apps-script google-sheets google-sheets-formula


【解决方案1】:

解决方案:

更新 - 通过Iamblichus 略微改进以使其更快。

到目前为止,我不太确定您尝试了什么,但是对于几张纸来说,这个工作相对较快:

function myFunction() {

let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheets = ['Sheet1','Sheet2'].map(sh=>ss.getSheetByName(sh));  
 
sheets.forEach(sh=>{ 
 let range = sh.getDataRange();
 let formula = range.getFormulasR1C1();
 let values = range.getValues();
 formula.forEach( (fr,fx) => 
 {fr.forEach((fc,fy)=>{
 let outR=sh.getRange(fx+1,fy+1);
 if (fc.toUpperCase().includes('SUMIFS')) outR.setValue(values[fx][fy]);
 })})});

}

请根据您的需要调整['Sheet1','Sheet2','Sheet3']


解释:

我正在遍历每个工作表,并检查单元格是否包含 SUMIFS 公式。如果有,我会用它们的值覆盖它们,否则我会保留它们的公式。

【讨论】:

  • 感谢您的努力,不幸的是,这不适用于包含数千个单元格(50-60 行 x 40 列)的大型工作表。可能仍然是最好的解决方案,所以如果没有其他回复到达,请标记它。
  • @rtenha 我想你可以拆分工作。将溶液涂在一半的纸上,完成后,再涂剩下的。或者,您可以将其拆分得更多。您可以设置触发器来运行不同的批次。一个触发器用于第一组工作表,第二个触发器用于第二组工作表。
  • 如果公式不包含SUMIFS,我认为没有必要使用outR.setFormula(fc)。我会考虑将最后一行更改为if (fc.toUpperCase().includes('SUMIFS')) outR.setValue(values[fx][fy])。你怎么看?
  • @Iamblichus 谢谢,这是一个非常好的主意。我忽略了它,因为最初我试图构建一个新数组并且我想要所有值。但是通过使用forEach 循环,用完全相同的公式覆盖公式是多余的。我希望这会加快一点进程。但是,如果您有更多建议,请随时发布答案,我会支持它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多