GASを使ったスプレッドシートのテキスト検索:ファイル内の全シートを一括で調べる方法

スプレッドシート内のテキスト検索はショートカットキーCtrl + FCtrl + Hを使ってできますが、複数のシートにまたがる検索や大量のデータを扱う場合、手作業では時間がかかることがあります。

特にどのシートのどのセルに該当データがあるかを一目で把握したい場合はGASを使うと効率的です。

そこで、Google Apps Script (GAS) を活用して複数のシートを一括でテキスト検索する方法をご紹介します。

このスクリプトを使うことで作業を効率化し、必要な情報に素早くアクセスできるようになります。

目次

完成イメージ

検索キーワードが含まれるシート名とセル位置を一覧で表示

上の画像は、「東京」というキーワードでテキスト検索した例です。

ファイル内の複数のシートから「東京」というキーワードが含まれているセルを検索し、結果を一覧にします。

  • シート名
  • セル位置
  • セルの入力内容

検索結果はGASによって新しいシートを作成し、そこに表示されます。

このスクリプトを使うことで、複数のシートに散らばったキーワードをまとめて検索表示できます。

また、セル位置のリンクを開くとその位置にジャンプできます。

手順

STEP
スプレッドシートを開く

検索対象のスプレッドシートファイルを開きます。

ファイル内の全シートを検索するため、表示するシートタブはどの位置でも構いません。

STEP
GASエディタを開く
画像に alt 属性が指定されていません。ファイル名: GAS.png

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
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で検索完了を通知します。
STEP
スクリプトを保存

スクリプトを書いたら、名前をつけて保存します。

(例:「テキスト検索」)

STEP
スクリプトを実行

スクリプトを実行してテキスト検索を行います。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
入力ボックスにキーワードを入力

スクリプトを実行すると入力ボックスが表示されます。

ここに検索したいキーワードを入力します。

例:東京

STEP
検索結果がシートに出力される

スクリプトの実行が完了すると検索結果が表示されます。

  • A列にシート名
  • B列に該当するセル
  • C列に検索したセルの入力内容

B列のセルをクリックすると、該当セルにジャンプします。

ショートカットキーを使った検索

スプレッドシートにはショートカットキー Ctrl + H を使用して「検索と置換」を行う機能があります。

この機能を使うことで、ファイル内のすべてのシートを対象に特定のテキストを検索し、必要に応じて置換することが可能です。

なお、Ctrl + F は現在のシートのみを対象に検索しますが、Ctrl + H ではすべてのシートを対象に検索と置換を行うことができます。

簡単な検索や置換を行いたい場合には、このショートカットキーを利用するのも便利です。

まとめ

GASを使ったスプレッドシートの検索は、特に複数のシートを管理している場合にメリットがあります。

通常のテキスト検索でも複数のシートにまたがって検索できますが、GASを使えば結果を一覧表示してすばやく見つけることができます。

さらにスクリプトを追加すれば、検索結果を基にテキストを置換することも可能になります。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次