Выделить повторяющиеся значения в столбце для предыдущих х строк в Google Sheets - PullRequest
1 голос
/ 06 марта 2019

, поэтому задача состоит в том, что мне нужно выделить или отсканировать дубликаты значений в столбце, НО для последних, скажем, 5 строк, например, если у меня есть данные

1. 1
2. 5
3. 7
4. 2
5. 2
6. 3
7. 4
8. 2
9. 3

, поэтому в конце следует выделить только 5-й, 6-й, 8-й и 9-й ряд. Я могу легко сделать это, используя скрипт здесь

function myFunction() {
  // List the columns you want to check by number (A = 1)
  var CHECK_COLUMNS = [1];

  // Get the active sheet and info about it
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var numRows = sourceSheet.getLastRow();
  var numCols = sourceSheet.getLastColumn();

  // Create the temporary working sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.insertSheet("FindDupess");

  // Copy the desired rows to the FindDupes sheet
  for (var i = 0; i < CHECK_COLUMNS.length; i++) {
    var sourceRange = sourceSheet.getRange(1,CHECK_COLUMNS[i],numRows);
    var nextCol = newSheet.getLastColumn() + 1;
    sourceRange.copyTo(newSheet.getRange(1,nextCol,numRows));
  }

  // Find duplicates in the FindDupes sheet and color them in the main sheet
  var dupes = false;
  var data = newSheet.getDataRange().getValues();
  data.length;
  for (i = data.length-1; i > data.length-4; i--) {
    for (j = i-1; j > data.length-6; j--) {
      if  (data[i].join() == data[j].join()) {
        i;
        j;
        dupes = true;
        sourceSheet.getRange(i+1,1,1,numCols).setBackground("red");
        sourceSheet.getRange(j+1,1,1,numCols).setBackground("red");
      }
    }
  }

  // Remove the FindDupes temporary sheet
  ss.deleteSheet(newSheet);

  // Alert the user with the results
  if (dupes) {
    Browser.msgBox("Possible duplicate(s) found and colored red.");
  } else {
    Browser.msgBox("No duplicates found.");
  }
};

Теперь я хочу, чтобы при добавлении новой строки я хотел, чтобы код / ​​формула снова запускался автоматически и выбирал «теперь предыдущие 5 строк». Например, если я добавлю еще одну строку

1. 1
2. 5
3. 7
4. 2
5. 2
6. 3
7. 4
8. 2
9. 3
10. 3

Теперь нужно выделить 6-й, 9-й и 10-й ряд. Надеюсь, я дал понять.

P.S Я также использовал эту формулу

=UNIQUE(FILTER(A:A,ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-5+1)))

Но, во-первых, он не выделяет строки, во-вторых, он не возвращает повторяющиеся значения, но все уникальные значения

1 Ответ

1 голос
/ 06 марта 2019

Вы можете разрешить это без сценария только с двумя правилами CF:

  • белый фон: =SUBTOTAL(3,$A$1:$A1)<=COUNTA(A:A)-5
  • красный фон: =COUNTIF(QUERY(A:A,"limit 5 offset "&(COUNT(A:A)-5)),A1)>1

0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...