在Google Sheets应用脚本公式中将相对单元格引用转换为绝对引用

时间:2019-05-14 20:10:49

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

我正在尝试使用Google表格中的宏来自动设置公式,使一个单元格引用成为绝对值,最后自动将该公式填充下来。如何使用appscript为我自动化?

我记录宏并使用公式和想要代码执行的操作,然后修改它。我试过循环代码,但是当我需要它基于一个绝对单元格时,它只是复制并粘贴确切的公式,并随着向下粘贴而变化。我尝试使用两种不同的功能,一种在需要的地方编写代码,然后一种将带有公式的单元格复制下来并向下自动填充该公式。

现在这是代码的样子:(请注意,此代码没有自动填充)

'''

 function setprice() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(1, 4).activate()
 .setFormulaR1C1('=vlookup(R[0]C[-4],INDIRECT(R2C2&1),2)');

 spreadsheet.getCurrentCell()
.setFormulaR1C1('=vlookup(R[0]C[-4],IND''' 
  IRECT(R[-1]C[-4]&1),2)'); };

'''

所以当它是纸时,它看起来像这样:

=vlookup(B3,INDIRECT(B2&1),2)

自动填充时,其变化如下:

 =vlookup(B3,INDIRECT(B2&1),2)    
 =vlookup(B4,INDIRECT(B3&1),2)
 =vlookup(B5,INDIRECT(B4&1),2)
 =vlookup(B6,INDIRECT(B5&1),2)

我需要这样更改:

  =vlookup(B3,INDIRECT($B$2&1),2)
  =vlookup(B4,INDIRECT($B$2&1),2)
  =vlookup(B5,INDIRECT($B$2&1),2)
  =vlookup(B6,INDIRECT($B$2&1),2)

我讨厌的其他代码如下: '''

function fillin() {
 var spreadsheet = SpreadsheetApp.getActive();
 spreadsheet.getCurrentCell().
  setFormulaR1C1('=vlookup(R[0]C[-4],INDIREC 
  T(R2C2&1),2)');
  spreadsheet.get
  var destinationRange = spreadsheet.getActiveRange().offset(0, 0, 
   14);
   spreadsheet.getActiveRange().autoFill(destinationRange, 
   SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
  spreadsheet.getCurrentCell().offset(0, 0, 14, 1).activate();
    };

''' 此代码在差异单元格上进行查找时使用(例如,我想使用B8而不是B2),则该代码与上面运行时的绝对值相同。

我正在处理的工作表在同一列中设置了一个下拉列表和一个从属下拉列表。一个具有工作表的名称,另一个具有这些工作表中的项目。我已经设置了代码,因此一旦我选择了工作表名称,第二个下拉列表就会自动填充以下项目。 当setprice函数运行时,我需要它选择活动单元格(具有工作表名称)偏移到正确的单元格,并使用“工作表名称单元格”和查找值(项目)单元格粘贴公式。然后,我需要它将“工作表名称单元格”转换为绝对值并自动将其向下填充,因此查找值将发生变化,但“工作表名称单元格”保持不变。

现在,当我运行这些代码之一时。它要么作为相对单元格全部返回,要么作为绝对值返回“工作表名称单元格”(例如:运行代码时,我希望“工作表名称单元格”来自活动单元格。如果该单元格为B8,则公式将仍然看起来像这样     = vlookup(B9,INDIRECT($ B $ 2&1),2) 当我希望它看起来像这样     = vlookup(B3,INDIRECT($ B $ 8&1),2)

我知道这也可能是一个全面的解决方案,并且可以接受其他不那么复杂的解决方案。但是它确实需要一个代码,以便可以在按下按钮时运行并自动填充。非常感谢!

0 个答案:

没有答案