0

我想创建一个数据验证列表,它会根据当前行自动更新。换句话说,我想要 C 列中的下拉列表,其中包含已为 A 列中的当前值输入到 C 列中的所有值。

我将它放在我的数据验证列表范围的隐藏列的第 1 行: =SORT(UNIQUE(FILTER(C3:C,A3:A=C1,NOT(ISBLANK(C3:C)))))

它工作得很好,除了我必须C1用当前列值手动更新A值。次优。我希望条件A3:A=C1A3:A=C + CURRENTROW()CURRENTROW()任何类型的函数或自定义函数将返回,你猜对了,当前行。我找不到任何能给我当前单元格或当前行的东西。我尝试了以下自定义功能:

function CURRENTROW() { 
  return  SpreadsheetApp.getActiveSheet().getActiveRange().getRow(); 
}

function CURRENTROW() { 
  return  SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
}

function CURRENTROW() {
  return  SpreadsheetApp.getActiveSheet().getCurrentCell().getRow();
}

所有 3 个变体都返回包含该函数的单元格的行号,但我想要用户当前所在的行号。有人可以告诉我如何获得这个值吗?非常感谢这里的任何帮助。

4

2 回答 2

0

以下代码适用于您的情况:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Custom function', 'custom')
      .addToUi();
}

function custom() {
  var currentRow = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
  var formula = "=SORT(UNIQUE(FILTER(C3:C,A3:A=C" + currentRow + ",NOT(ISBLANK(C3:C)))))";
  SpreadsheetApp.getActive().getRange("A1").setValue(formula);
}

它的作用是在 A1 单元格中设置您想要的公式(您可以在最后一行中随意更改)。为了调用该函数,它会在您打开工作表时安装在下拉菜单中,选择要引用的单元格后,您只需单击它即可。

于 2019-10-11T15:22:47.970 回答
0

根据您的少量信息,您可以执行以下操作,但仅在 c 列中进行编辑后才有效,并将更新 D1 中的数字:

function onEdit(e) {
  if (SpreadsheetApp.getActiveSheet().getActiveRange().getColumn()==3){
    var rownum = SpreadsheetApp.getActiveSheet().getActiveRange().getRow()
    SpreadsheetApp.getActiveSheet().getRange('D1').setValue(rownum); 
  }
}
于 2019-10-11T14:31:42.967 回答