問題:
を使用IMPORTRANGEして別のスプレッドシートからデータを取得する場合、VLOOKUP を含む数式を含む元のスプレッドシートのセルは、多くの場合 (常にではありません) を返し#N/A (ERROR: Did not find value 'xxx' in VLOOKUP evaluation)ます。元のシートでは、数式は正しく計算され、値が表示されます。これは常に発生するとは限りません。適切な値が引き込まれる場合もあります。
意図:
異なるスプレッドシートからデータを取得するには、それらを別のスプレッドシートに結合し、計算を行います。次に、この計算スプレッドシート (または複数の計算スプレッドシート) からレポート スプレッドシートに情報を引き出して、さらに計算と書式設定を行います。
セットアップ:
dataspreadsheet1、dataspreadsheet2および など、いくつかのソース データ スプレッドシートがありdataspreadsheet3ます。計算スプレッドシート ( calcspreadsheet) が作成され、各データ スプレッドシートに のコピーが作成され、これらのシートにそれぞれおよびsheet1という名前が付けられます。これに使用されるステートメントは次のように作成されます。where
は、それぞれの列に名前、タイプ、および ID を含むシートです。datasheet1datasheet2datasheet3IMPORTRANGEimportrange(+VLOOKUP("dataspreadsheet1",filelist!A1:C1000,3,FALSE),"sheet1!a1:Z1000")filelist!A1:C1000calcspreadsheet
これらの各シートの値は、別のシートでのdatasheet1-3計算に使用されます。これの主な目的は 3 からの毎日の値を合計することですが、それらすべてが同じ行に同じデータを持っているわけではありません。行番号。たとえば、列 A はすべてのシートの日付列です。calcsheet1calcspreadsheetdataspreadsheetssourcesheetsVLOOKUPdatasheet1-3VLOOKUP($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!B1calcsheetcodes!A1:C3000NameTypeId
私が試した回避策:
IMPORTRANGEを含まないセルの方がうまく機能することに気付いたので、 の内容を の別のシートにVLOOKUPコピーしようとしましたが、式ではなく、そこに値のみがあり、これで使用しました。使用するコピー スクリプトは次のとおりです。calcsheetcalcspreadsheetexportsheetIMPORTRANGEexportsheet
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、まったく使用したり、最初から別の方法で構築したりします。