我觉得有点傻无法解决这个问题。所以这是我设置的数据验证:
细胞范围:期刊!J2
标准:从范围列出 - 期刊!W2:X2
细胞范围:期刊!M2
标准:从范围列出 - 期刊!Y2:AA2
这在我的第一行很棒。我创建了另一行,我希望更新所有的' 2'到' 3'。单元格范围正确更新,但标准没有更新,除了进入并手动更新之外,我无法找到一个简单的解决方案。
我尝试过复制/粘贴以及粘贴特殊 - >数据验证。
我知道$ Y $ 2会修复行/ col,但这与我想要的相反。我想我想保持相对公式而不是绝对公式?
答案 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);
}
}