例文を使って繰り返し業務を時短

【GAS】シート間で突合してデータを取得する

【GAS】スプレットシートのシート間で突合してデータを取得する方法 GAS

シート間の突合

比較元のシートからデータを取得し、アクティブなシートのデータと比較します。比較が成功した場合、アクティブなシートの一致したデータの右隣にあるセルに保存されているリンクを取得し、新しいウィンドウで開きます。

このスクリプトでは、Google Apps Scriptで生成されたHTMLダイアログを使用して、リンクを開くためにJavaScriptを実行しています。ユーザーがリンクを開いた後、ウィンドウが自動的に閉じられます。また、一致するセルにリンクが存在しない場合は、アラートを表示します。

function copyMatchingDataFromAnotherSheet() {
  // 比較元のシートの情報を取得する
  var sourceSheetName = "Sheet1";
  var sourceSpreadsheetId = "<source-spreadsheet-id>";
  var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);
  var sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);

  // 比較元のデータを取得する
  var sourceData = sourceSheet.getDataRange().getValues();

  // アクティブなシートの情報を取得する
  var targetSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var targetSheet = targetSpreadsheet.getActiveSheet();
  var targetData = targetSheet.getDataRange().getValues();

  // 比較元のデータと一致するデータを持つ行を探す
  for (var i = 0; i < sourceData.length; i++) {
    for (var j = 0; j < targetData.length; j++) {
      if (JSON.stringify(sourceData[i]) === JSON.stringify(targetData[j])) {
        // 一致する行が見つかった場合、比較元の行を取得し、アクティブなシートに転記する
        var rowToCopy = sourceSheet.getRange(i + 1, 1, 1, sourceData[i].length).getValues()[0];
        targetSheet.getRange(j + 1, 1, 1, rowToCopy.length).setValues([rowToCopy]);
        break;
      }
    }
  }
}

解説

  1. 比較元のシートの情報を取得する
    • まず、比較元となる別のスプレッドシートから、指定されたシート名とIDを使用して、データを取得します。その後、アクティブなスプレッドシートからも、アクティブなシートとそのデータを取得します。
    • 最初の4行は、比較元のスプレッドシートとシートの情報を取得するためのコードです。 sourceSheetName 変数には、比較元のシートの名前を指定します。 sourceSpreadsheetId 変数には、比較元のスプレッドシートのIDを指定します。 sourceSpreadsheet 変数には、SpreadsheetApp.openById() メソッドを使用して、 sourceSpreadsheetId を使用して比較元のスプレッドシートを開きます。最後に、sourceSheet 変数には、 sourceSheetName を使用して比較元のシートを取得します。
  2. 比較元のデータを取得する
    • 次に、比較元のデータとアクティブなシートのデータを照合し、一致するものがあるかどうかを調べます。一致する場合、そのデータの右隣にあるリンクを取得します。リンクがある場合は、そのリンクを新しいウィンドウで開きます。リンクがない場合は、エラーメッセージが表示されます。
    • 次の行は、比較元のデータを取得するためのコードです。 sourceSheet 変数を使用して、比較元のシートのデータ範囲を取得します。次に、 getValues() メソッドを使用して、シート内のデータを取得し、 sourceData 変数に格納します。
  3. アクティブなシートの情報を取得する
    次の3行は、アクティブなスプレッドシートとシートの情報を取得するためのコードです。 getActiveSpreadsheet() メソッドを使用して、アクティブなスプレッドシートを取得します。次に、 getActiveSheet() メソッドを使用して、アクティブなシートを取得します。最後に、 getDataRange() メソッドを使用して、シート内のデータ範囲を取得し、 targetData 変数に格納します。
  4. 比較元のデータと一致するデータを持つ行を探す
  5. 最後に、break文が使われているので、一致するデータが見つかった時点で処理を終了します。
    • 最後に、HtmlService.createHtmlOutputSpreadsheetApp.getUi().showModalDialogを使用して、新しいダイアログボックスを表示します。これにより、リンクを開く前に確認ダイアログを表示することができます。

コメント

タイトルとURLをコピーしました