Googleスプレッドシートでインクリメンタルサーチを実装してみた~ChatGPTでサクッと解決!!

ChatGPTが提示してくれた。Googleスプレッドシートの関数。

=FILTER('商品マスタシート'!B2:B,
ISNUMBER(SEARCH($C$2, '商品マスタシート'!B2:B)) + ISNUMBER(SEARCH($C$2, '商品マスタシート'!C2:C)) + ISNUMBER(SEARCH($C$2, '商品マスタシート'!D2:D)) > 0,
ISNUMBER(SEARCH($C$3, '商品マスタシート'!B2:B)) + ISNUMBER(SEARCH($C$3, '商品マスタシート'!C2:C)) + ISNUMBER(SEARCH($C$3, '商品マスタシート'!D2:D)) > 0
)

Googleスプレッドシート Spreadsheet で、インクリメンタルサーチ(入力のたびに検索結果を表示させる)をできるようにしたいと思い、さっと検索したところ、すぐに情報が見つからなかったので、ChatGPTに聞いてみたら、簡単に実現してくれました。という話です。

社内でkintoneを使っているのですが、なかなか使い勝手がよろしくない部分がある。

なかでも、「ルックアップ」という機能。他のデータベースとなっているkintone内アプリからデータを持って来ることができる機能で、コレにより、入力作業の簡略化、システム全体でのデータの整合性を保ちやすいという利点があるが、検索機能がイマイチで。。。

例えば、「商品マスタ」というデータ郡から、ID的なコードで紐づけてデータを持ってきたいとき、何千とあるコードから、毎回検索しなければいけない。。。

プラグイン等でカスタマイズできるが、それも、動きが遅かったり、効率があまり上がらなそうなものばかりで。。。

なので、今まではその対策として、商品マスタはあまり更新されるものではないので、EXCELに書き出して、EXCELでフィルタをかけて、コードをコピーしてkintoneにペースト!なんて作業をいていたのですが。。。

しかし、「EXCELを起動する手間、EXCELのフィルタの▽をクリックしてフィルタをかける手間が面倒なんすよねぇ。。。」という若手社員の意見が。。。

「え?!。。おまっ!!。。。それくらいの手間が??!!!。。。」

今は令和なので、言いたいことはグッと飲み込み、さらなる効率化をするためのチャンス到来!!やったー!!

「なんか、ちょっと入力したら、ババーっと出てくる、みたいな感じにできないんすかねぇ」

「・・・・。」

若手社員の要望をまとめると、つまりはインクリメンタルサーチ(記事冒頭参照)で気軽で手軽な検索をできるようにしたいと。

インクリメンタルサーチ英語: incremental search)は、アプリケーションにおける検索方法のひとつ。検索したい単語をすべて入力した上で検索するのではなく、入力のたびごとに即座に候補を表示させる。逐語検索、逐次検索とも。
ーーーWikipediaより

kintone内でのカスタマイズは既述の理由で今回は諦めることにした。もちろん、kintoneのカスタマイズ方法もChatGPTなどに聞いてみると簡単に方法を提示してくれるが、今回重要なのはスピード感!EXCELに切り替えるのが面倒とのことなので、スプレッドシートでやってみることに。Googleスプレッドシートもkintoneと同じく、ブラウザ上のアプリなので、kintoneのフォームにスプレッドシートへのリンクを仕込んでおけば、EXCELを起動するより早いはず。

スプレッドシートに商品マスタのレコードをインポートして簡易データベースを作る。そして、そのデータベースに検索をかけてヒットさせる。検索は第1検索ワードで絞り込み、更に第2検索ワードで絞り込みたい。そもそもスプレッドシートでインクリメンタルサーチなんてできるのかな?QUERY関数とかを入れ子にするのかな?なんて想像しつつ、実現方法をGoogleで1分ほど検索したこところ、情報が見つからなかったので、すぐにChatGPTに相談。

というプロンプトとも言えないようなお願いをする。

賢いので、↑のようなお願いでも理解してくれる。

提示してくれた関数をテストしてみる。

すると、それっぽい動作をする!!!すげぇ!(関数の意味も説明してくれてるけど、ほとんど意味がわかりませんが。。。)

このままだと、検索結果がB列の商品名しか表示されないので検索範囲をA2:Dに広げ、IDでも検索をかけたいので、検索対象列を同じようなパターンで追加変更する。

なんと、この短時間で基本形が完成。

あとは、行の固定、検索ワード入力セルを横並びに、検索結果の行数をカウントしてヒット数を表示、、、などなど変更して見やすく整えて。。。。

完成!!

ChatGPTを使う前は、ネット上に提供してくださっている賢人方の断片的な情報を集めて、何時間も、または何日も費やしていたのですよ。。。

ChatGPTを使うと、キモとなる関数を数秒でバシッと提示してくれて、さらに解説付き。

本当に便利!

喜びもつかの間、2つの問題点に気付く。

1つ目。これは「インクリメンタルサーチ」とは呼べないのでは?

この関数を試した方、スプレッドシートをよく使っている方、インクリメンタルサーチに詳しい方、はお気付きかと思いますが、スプレッドシートだと検索ワードをセルに確定するまで検索結果は表示されません。

これだと操作感としてインクリメンタルサーチと感じることができず、ただの部分一致フィルタですね。

2つ目。複数人が同時にアクセスできちゃう問題。

スプレッドシートでは、リアルタイムで同時共有されるので、ユーザーごとに独立した表示ができない。「フィルタ表示」で個別の表示はできるが、それだと、既述のとおりEXCEL時代と全く同じになってしまう。ユーザー専用のシートを作成し、そのURLをkintoneに仕込む?それも、kintoneのフォームがリンクで埋め尽くされてしまう。。。

この問題を解決するため、このスプレッドシートをウェブアプリ化することにしました。

もちろんその方法もChatGPTにお願いします。

長くなってきたので、ウェブアプリ化は次回の投稿にします。

最後までお読みいただきありがとうございました。

最後に、会社の宣伝もさせてください!

株式会社松栄シルクは、東京都葛飾区に本社を構えるシルクスクリーン印刷の専門会社です。1987年に設立され、長年にわたり熟練の技術と最新の設備を駆使して、オリジナルTシャツプリントやノベルティグッズの製造を行っています!!https://www.shoeisilk.com/

弊社について、ChatGPTに聞いてみました!