在Google Spreadsheets中复制/粘贴数据验证

时间:2016-07-19 16:02:24

标签: validation google-sheets spreadsheet

我觉得有点傻无法解决这个问题。所以这是我设置的数据验证:

细胞范围:期刊!J2

标准:从范围列出 - 期刊!W2:X2

细胞范围:期刊!M2

标准:从范围列出 - 期刊!Y2:AA2

这在我的第一行很棒。我创建了另一行,我希望更新所有的' 2'到' 3'。单元格范围正确更新,但标准没有更新,除了进入并手动更新之外,我无法找到一个简单的解决方案。

我尝试过复制/粘贴以及粘贴特殊 - >数据验证。

我知道$ Y $ 2会修复行/ col,但这与我想要的相反。我想我想保持相对公式而不是绝对公式?

1 个答案:

答案 0 :(得分:4)

实际上,“范围列表”类型的验证将对列表的引用视为绝对而非相对。我知道两个解决方法:

自定义公式

基于自定义公式的验证

=not(isna(match(J2, W2:X2, 0)))

相当于“值必须来自W2:X2的范围”,并且它将被正确地向下复制,对W2:X2的引用是相对的。

缺点:您没有获得带有自定义公式验证的单元格下拉列表。

脚本

可以使用Apps Script来管理数据验证规则。以下脚本在范围J2:J100的每个单元格中设置数据验证规则,其中值必须来自同一行的W:X。

function validate() {    
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("J2:J100");
  var valuesColumn = 23;  // begins in W 
  var valuesLength = 2;   // has length 2, so W:X
  var firstRow = range.getRow();
  for (var i = 0; i < range.getHeight(); i++) {
    var rule = SpreadsheetApp.newDataValidation()
               .requireValueInRange(sheet.getRange(firstRow + i, valuesColumn, 1, valuesLength), true)
               .setAllowInvalid(false)
               .build();
    range.offset(i, 0, 1, 1).setDataValidation(rule);
  }
}