問題:
を使用IMPORTRANGE
して別のスプレッドシートからデータを取得する場合、VLOOKUP を含む数式を含む元のスプレッドシートのセルは、多くの場合 (常にではありません) を返し#N/A (ERROR: Did not find value 'xxx' in VLOOKUP evaluation)
ます。元のシートでは、数式は正しく計算され、値が表示されます。これは常に発生するとは限りません。適切な値が引き込まれる場合もあります。
意図:
異なるスプレッドシートからデータを取得するには、それらを別のスプレッドシートに結合し、計算を行います。次に、この計算スプレッドシート (または複数の計算スプレッドシート) からレポート スプレッドシートに情報を引き出して、さらに計算と書式設定を行います。
セットアップ:
dataspreadsheet1
、dataspreadsheet2
および など、いくつかのソース データ スプレッドシートがありdataspreadsheet3
ます。計算スプレッドシート ( calcspreadsheet
) が作成され、各データ スプレッドシートに のコピーが作成され、これらのシートにそれぞれおよびsheet1
という名前が付けられます。これに使用されるステートメントは次のように作成されます。where
は、それぞれの列に名前、タイプ、および ID を含むシートです。datasheet1
datasheet2
datasheet3
IMPORTRANGE
importrange(+VLOOKUP("dataspreadsheet1",filelist!A1:C1000,3,FALSE),"sheet1!a1:Z1000")
filelist!A1:C1000
calcspreadsheet
これらの各シートの値は、別のシートでのdatasheet1-3
計算に使用されます。これの主な目的は 3 からの毎日の値を合計することですが、それらすべてが同じ行に同じデータを持っているわけではありません。行番号。たとえば、列 A はすべてのシートの日付列です。calcsheet1
calcspreadsheet
dataspreadsheets
sourcesheets
VLOOKUP
datasheet1-3
VLOOKUP($A11,'datasheet1'!$A:$P,4) + VLOOKUP($A11,'datasheet2'!$A:$P,4) + VLOOKUP($A11,'datasheet3'!$A:$P,4)
これは正常に動作しているように見えますが、開くcalcspreadsheet
と更新に時間がかかり、その間に多く#N/A
の が表示されます。最終的には正しくなります。
問題は、reportspreadsheet
が作成され、その情報を操作できるようにするためにIMPORTRANGE
呼び出しを使用して情報を取得するときに発生します。calcsheet1
これにより、常にではありませんが、多くの場合、最初は問題のある状態になります。このIMPORTRANGE
呼び出しは、 の場合reportspreadsheet
と同様の方法で生成されますcalcspreadsheet
:ソース スプレッドシートの名前=importrange(+VLOOKUP(calc!B1,sheetcodes!A1:C3000,3,FALSE),"sheet1!a1:Z1000")
が含まれます (この場合は「calcspreadsheet」となり、それぞれの列に ,を含むシートのリストが含まれます)。calc!B1
calc
sheetcodes!A1:C3000
Name
Type
Id
私が試した回避策:
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
。機能する場合と機能しない場合があることを考えると、機能自体は正しいと思われますが、セットアップに同期またはタイムアウトの問題があると思われます。
上記の機能を設定するにはどうすればよいですか。いくつかの変更/追加を使用し
IMPORTRANGE
たりVLOOKUP
、まったく使用したり、最初から別の方法で構築したりします。