Я ищу формулу для ячейки подсветки электронной таблицы Google, если значение дублируется в том же столбце
Может кто-нибудь, пожалуйста, помогите мне по этому запросу?
Я ищу формулу для ячейки подсветки электронной таблицы Google, если значение дублируется в том же столбце
Может кто-нибудь, пожалуйста, помогите мне по этому запросу?
Попробуйте это:
Custom formula is
=countif(A:A,A1)>1
(или измените A
на выбранный вами столбец)A1:A100
).Все, что записано в ячейках A1: A100, будет проверено, и если есть дубликат (встречается более одного раза), он будет окрашен.
Для локалей, использующих запятую (,
) в качестве десятичного разделителя, разделитель аргументов, скорее всего, является точкой с запятой (;
). То есть попробуйте: =countif(A:A;A1)>1
, вместо этого.
Для нескольких столбцов используйте countifs
.
В то время как ответ zolley совершенно прав для вопроса, здесь более общее решение для любого диапазона, плюс объяснение:
=COUNTIF($A$1:$C$50, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))) > 1
Обратите внимание, что в этом примере я буду использовать диапазон A1:C50
.
Первый параметр ($A$1:$C$50
) следует заменить диапазоном, на котором вы хотели бы выделить дубликаты!
чтобы выделить дубликаты:
Format
> Conditional formatting...
Apply to range
выберите диапазон, к которому должно применяться правило.Format cells if
выберите Custom formula is
в раскрывающемся списке.Почему это работает?
COUNTIF(range, criterion)
, будет сравнивать каждую ячейку в range
с criterion
, которая обрабатывается аналогично формулам. Если специальные операторы не предусмотрены, они будут сравнивать каждую ячейку в диапазоне с данной ячейкой и возвращать количество найденных ячеек для соответствия правилу (в данном случае сравнение). Мы используем фиксированный диапазон (с знаками $
), чтобы мы всегда просматривали весь диапазон.
Второй блок, INDIRECT(ADDRESS(ROW(), COLUMN(), 4))
, вернет текущее содержимое ячейки. Если бы это было помещено внутри ячейки, документы будут кричать о круговой зависимости, но в этом случае формула оценивается так, как если бы она была в ячейке, не меняя ее.
ROW()
и COLUMN()
вернут номер строки и номер столбца данной ячейки соответственно. Если параметр не указан, текущая ячейка будет возвращена (это будет 1, например, B3
вернет 3 для ROW()
и 2 для COLUMN()
).
Затем мы используем: ADDRESS(row, column, [absolute_relative_mode])
для перевода числовой строки и столбца в ссылку на ячейку (например, B3
). Помните, что пока мы находимся внутри контекста ячейки, мы не знаем его адрес ИЛИ контент, и нам нужно содержимое для сравнения). Третий параметр заботится о форматировании, а 4
возвращает форматирование INDIRECT()
.
INDIRECT()
, возьмет ссылку на ячейку и вернет ее содержимое. В этом случае содержимое текущей ячейки. Затем вернемся к началу, COUNTIF()
проверит каждую ячейку в диапазоне против ours и вернет счет.
Последний шаг заключается в том, что наша формула возвращает логическое выражение, делая его логическим выражением: COUNTIF(...) > 1
. > 1
используется, потому что мы знаем там, по крайней мере, одну ячейку, идентичную нашей. Что наша клетка, находящаяся в диапазоне, и, следовательно, будет сопоставлена с самим собой. Поэтому, чтобы указать дубликат, нам нужно найти 2 или более ячейки, соответствующие нашим.
Источники:
В раскрывающемся меню "Содержит текст" выберите "Пользовательская формула:" и напишите: "= countif (A: A, A1) > 1" (без кавычек)
Я сделал точно как zolley, но нужно сделать небольшую коррекцию: вместо "Text Contains" использовать "Custom formula is". И тогда будет работать условный рендеринг.
Ответ @zolley правильный. Просто добавив GIF и шаги для справки.
Format > Conditional formatting..
Format cells if..
=countif(A:A,A1)>1
в поле Custom formula is
A
на свой собственный столбец.Также вы можете установить дополнение " Удалить дубликаты" и найти (выделить) или удалить дублирующиеся значения в столбцах или листах.
Я пробовал все параметры, и никто не работал.
Мне помогли только скрипты приложений Google.
источник: https://ctrlq.org/code/19649-find-duplicate-rows-in-google-sheets
В верхней части документа
1.- перейдите в tools > script editor
2.- укажите имя своего script
3.- вставьте этот код:
function findDuplicates() {
// 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("FindDupes");
// 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();
for (i = 1; i < data.length - 1; i++) {
for (j = i+1; j < data.length; j++) {
if (data[i].join() == data[j].join()) {
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.");
}
};
4.- сохранить и запустить
За менее чем 3 секунды моя повторяющаяся строка была окрашена. Просто скопируйте script.
Если вы не знаете о скриптах приложений Google, эти ссылки могут вам помочь:
https://zapier.com/learn/google-sheets/google-apps-script-tutorial/
https://developers.google.com/apps-script/overview
Надеюсь, это поможет.
=COUNTIF(C:C, C1) > 1
Объяснение: C1
здесь не относится к первой строке в C. Поскольку эта формула оценивается правилом условного формата, вместо этого, когда формула проверяется, чтобы увидеть, применима ли она, C1
эффективно ссылается к какой строке в настоящее время выполняется оценка, чтобы увидеть, следует ли применять выделение. (Так что это больше похоже на INDIRECT(C &ROW())
, если это что-то значит для вас!). По сути, при оценке формулы условного формата все, что относится к строке 1, сравнивается со строкой, с которой запускается формула. (И да, если вы используете C2, то вы просите правило проверить статус строки сразу под той, которая в настоящее время оценивается.)
Таким образом, это говорит о том, что нужно подсчитать вхождения в C1
(текущая оцениваемая ячейка) во всем столбце C
, и если их более 1 (т.е. значение имеет дубликаты), то: apply выделение (потому что формула в целом оценивается как TRUE
).
=AND(COUNTIF(C:C, C1) > 1, COUNTIF(C$1:C1, C1) = 1)
Объяснение: Это подсвечивается, только если оба COUNTIF
являются TRUE
(они появляются внутри AND()
).
Первый оцениваемый член (COUNTIF(C:C, C1) > 1
) точно такой же, как и в первом примере; это TRUE
, только если все, что находится в C1
, имеет дубликат. (Помните, что C1
фактически ссылается на текущую строку, проверяемую, чтобы увидеть, должна ли она быть выделена).
Второй термин (COUNTIF(C$1:C1, C1) = 1
) выглядит аналогично, но имеет три принципиальных отличия:
Он не выполняет поиск по всему столбцу C
(как и первый: C:C
), но вместо этого начинает поиск с первой строки: C$1
($
заставляет его смотреть буквально на строку 1
, а не на то, какая строка оценивается).
И тогда он останавливает поиск в текущей оцениваемой строке C1
.
Наконец-то написано = 1
.
Таким образом, это будет только TRUE
, если нет дубликатов над строкой, которая в данный момент оценивается (то есть она должна быть первой из дубликатов).
В сочетании с этим первым термином (который будет только TRUE
, если в этой строке есть дубликаты) это означает, что будет выделено только первое вхождение.
=AND(COUNTIF(C:C, C1) > 1, NOT(COUNTIF(C$1:C1, C1) = 1), COUNTIF(C1:C, C1) >= 1)
Объяснение: Первое выражение то же, что и всегда (TRUE
, если текущая оценочная строка вообще является дубликатом).
Второе слагаемое точно такое же, как и последнее, за исключением того, что оно отрицается: вокруг него есть NOT()
. Так что он игнорирует первый случай.
Наконец, третий член собирает дубликаты 2, 3 и т.д. COUNTIF(C1:C, C1) >= 1
запускает диапазон поиска в текущей оцененной строке (C1
в C1:C
). Тогда он оценивается как TRUE
(применить выделение), если есть один или несколько дубликатов ниже этого (включая этот): >= 1
(это должен быть >=
, а не только >
, в противном случае последний дубликат игнорируется).