【问题标题】:Copy/paste data validation in Google Spreadsheets在 Google 电子表格中复制/粘贴数据验证
【发布时间】:2016-07-19 16:02:23
【问题描述】:

无法弄清楚这一点我觉得有点傻。所以这是我设置的数据验证:

单元格范围:日记!J2

条件:范围列表 - Journal!W2:X2

单元格范围:日记!M2

条件:范围列表 - Journal!Y2:AA2

这在我的第一排很棒。我创建了另一行,我希望它将所有“2”更新为“3”。单元格范围正确更新,但条件没有正确更新,除了手动更新之外,我想不出一个简单的解决方案。

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

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

【问题讨论】:

    标签: validation google-sheets spreadsheet


    【解决方案1】:

    确实,“范围内的列表”类型的验证将对列表的引用视为绝对而不是相对。我知道两种解决方法:

    自定义公式

    基于自定义公式的验证

    =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);
      }
    }
    

    【讨论】:

    • 太棒了!无论如何,我一直在研究其他一些自定义脚本,但不知道如何以这种方式设置验证规则。今晚晚些时候我会完全尝试一下。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多