なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:画像を検索する(IMAGE関数)

数式で画像を検索したいという要望は昔からあるけど、表計算ソフトでこれを実現するのはなかなか手間である。

マクロは抜きにして、昔の Excelだと図形にリンクした番地のセルを表示させる方法

や、あるいはグラフの系列に画像を埋め込んで該当するものだけ表示させる方法

があった。

いずれも表示させる画像の数だけ設定し直しになるので、表示画像数が増えると効率が極端に悪くなるのが欠点だった。ついでにいうと画像をオブジェクトとして埋め込む必要があるので、ファイル容量もかなり食う。

その点、IMAGE関数による画像検索は画期的といえる。Web上に画像をアップロードする必要はあるものの、普通に1つずつ画像を検索するだけではなく、FILTER関数などを使ってスピル(動的配列)で一括に抽出もできるからだ。しかも参照した結果の画像は、値貼り付けすることで参照できる「値(画像)」にすることもできる。

という訳で、ひとまず準備から。まずは画像を参照可能な場所にアップロードする必要がある。今回はひとまずクラウド上のブログ用フォルダにアップしておく。

追記:Microsoft365ではセルに画像を配置できるようになったので、Web上にアップロードする必要がなくなりました……

アップしたら、画像のパスをコピーして「URLパス(今回なら「https://cdn-ak.f.st-hatena.com/images/fotolife/n/nandemo_excel/20230818/」の部分)と「ファイル名」に分解して、シート上に入力しよう。

パスを入力したセルは、名前定義で「URLパス」と名前を付けておく。ファイル名のリストはテーブル書式(テーブル名「テーブル1」)を設定して番号を振っておいた。

ここまでできれば後は簡単。テーブルに適当な番号を振って、その隣に画像を表示させる。


=IMAGE(URLパス&XLOOKUP([@番号],テーブル1[番号],テーブル1[ファイル名]),0)

これでおしまい。IMAGE関数の構文の詳細はヘルプを読んでもらうとして、第二引数を「0」にしておくと、セルに合わせて縦横比固定で表示される。

例:番号が「3」以上の画像だけ抽出する場合

=IMAGE(URLパス&FILTER(テーブル1[ファイル名],テーブル1[番号]>=3),0)

こんな感じ。今までの方法に比べたら手順が楽だし、使い勝手もいいと思う。