Как рассчитать (поиск) для указанного c текста на нескольких листах через Google Docs? - PullRequest
0 голосов
/ 04 февраля 2020

В настоящее время я использую следующую формулу для поиска и подсчета количества раз, когда данный текст используется в данной ячейке:

=COUNTIF(Sheet1!G3:G1151, "COMPLETE")

Любые идеи, как использовать одну и ту же формулу для нескольких листов ?

Примерно так:

=COUNTIF(Sheet1, Sheet2!G3:G1151, "COMPLETE")

Спасибо за помощь

1 Ответ

1 голос
/ 05 февраля 2020

Если вы хотите найти много листов, и чтобы избежать необходимости многократного повторения формулы для каждого листа, вы можете вместо этого использовать пользовательскую функцию , созданную в Google Apps Script. Для этого выполните следующие действия:

  • В вашей электронной таблице выберите Инструменты> Редактор скриптов , чтобы открыть скрипт, связанный с вашим файлом.
  • Скопируйте эту функцию в редакторе сценариев и сохраните проект:
function COUNTMANYSHEETS(sheetNames, range, text) {
  sheetNames = sheetNames.split(',');
  var count = 0;
  sheetNames.forEach(function(sheetName) {
    var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
    var values = sheet.getRange(range).getValues();
    values.forEach(function(row) {
      row.forEach(function(cell) {
        if (cell.indexOf(text) !== -1) count++;
      });
    });
  });
  return count;
};
  • Теперь, если вы go вернетесь к своей электронной таблице, вы можете использовать эту функцию так же, как и любую другую функция. Вам просто нужно предоставить строку со всеми именами листов, разделенными разделителем, указанным в коде (в данном примере, запятой), другой с диапазоном, который вы хотите найти, и текстом, который вы хотите искать, как вы видите здесь, например:

=COUNTMANYSHEETS("Sheet1,Sheet2,Sheet3", "G3:G1151", "COMPLETE")

Примечания:

  • Важно, чтобы вы указали имена листов, разделенные разделителем указано в sheetNames = sheetNames.split(',');, и ничего больше (без пробелов после запятой и т. д. c.).
  • Важно указать диапазон в кавычках ("G3:G1151"). В противном случае функция будет интерпретировать это как массив значений, соответствующих указанному диапазону, и вы не сможете искать значения на других листах.
  • В этом примере код ищет строку COMPLETE и учитывает регистр. Чтобы сделать это без учета регистра, вы можете использовать toUpperCase () или toLowerCase () .
  • Если вы хотите найти все листы в электронной таблице, вы можете измените вашу функцию так, чтобы она принимала только range и text в качестве параметров, и получайте все листы через SpreadsheetApp.getActive().getSheets();.

Ссылка:

Надеюсь, это поможет.

...