ファビコン。井の家紋。Googleスプレッドシートユーザ関数-検索結果一覧表示 | エクセルマクロ(VBA)実践蔵(じっせんぐら)

前の項目 - GoogleスプレッドシートとExcelの違い
次の項目 - 複数シートを別ブックへ移動して保存するマクロ

Googleスプレッドシートユーザ関数-検索結果一覧表示最終更新日:2019-09-21

Googleスプレッドシートでも、エクセルと同様、ユーザ関数を作成できます。

Googleスプレッドシートでは配列を返すことで、複数のデータが返せます。Excelでは2019よりスピル機能に対応され、配列が返せるようになりました。

その配列を返す特徴を活かして、今回は、Google Apple Scriptを使って、指定された範囲を検索して、一致するセルへのリンクリストを作成することができるユーザ関数を作成してみました。

テキストエディタでよくある、Grep結果一覧のようなイメージです。

使用例

検索対象データ(シート2)

検索データ(例)

検索結果表示シート(関数呼び出し側)

リンク付きの検索リスト表示 - 使い方

関数の定義

関数仕様指定された範囲で検索文字列に完全に一致するセル(パターン0)
又は、検索文字列を含むセル(パターン1)のリンクリストを表示する。
関数の型SearchAll ( 検索文字列 , 範囲 , パターン )
第一引数検索文字列 (文字列は" "で括る)
第ニ引数範囲 (" "で括って、文字列で指定する)
※例1:"'シート1'!A1:A100"(別シートを参照する場合)
    シート名は' 'で括る
※例2:"A1:A100"(同じシート内のセルを検索する場合)
第三引数パターン(0:完全一致,1:含む場合)
パターンが1の場合、隣の列に見つけたセルの内容を表示します。
 
function SearchAll(searchStr,address,ptn){
var spreadsheet = SpreadsheetApp.getActive();
var link = spreadsheet.getUrl();
var SheetName;
var add;
var topadd = "";
var sht;
var sID;
var reg;
if( address.indexOf( "!", 1 ) === -1 )
{
// 同じシート内
 sht = spreadsheet.getActiveSheet();
sID = sht.getSheetId();
add = address;
//正規表現でアルファベットを抽出
reg = /[A-Za-z]+/;
 topadd = add.match(reg);//列名の取得
}
else
{ // 別シートの場合
var endi = address.indexOf( "'", 1 );
SheetName = address.slice(1,endi);
// シート名を除いて、セルアドレスを取り出す
add = address.replace("'"+SheetName+"'!","");
reg = /[A-Za-z]+/; //正規表現でアルファベットを抽出
 topadd = add.match(reg); //列名の取得
// シートオブジェクトを取得
sht = spreadsheet.getSheetByName(SheetName);
// シートIDの取得(リンク用)
sID = sht.getSheetId();
}
var range= sht.getRange(add);
var row = range.getRow();
var values = range.getValues();

Logger.log(values);

link = link + "#gid=" + sID;
if( ptn === 0 )
{// 完全一致検索の場合
var keka_list = [];

for(var i = 0; i < values.length;i++)
{
// 列名先頭を取得
var Col = topadd[0].charCodeAt(0);
for( var j=0; j< values[i].length; j++ )
{
if( values[i][j] == searchStr )
{ // 完全一致の場合
var ColA = String.fromCharCode(Col+j);
keka_list.push(link + "&range=" + ColA + (i + row));
}
}
}
return keka_list;
}
else if( ptn === 1 )
{
var keka_list = [];
for(var i = 0; i < values.length;i++)
{
// 列名先頭を取得
var Col = topadd[0].charCodeAt(0);
for( var j=0; j< values[i].length; j++ )
{
var text = values[i][j] + "";
if( text.indexOf(searchStr) != -1 )
{
var ColA = String.fromCharCode(Col+j);
keka_list.push([link + "&range=" + ColA + (i + row),text]);
}
}
}
return keka_list;
}
}
前の項目 - GoogleスプレッドシートとExcelの違い
次の項目 - 複数シートを別ブックへ移動して保存するマクロ

