regex 如果列中的单元格包含完全匹配、部分匹配或不包含任何值,则设置条件格式

monwx1rj  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(165)

当突出显示取决于完全匹配或匹配的逆、部分匹配或不匹配时,我无法尝试根据列顶部的单元格对列应用条件格式。See example Google Sheet here.
这是标准。。

1.完全匹配可以是完全匹配,也可以是A1中的值的倒数。对于完全匹配,列中与A1匹配的单元格将显示为绿色。但是,完全匹配可以是X,Y或倒数Y,X。关键是完全匹配必须具有这两个值,顺序无关紧要。
2.对于部分匹配,它们需要被着色为橙子。部分匹配应该具有单元格中A1的值之一。例如,如果A1具有B,D,则任何值都可以在其中一个值的匹配之前或之后。(B,)或(,B)或(D,)或(,D)或仅B本身或仅D本身。
**3.任何不包含A1中任何值的单元格都将突出显示为红色。**因此,任何不包含A1中任何值的单元格都应显示为红色。

有关进一步的解释和示例,请参见上面的电子表格链接。

ujv3wf0j

ujv3wf0j1#

这里有一个带有条件格式的选项。我不知道我是否完全理解了您对橙子和红色的要求,但这里有一个您可能能够适应的选项
如果所有的选项都匹配,它将返回绿色。这是通过拆分每个单元格并将其与A1中的值进行比较来完成的。通过使用REGEXMATCH对筛选的数据进行计数,并与两个单元格中的项目数量进行比较,您将能够知道每个选项是否匹配
到橙子你会有类似的东西,但没有最后一步
对于红色,您可以将NOT与REGEXMATCH结合使用

Green: =LET(v,SPLIT($A$1,",",1,1),a,SPLIT(A3,",",1,1),(COUNTA(IFNA(FILTER(a,REGEXMATCH(a,JOIN("|",v)))))=COUNTA(v))*(COUNTA(v)=COUNTA(a)))

Orange: =LET(v,SPLIT($A$1,",",1,1),a,SPLIT(A3,",",1,1),COUNTA(IFNA(FILTER(a,REGEXMATCH(a,JOIN("|",v))))))

Red: =LET(v,SPLIT($A$1,",",1,1),a,SPLIT(TO_TEXT(A3),",",1,1),COUNTA(IFNA(FILTER(a,NOT(REGEXMATCH(a,JOIN("|",v))))))=COUNTA(a))

t3irkdon

t3irkdon2#

备选方案:

您可以尝试使用Apps Script基于引用单元格设置列的格式。请根据提供的工作表查看下面的脚本。
1.单元格引用位于单元格A1
1.该脚本应用于Column B2:B中的值

脚本:

您可以使用此示例脚本作为问题的基线。

function applyConditionalFormatting() {
  
  var sheet = SpreadsheetApp.getActive().getActiveSheet(); //get the active spreadsheeet
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("B2:B" + lastRow); //declaring the column in which the script will be applied to along with last row with values
  var numRows = range.getNumRows();

  var orangeBackground = '#FFA500';
  var greenBackground = '#00FF00';
  var redBackground = '#ff0000';

  var criteria = sheet.getRange("A1").getValue().toString().split(",");   //getting the value of reference cell

  for (var row = 1; row <= numRows; row++) {
    var cell = range.getCell(row, 1);
    var value = cell.getValue().toString(); // iterating on every value on the range provided

    var hasCriteria = [];
    for (var i = 0; i < criteria.length; i++) {
      var currentCriteria = criteria[i].trim();
      hasCriteria[i] = value.indexOf(currentCriteria) >= 0; //checking if each of the cell value has either "B" or "D"
    }
    var allCriteriaMatched = hasCriteria.every(function (c) {
      return c; //checking if each of the cell value has either "B,D" or "D,B"
    });

    if (allCriteriaMatched) {
      cell.setBackground(greenBackground); //setting the color to green for full match
    } else if (hasCriteria.some(function (c) {
      return c;
    })) {
      cell.setBackground(orangeBackground); // setting the color to orange forp partial match
    } else {
      cell.setBackground(redBackground); //setting the color to red if neither
    }
  }
}

输出:

注意:我只是在工作表中添加了一个按钮,并附加了上面的脚本用于演示目的

参考资料:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app

相关问题