1つのGoogleスプレッドシートA
からスプレッドシートB
にデータを取得する方法
スプレッドシートA
が変更されると、スプレッドシートB
も自動的に変更されますか?
QUERY()およびIMPORTRANGE()関数を使用する式が試行されましたが、期待される結果が返されませんでした。たとえば、ドキュメントDocAとDocBの2つのスプレッドシートがあります。
A B C
1 uid serial_no ph
2 356307042189331 3123958 912345678900
3 356307046077540 3966305 923451245123
4 356307046092465 3966407 978458784578
5 356307046098678 3970932 971548745125
DocBで
A B
1 serial_no uid
2 3123958
3 3284728
4 3284655
私は次の式でDocAからA2をDocBのB2に取得しようとしています
=QUERY(
ImportRange("[key]","Sheet1!A:C"),
"Select Col1, Col2 where Col1='"&A2&"'",
1
)
DocAのセルA2の値ではなく、セルB2でuid serial_no
を取得します。
ImportRange関数を使用します( documentation ):
=IMPORTRANGE("spreadsheet key"; "Range")
これらのサンプルスプレッドシート( A および B )を参照してください。これらは独自のGoogleドライブにコピーできます(ファイル→コピー)。
Select
句からCol2を削除し、Where
句でCol1をCol2に置き換えます。
の代わりに
=QUERY(
ImportRange("[key]","Sheet1!A:C"),
"Select Col1, Col2 where Col1='"&A2&"'",
1
)
つかいます
=QUERY(
ImportRange("[key]","Sheet1!A:C"),
"Select Col1 where Col2='"&A2&"'",
1
)
状況に依存します。アプリのスクリプトファイルを設定し、編集または時間ベースでトリガーします。デバッグが必要になる場合がありますが、このバリエーションを使用して、あなたが言ったことを正確に行いました。ただし、実際にスプレッドシートで作業していて、時間を変更する必要がある場合は、前の回答者が言ったように、importrange関数を使用します。
var feederSS = SpreadsheetApp.openById("spreadsheetAId"); //get spreadsheet A
var feederSheet = feederSS.getSheets()[0];
var feederRange = feederSheet.getDataRange();
var feederData = feederRange.getValues();
/*Then get spreadsheet b*/
var masterSS = SpreadsheetApp.openById("SpreadsheetBId");
var masterSheet = masterSS.getSheets()[0];
var masterRange = masterSheet.getDataRange();
var masterData = masterRange.getValues();
/*Now iterate through all of the rows on the feeder sheet and check them against the data on the masterSheet*/
for (var l = 1; l < feederData.length; l++) {
var feederRow = feederData[l];
var feederFirstName = feederRow[0];
var feederLastName = feederRow[1];
var feederEmail = feederRow[2];
var feederCheckRow = [feederFirstName, feederLastName, feederEmail];
var duplicate = false;
for (var m in masterData) {
/*This is where spreadsheet A gets compared to B*/
var masterRow = masterData[m];
var masterFirst = row[0];
var masterLast = row[1];
var masterEmail = row[2];
var masterCheckRow = [masterFirst, masterLast, masterEmail];
if (feederCheckRow.join() == masterCheckRow.join()) {
duplicate = true;
}
}
if(!duplicate) {
masterSheet.appendRow(feederRow);
}
}