web-dev-qa-db-ja.com

1つのGoogleスプレッドシート「A」からスプレッドシート「B」にデータを取得するにはどうすればよいですか?

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を取得します。

3
Kaippally

ImportRange関数を使用します( documentation ):

=IMPORTRANGE("spreadsheet key"; "Range")

これらのサンプルスプレッドシート(​​ A および B )を参照してください。これらは独自のGoogleドライブにコピーできます(ファイル→コピー)。

2
Vidar S. Ramdal

簡潔な答え

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
 )
2
Rubén

状況に依存します。アプリのスクリプトファイルを設定し、編集または時間ベースでトリガーします。デバッグが必要になる場合がありますが、このバリエーションを使用して、あなたが言ったことを正確に行いました。ただし、実際にスプレッドシートで作業していて、時間を変更する必要がある場合は、前の回答者が言ったように、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);
      }
}
0
Randy D