Как связать различные таблицы Google с помощью IMPORTRANGE, которые содержат формулы VLOOKUP, без возврата #N/A?

Эта проблема:

При использовании IMPORTRANGE для извлечения данных из другой электронной таблицы ячейки в исходной электронной таблице, содержащие формулу, содержащую VLOOKUP, часто (но не всегда) возвращают #N/A (ОШИБКА: не найдено значение 'xxx' в оценке VLOOKUP). В исходном листе формулы рассчитаны правильно и показывают значение, хотя. Это не всегда происходит, иногда это приводит к правильному значению.

Намерение:

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

Установка:

Существует несколько электронных таблиц исходных данных, например, dataspreadsheet1, dataspreadsheet2 и dataspreadsheet3. Создается электронная таблица вычислений (таблица калькуляции), которая создает копию листа 1 в каждой из электронных таблиц данных и присваивает этим листам имена листы 1, лист 2 и лист данных 3 соответственно. Оператор IMPORTRANGE, используемый для этого, создается следующим образом: importrange(+VLOOKUP("dataspreadsheet1",filelist!A1:C1000,3,FALSE),"sheet1! A1:Z1000"), где filelist! A1: C1000 - это лист в таблице калькуляции который содержит имя, тип и идентификатор в соответствующих столбцах.

Значения в каждом из этих листов datasheet1-3 затем используются для вычислений в другом листе, calcsheet1 в calcolidsheet. Поскольку основной целью этого является сложение ежедневных значений из 3 таблиц данных, но не все эти исходные таблицы имеют одинаковые данные в одной строке, VLOOKUP используется снова, чтобы убедиться, что добавления для даты используют строку для даты в Datasheet1-3 независимо от номера строки. Например, VLOOKUP($A11, "таблица данных1"!$A:$P,4) + VLOOKUP($A11, "таблица данных2"!$A:$P,4) + VLOOKUP($A11, "таблица данных3"! $ A: $ P, 4) где столбец A - столбец даты во всех листах.

Кажется, это работает нормально, хотя после открытия таблицы калькуляции обновление может занять много времени, в течение которого отображается множество # N / A. В конце концов, все идет как надо.

Проблема возникает, когда создается таблица отчетов, которая, в свою очередь, использовала вызов IMPORTRANGE, чтобы извлечь информацию из calcsheet1, чтобы иметь возможность работать с ней. Это часто, но не всегда, приводит к возникновению проблемных состояний в начале. Вызов IMPORTRANGE в этой электронной таблице отчетов генерируется аналогично вызову в калькуляционной таблице: =importrange(+VLOOKUP(calc!B1,sheetcodes!A1:C3000,3,FALSE),"sheet1! A1:Z1000"), где calc! B1 содержит имя исходной электронной таблицы (в данном калькуляре это будет "calcolvedsheet" и коды листов! A1: C3000 снова содержит список листов с именами, типами и идентификаторами в соответствующих столбцах

Обходной путь, который я попробовал:

То, что я заметил, что IMPORTRANGE лучше работает с ячейками, которые не содержат VLOOKUP. Поэтому я попытался скопировать содержимое таблицы calcsheet на другой лист в calcolvedsheet, называемый exportheet, но содержащий только значения, а не формулы, а затем использовать IMPORTRANGE на этом листе экспорта. Используемый сценарий копирования выглядит следующим образом:

function exportPrep() {
  // Get the active spreadsheet and the active sheet
  //var ss = SpreadsheetApp.getActiveSpreadsheet();
  //var sheet = ss.getSheetByName("stream");
  //sheet.activate();

  var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("calcsheet");
  var sourceDataRange = source.getDataRange();
  var sourceSheetValues = sourceDataRange.getValues();
  var sourceRows = sourceDataRange.getNumRows();
  var sourceColumns = sourceDataRange.getNumColumns();

  var destination = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(destination.setActiveSheet("exportsheet"));
  destination.getDataRange().offset(0, 0, sourceRows, sourceColumns).setValues(sourceSheetValues);
      }

Казалось, это сработало, но, к сожалению, сценарий копирования, использованный для копирования значения calcsheet в файл экспорта, теперь демонстрировал то же поведение, иногда работал и иногда давал # N / A, и поэтому оставлял меня с той же проблемой.

Мои вопросы:

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

How can I set up the above functionality. Either with the use of IMPORTRANGE and VLOOKUP at all with some changes/additions, or built in a different way from the get-go. 

1 ответ

Так что я не делал этого с помощью importrange, но когда я сталкиваюсь с этой проблемой с Vlookup, я оборачиваю vlookup в IF и проверяю #N/A.
Попробуйте что-то вроде: =IF(ISNA(VLOOKUP(...)),"",VLOOKUP(...))

=IFERROR(VLOOKUP(B81,'KAM_Q3_OPPS STAGE_(H/I/L/M/N)'!$F$3:$G$111,2,False),)

Это лучший способ, который я нашел, и последние два значения [ , ) ] сделайте новый вывод, в данном случае ничего.

ЕСЛИ вы хотели 0, тогда вы бы сделали [ ,0) ]