2025/03/31 11:22 ExcelCalendar:こんにちは。対応ありがとうございます。丁寧な解説もありがとうございます。
2025/03/28 19:48 ExcelCalendar:【管理人】勉強中ということだったので、六曜追加対応の解説も追記しました。
2025/03/28 15:00 ExcelCalendar:【管理人】連絡ありがとうございます。段数が少ない月の調整を3段に対応するように修正しました。
2025/03/28 13:17 ExcelCalendar:こんにちは。六曜の件で質問があります。2025年1月でマクロを実行すると一行挿入されています。六曜の終わりも31日で終わらない月もあります。確認の程、宜しくお願い致します。
2025/03/26 10:26 ExcelCalendar:六曜の対応、ありがとうございます。勉強を始めたばかりで分からない点が多いですが、こちらのサイト見てマクロに強くなりたいと思います。今後とも宜しくお願い致します。
2025/03/25 11:32 ExcelCalendar:【管理人】エクセルでカレンダーを作成するマクロに六曜対応を追加しました。ダウンロードは六曜非対応版と2つに分けています。
2025/03/25 09:49 ExcelCalendar:【管理人】そうですね。六曜はwebAPIからなら取得できそうなので、処理時間は増えそうですが、考えてみます。
2025/03/24 13:25 ExcelCalendar:こちらを使用しております。六曜の対応をしたいのですが分かりません。テンプレートはございますか?
2025/03/18 18:48 MailDelete:【管理人】前回更新のOutlook迷惑メール削除マクロのバグ対応による更新。および、注意事項を追記しました。
2025/03/14 12:15 MailDelete:【管理人】Outlook迷惑メール削除マクロを更新しました。ホワイトリストチェックの追加と処理の軽量化、および、空メールの削除を追加。
2025/03/12 16:21 GetJPNHoliday:【管理人】2026年までの春分の日・秋分の日は、更新前のものでも対応できていることを確認したため、他のページはそのままにします。
2025/03/12 16:18 GetJPNHoliday:【管理人】国民の祝日を取得するエクセルマクロ。2050年までの春分の日秋分の日の暫定日が国立天文台のHPに記載があったため、このページのみ更新しました。
2025/03/11 11:54 MakeFolderAndStore:【管理人】ダウンロードファイル内のみ同じマクロを含むため、こちらも更新しました。#Windows日付表示形式変更対応
2025/03/11 11:52 GetFileMadeDate:【管理人】画像の撮影日取得マクロのWindows日付表示形式変更対応。更新しました。
2025/03/11 11:23 MakeFolderAndStore:【管理人】なるほど。Windowsの設定で表示形式が変更可能なのですね。対処しておきます。連絡ありがとうございます。
2025/03/10 22:05 HowToResolutionERROR:こちらの環境で、https://dekiru.net/article/23658/ これをやったからですね。windowsは表示日付のフォーマット変更が出来るので、その影響を受けたためかと。
2025/03/10 22:01 HowToResolutionERROR:replaceでは2が空文字に置き換わっているため、「"5/03/09(日)"」になっています
2025/03/10 22:01 HowToResolutionERROR:topString = Mid(dateString, 1, 1)では2が取得されており、
2025/03/10 22:01 HowToResolutionERROR:日時変換(dateString As String) の段階で"25/03/09(日) 21:36"になり、
2025/03/10 14:30 MakeFolderAndStore:【管理人】撮影日に曜日の日本語が入るケースがこちらの環境では確認できませんでした。再現できない事象に関しては対処が難しいです。Win11やWin10で書き換えをした場合、曜日は入らないです。
2025/03/10 12:57 AllFile-Trimming:【管理人】画像まとめて一括トリミングに高解像度画像の保存版を追加しました。半自動程度と思ってください。正しく対応するならPublisherを使用する必要がありそうです。
2025/03/09 21:48 MakeFolderAndStore:If IsDate(日時変換(dateString)) = True Then ここが日付判定されずに落ちますね。日時変換の中身が「"5/03/09(日)"」になっています。
2025/03/07 14:41 AllFile-Trimming:【管理人】バグ対応 画像まとめて一括トリミング 拡張子の大文字対応に不備があったので、上げなおしました。申し訳ありません。(v3r1)
2025/03/07 14:38 AllFile-Trimming:【管理人】ユーザ操作の模倣で、「図の保存」操作をVBにさせることでできるか試してみます
2025/03/07 14:37 AllFile-Trimming:【管理人】書き込みありがとうございます。確かに今の保存方法だと96dpiですね。VBからの画像ファイル書き出し命令では、解像度維持が難しそう。
2025/03/04 13:59 AllFile-Trimming:オプション「ファイル内のイメージを圧縮しない」にチェックを入れたりしてみたのですが変わりませんでした。もしご存じでしたら圧縮されない方法をご教示いただけますと幸いです。
2025/03/04 13:58 AllFile-Trimming:一括トリミングを使用させていただいたのですが、保存前(300dpi)後(96dpi)で解像度が変わってしまいます。
2025/02/28 12:40 AddPictWord:【管理人】新規記事 「Wordへの画像貼り付けマクロ(Wordマクロ)」を追加しました。
2025/02/28 12:39 AllFile-Trimming:【管理人】画像まとめて一括トリミングを更新。拡張子が大文字の場合に対応しました
2024/12/26 09:45 MakeFolderAndStore:【管理人】同じくファイルを年月別のフォルダに振り分けを行うマクロの撮影日取得箇所に同じ修正処置を入れています。
2024/12/26 09:43 GetFileMadeDate:【管理人】画像ファイルや動画ファイルの撮影日を取得するマクロのバグ対応を処置して更新しています。
2024/11/24 18:53 ExcelFlowChart:試してみたいと思います。ありがとうございます。
2024/09/09 11:11 MoveSheetstoOtherBook:ありがとうございます!
2024/09/05 09:38 GetJPNCodeStock:【管理人】Windows Updateによって、EdgeのVersionが上がったのであれば、Edgeドライバも最新にしてください
2024/09/05 09:35 GetJPNCodeStock:【管理人】確認しましたが、サイトに変更はないため、コードに変更はありません。
2024/08/30 12:50 GetJPNCodeStock:昨日がら取得エラーになってしまいます。
2024/08/10 09:40 MailDelete:削除済みに入っているようです。確認不足で申し訳ありませんでした。
2024/08/08 10:53 MailDelete:受信タイミングで deleteした場合削除済みに入らず、消えてしまうようなのですが、削除済みに入れれますか。
2024/08/08 10:19 MailDelete:受信タイミングで Call item.Delete
2024/08/05 13:32 MoveSheetstoOtherBook:【管理人】フォルダ参照へのリンクミスを修正
2024/08/05 11:02 AllFile-Trimming:【管理人】保存フォルダを開くボタンの追加と対象画像ファイルを明記しました。あとは、パスが長すぎると保存できないかもしれません。
2024/07/31 19:34 AllFile-Trimming:画像をまとめて一括でトリミング出来るツールを探していて、こちらにたどり着きました。DLさせていただいたのですが、トリミングした写真が保存できません。使用方法が間違っているのでしょうか?
2024/06/02 08:11 MailDelete:【管理人】コメントありがとうございます。質問はうちの記事と関係なそそうですが、「セル範囲のロック」で調べてみてください。
2024/07/24 09:49 MailDelete:ハイパーリンクを消そうとすると「選択範囲が保護されており・・」で出来ません、良い方法をご教示ください。
2024/07/24 09:34 MailDelete:まさにほぼ同じブラックリストで削除するのが大変でした。私は迷惑メールホルダーに隔離していますが、
2024/06/13 14:04 SearchWordFileTool:【管理人】ワード(Word)ファイルの検索(正規表現検索)を行うGrep風ツールで図形検索を追加対応しました。
2024/06/12 16:26 SeikiHyougenTool:【管理人】エクセルで正規表現検索と置換を行うためのツールに図形内文書も追加対応しました。
2024/06/06 22:03 FixNumbering:【バグ対応】章番号や項目番号の連番を自動訂正 正規表現の半角/全角 区別を修正(IgnoreCase=TRUEをFALSEに変更)
2024/06/02 08:11 SeikiHyougenTool:【管理人】新規記事の追加「エクセルで正規表現検索を行うためのツール」
2024/06/02 08:09 StringOperation-VBA:【管理人】バグ対応「文字列操作・正規表現」半角/全角 区別の判定が逆だったので、訂正。
2024/05/13 11:09 inputSupport-ShortCut:【管理人】バグ対応「自作カレンダーフォームをショートカットキーで呼び出そう」で複数ブックからの呼び出しで既にブックが閉じられていた場合の処置が抜けていたので追記
2023/08/31 10:01 CalendarForm:8/29に質問をしたものです。自己解決できましたので連絡いたします。お騒がせいたしました。
2023/08/29 10:24 CalendarForm:お世話になっております、「クラス型の変数を配列定義」の部分で「ユーザー定義型が定義されていません」と表示されてしまいます。何か確認、設定すべき事項はありますでしょうか?
2023/08/28 13:40 GetFilesPath:【管理人】バグ対応 ファイルリストの作成(GetAllFile)呼び出しの変更
2023/08/28 13:39 Supportffmpeg:【管理人】記事追加のおしらせ。ffmpegを使用した動画編集補助ツールの記事を追加しました。
2023/07/16 23:38 StringOperation-VBA:【管理人】RExp_FindStrArr関数で一致文字列が見つからない場合のバグ対応を実施
2023/07/03 18:40 ExcelFlowChart:【管理人】フローチャート入力補助ツールにコメント文をテキスト出力する機能を追加しました
2023/06/24 14:50 GetFilePath:【管理人】ファイル参照(初期フォルダ指定)のバグ対応を行いました
2023/06/12 12:13 CalendarForm:【管理人】カレンダーフォームを祝日表示に対応させました。
2023/06/07 12:35 CalendarForm:コメントありがとうございます。自作のカレンダフォームは、祝日に対応していません。
2023/06/07 09:51 CalendarForm:大変参考になります。祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/06/07 09:51 inputSupport-ShortCut:祝日を列挙したシートがありますが、祝日を赤色にする方法はご説明されていますでしょうか
2023/05/19 14:09 Init-Excel:管理人による書き込み確認