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