Условное форматирование для чередующихся групп дублированных ячеек - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь получить формулу условного форматирования, которая выделяет группы дублированных ячеек в столбце, но также различает их.

Когда я использую формулу =COUNTIF($J:$J,J1)>1, я получаю:

123 (green)
123 (green)
345
567
765 (green)
765 (green)
812 (green)
812 (green)
876

Но я хочу что-то еще вроде:

123 (green)
123 (green)
345
567
765 (yellow)
765 (yellow)
812 (red) (or green again)
812 (red) (or green again)
876

Мне не обязательно нужны разные цвета для каждой группы (хотя это было бы очень приятно), но как минимум два цвета, которые чередуются между группами, поэтому я не могу легко визуально различить две смежные группы дублированных ячеек.

В этой последней части я работаю с формулой =isodd(match($J2,unique($J$2:$J))) (плюс один с iseven, чтобы использовать его с другим цветом), проблема с этим в том, что он также выделяет уникальные ячейки (что я не хотите).

Есть ли способ объединить две или другую формулу, чтобы достичь этого?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это не совсем то, что вы ищете, но вы можете применить эту формулу, начиная со строки 2, чтобы определить нечетные группы:

=and(or(A2=A1,A2=A3),isodd(sumproduct((A$1:A1<>A$2:A2)*(A$2:A2=A$3:A3))))

и аналогично для четных групп:

=and(or(A2=A1,A2=A3),iseven(sumproduct((A$1:A1<>A$2:A2)*(A$2:A2=A$3:A3))))

enter image description here

Если вы попытаетесь применить это к строке 1, вы получите #REF!ошибка.Единственный способ найти повторяющееся значение, начиная со строки 1, - добавить третье правило, примененное ко всему диапазону:

=and(A$1=A$2,countif(A$1:A1,"<>"&A1)=0)

и изменить исходные формулы на

* 1016.*

и

=and(or(A2=A1,A2=A3),iseven(sumproduct((A$1:A1<>A$2:A2)*(A$2:A2=A$3:A3))+(A$1=A$2)))

enter image description here

0 голосов
/ 28 октября 2018

Добавьте этот скрипт, и на вашем листе будут выделены дублированные строки. Он автоматически обновляется при каждом редактировании листа.

Таким образом, вы можете вставлять строки, добавлять строки или изменять строки, и они все равно будут корректно обновляться.

Вы можете посмотреть, как установить скрипт, но это легко. Дайте мне знать, если застряли.

function onEdit() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var lastRow = sheet.getLastRow();

    var range = sheet.getRange(1,1,lastRow);

  sheet.getRange("A1:A").setBackground("white");
    var rowValues = range.getValues();

    var color1 = "#DBAB30";      // light yellow
    var color2= "#3DA843";      // light green
    var color = color1;

    if (lastRow < 2) return;    // do nothing if only 1 row.

    var dupCount=0;
    var row;
    for (row=1; row<=lastRow; row++)
    {
      if (row == lastRow){  // check if past the last row.
            applyBackground(row-1,dupCount);
      }
      else{
            if (rowValues[row][0] == rowValues[row-1][0])
            {
                 dupCount++;    
            }
            else
            {
                 applyBackground(row-1,dupCount);
                 dupCount=0;
            }
      } // end if not last row
    } // end loop

  function applyBackground(row,dupCount){
       if (dupCount > 0)
       {
           var colorRange = sheet.getRange(row-dupCount+1,1,dupCount+1);
           colorRange.setBackground(color);
           if (color == color1) {color = color2} else {color=color1};
       }  
  }

}

Производит этот вывод:

enter image description here

Что я думаю, о чем ты просил?

...