GASを使ったスプレッドシートのテキスト検索:ファイル内の全シートを一括で調べる方法
スプレッドシート内のテキスト検索はショートカットキーCtrl + F
やCtrl + H
を使ってできますが、複数のシートにまたがる検索や大量のデータを扱う場合、手作業では時間がかかることがあります。
特にどのシートのどのセルに該当データがあるかを一目で把握したい場合はGASを使うと効率的です。
そこで、Google Apps Script (GAS) を活用して複数のシートを一括でテキスト検索する方法をご紹介します。
このスクリプトを使うことで作業を効率化し、必要な情報に素早くアクセスできるようになります。
完成イメージ
検索キーワードが含まれるシート名とセル位置を一覧で表示
上の画像は、「東京」というキーワードでテキスト検索した例です。
ファイル内の複数のシートから「東京」というキーワードが含まれているセルを検索し、結果を一覧にします。
- シート名
- セル位置
- セルの入力内容
検索結果はGASによって新しいシートを作成し、そこに表示されます。
このスクリプトを使うことで、複数のシートに散らばったキーワードをまとめて検索表示できます。
また、セル位置のリンクを開くとその位置にジャンプできます。
手順
検索対象のスプレッドシートファイルを開きます。
ファイル内の全シートを検索するため、表示するシートタブはどの位置でも構いません。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function searchAcrossSheets() {
// 検索するキーワードを設定
var keyword = Browser.inputBox("検索キーワードを入力してください");
// 現在のスプレッドシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// 新しいシートを作成し、検索結果を保存
var resultSheet = spreadsheet.getSheetByName("検索結果");
if (resultSheet) {
spreadsheet.deleteSheet(resultSheet);
}
resultSheet = spreadsheet.insertSheet("検索結果");
resultSheet.appendRow(["シート名", "セル", "値"]);
// ヘッダーのスタイルを設定
var headerRange = resultSheet.getRange(1, 1, 1, 3);
headerRange.setHorizontalAlignment("center").setBackground("#b6d7a8");
// B列全体をセンタリング
resultSheet.getRange(1, 2, resultSheet.getMaxRows()).setHorizontalAlignment("center");
// 列幅の調整
resultSheet.setColumnWidth(1, 150); // シート名
resultSheet.setColumnWidth(2, 100); // セル
resultSheet.setColumnWidth(3, 300); // 値
// 全てのシートを取得
var sheets = spreadsheet.getSheets();
// 各シートをループして検索
sheets.forEach(function(sheet) {
if (sheet.getName() === "検索結果") return; // 検索結果シートはスキップ
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j].toString().indexOf(keyword) !== -1) {
// 検索キーワードが見つかった場合、結果シートに追加
var cell = range.getCell(i + 1, j + 1);
var cellLink = '=HYPERLINK("' + spreadsheet.getUrl() + '#gid=' + sheet.getSheetId() + '&range=' + cell.getA1Notation() + '", "' + cell.getA1Notation() + '")';
resultSheet.appendRow([sheet.getName(), cellLink, values[i][j]]);
}
}
}
});
Browser.msgBox("検索が完了しました。結果は '検索結果' シートに表示されています。");
}
スクリプトの説明
- 検索するキーワードを設定
-
// 検索するキーワードを設定 var keyword = Browser.inputBox("検索キーワードを入力してください");
Browser.inputBox
を使ってユーザーに検索キーワードを入力してもらいます。
- 検索結果シートの作成
-
// 現在のスプレッドシートを取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 新しいシートを作成し、検索結果を保存 var resultSheet = spreadsheet.getSheetByName("検索結果"); if (resultSheet) { spreadsheet.deleteSheet(resultSheet); } resultSheet = spreadsheet.insertSheet("検索結果"); resultSheet.appendRow(["シート名", "セル", "値"]);
- 既に「検索結果」シートが存在する場合は削除し、新たに「検索結果」シートを作成します。
- ヘッダーのスタイル設定
-
resultSheet.appendRow(["シート名", "セル", "値"]); // ヘッダーのスタイルを設定 var headerRange = resultSheet.getRange(1, 1, 1, 3); headerRange.setHorizontalAlignment("center").setBackground("#b6d7a8");
- 1行目に「シート名」「セル」「値」のヘッダーを追加します。
- ヘッダーをセンタリングおよび背景色を明るい緑色(#b6d7a8)に設定します。
- 列のセンタリングと幅の設定
-
// B列全体をセンタリング resultSheet.getRange(1, 2, resultSheet.getMaxRows()).setHorizontalAlignment("center"); // 列幅の調整 resultSheet.setColumnWidth(1, 150); // シート名 resultSheet.setColumnWidth(2, 100); // セル resultSheet.setColumnWidth(3, 300); // 値
- B列全体をセンタリングし、各列の幅を見やすいように調整します。
- 全てのシートを取得し検索
-
// 全てのシートを取得 var sheets = spreadsheet.getSheets(); // 各シートをループして検索 sheets.forEach(function(sheet) { if (sheet.getName() === "検索結果") return; // 検索結果シートはスキップ
- 現在のスプレッドシート内の全てのシートを取得し、「検索結果」シート以外の各シートをループして検索します。
- 検索キーワードのチェック
-
for (var i = 0; i < values.length; i++) { for (var j = 0; j < values[i].length; j++) { if (values[i][j].toString().indexOf(keyword) !== -1) { // 検索キーワードが見つかった場合、結果シートに追加 var cell = range.getCell(i + 1, j + 1); var cellLink = '=HYPERLINK("' + spreadsheet.getUrl() + '#gid=' + sheet.getSheetId() + '&range=' + cell.getA1Notation() + '", "' + cell.getA1Notation() + '")'; resultSheet.appendRow([sheet.getName(), cellLink, values[i][j]]); } } } });
- 各セルの値をキーワードと照らし合わせて、該当する値が見つかった場合、そのセルの情報を「検索結果」シートに追加します。
- 検索結果には、セルへのリンクも含まれています。このリンクをクリックすることで、元のシートの該当セルに直接アクセスできます。
- 検索完了の通知
-
Browser.msgBox("検索が完了しました。結果は '検索結果' シートに表示されています。"); }
- 最後に
Browser.msgBox
で検索完了を通知します。
- 最後に
スクリプトを書いたら、名前をつけて保存します。
(例:「テキスト検索」)
スクリプトを実行してテキスト検索を行います。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
スクリプトを実行すると入力ボックスが表示されます。
ここに検索したいキーワードを入力します。
例:東京
スクリプトの実行が完了すると検索結果が表示されます。
- A列にシート名
- B列に該当するセル
- C列に検索したセルの入力内容
B列のセルをクリックすると、該当セルにジャンプします。
ショートカットキーを使った検索
スプレッドシートにはショートカットキー Ctrl + H
を使用して「検索と置換」を行う機能があります。
この機能を使うことで、ファイル内のすべてのシートを対象に特定のテキストを検索し、必要に応じて置換することが可能です。
なお、Ctrl + F
は現在のシートのみを対象に検索しますが、Ctrl + H
ではすべてのシートを対象に検索と置換を行うことができます。
簡単な検索や置換を行いたい場合には、このショートカットキーを利用するのも便利です。
まとめ
GASを使ったスプレッドシートの検索は、特に複数のシートを管理している場合にメリットがあります。
通常のテキスト検索でも複数のシートにまたがって検索できますが、GASを使えば結果を一覧表示してすばやく見つけることができます。
さらにスクリプトを追加すれば、検索結果を基にテキストを置換することも可能になります。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント