2

问题:

IMPORTRANGE用于从不同的电子表格中提取数据时,原始电子表格中包含包含 VLOOKUP 的公式的单元格通常(但不总是)返回#N/A (ERROR: Did not find value 'xxx' in VLOOKUP evaluation). 在原始表中,公式计算正确并显示了一个值。这并不总是发生,有时它确实会引入正确的值。

意图:

要从不同的电子表格中获取数据,请将它们组合到不同的电子表格中并对其进行一些计算。然后将此计算电子表格(或多个计算电子表格)中的信息提取到报告电子表格中,以进行进一步的计算和格式化。

设置:

有几个源数据电子表格,dataspreadsheet1比如dataspreadsheet2dataspreadsheet3。创建一个计算电子表格 ( calcspreadsheet),在每个数据电子表格中创建一个副本,并分别sheet1命名这些工作表和。用于此的语句创建如下:where is a sheet in ,其中包含相应列中的名称、类型和 ID。datasheet1datasheet2datasheet3IMPORTRANGEimportrange(+VLOOKUP("dataspreadsheet1",filelist!A1:C1000,3,FALSE),"sheet1!a1:Z1000")filelist!A1:C1000calcspreadsheet

然后将这些工作表中的每一个中的值datasheet1-3用于另一个工作表中的计算,calcsheet1calcspreadsheet. 因为这样做的主要目标是从 3 中添加每日值dataspreadsheets,但这些值sourcesheets在同一行上并不都具有相同的数据,因此VLOOKUP再次使用 a 以确保添加日期使用该行作为日期,datasheet1-3而不管其行号。例如VLOOKUP($A11,'datasheet1'!$A:$P,4) + VLOOKUP($A11,'datasheet2'!$A:$P,4) + VLOOKUP($A11,'datasheet3'!$A:$P,4),其中 A 列是所有工作表中的日期列。

这似乎工作正常,虽然在打开calcspreadsheet时可能需要很长时间才能完成更新,在此期间#N/A会显示很多 's。最终它还是正确的。

reportspreadsheet创建 a 时会出现问题,然后使用IMPORTRANGE调用从中提取信息calcsheet1以便能够使用它。这通常但并非总是会导致一开始就出现问题状态。这里的IMPORTRANGE调用的reportspreadsheet生成方式与calcspreadsheet: =importrange(+VLOOKUP(calc!B1,sheetcodes!A1:C3000,3,FALSE),"sheet1!a1:Z1000")wherecalc!B1包含源电子表格的名称(在此calc将是 'calcspreadsheet' 并sheetcodes!A1:C3000再次包含带有Name,TypeId在相应列中的工作表列表)中的调用类似

我尝试过的解决方法:

我确实注意到IMPORTRANGE在不包含的单元格上效果更好VLOOKUP所以我试图将 的内容复制calcsheet到另一个表中calcspreadsheet,调用exportsheet但只有值在那里,而不是公式,然后IMPORTRANGE在这个上使用exportsheet。使用的复制脚本如下:

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 的值复制到 exportsheet 的复制脚本现在显示了相同的行为,它有时会起作用,有时会给出#N/A,所以让我遇到了同样的问题。

我的问题:

我已经阅读了各种具有类似问题和回复的帖子,其中提到此功能是喜怒无常或有错误。其他人说不可能在IMPORTRANGE. 鉴于它有时有效,有时无效,我怀疑该功能本身可能是正确的,但设置中存在同步或超时问题。

如何设置上述功能。要么使用IMPORTRANGEVLOOKUP完全进行一些更改/添加,要么以不同于一开始的方式构建。

4

2 回答 2

0

所以我没有用 importrange 做到这一点,但是当我遇到 Vlookup 的这个问题时,我将 vlookup 包装在一个 IF 中并测试#N/A。
尝试类似: =IF(ISNA(VLOOKUP(...)),"",VLOOKUP(...))

于 2015-03-01T13:50:53.030 回答
0

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

这是我发现的最好的方法,最后两个值[ , ) ]产生新的输出,在这种情况下它什么都不是。

如果你想输入 0 那么你会做[ ,0) ]

于 2019-10-17T15:28:07.377 回答