つい最近、今までの方法とは全く別の方法で画像でVLOOKUP関数を使えるようになりました。今まででも、Excel画像を使ったVLOOKUP関数を作ることはできましたが、実際にはINDEX関数とMATCH関数を組み合わせたり、セルを画像でリンク貼り付けするなど、かなり面倒な方法で、しかも動作が遅くなるというデメリットがありました。それが解消される全く新しい方法です。その解説をします。
何が変わったのか
Excelの画像は、ただセルの上に配置されるのが普通です。
拡大や縮小はできるものの、関数などで画像を扱うことができなかったため、人名に対しての顔写真を読み出すような仕組みを作成することはできませんでした。
しかし、本日、Excelを確認したところ、画像がセル内に挿入することができるようになっていたのです!
この方法で挿入した場合、その図形はセルの中に納まるようになります。
セルの大きさを変更すると、そのセルの大きさに合わせて大きくなります。
これはセルを結合して1セルとしての大きさを大きくしても同じく結合範囲の大きさに自動的になります。
そして、この画像は、数式で参照できます。
下の図はセルF2からの結合範囲に「=B2」という計算式を入れて、セルB2からの結合範囲にある画像をリンクした状況です。
ということは、画像がデータとして関数などで呼び出すことができるようになった、ということです。
今までExcelには、基本的に考えると、数値データか文字データしか入りませんでした。しかしもう一つ、画像型というのが追加されたと言えるのです。
この機能、もしかしたらスピル機能並みに使えそうな、応用範囲が広そうな気がしています。
どういうことなのか試してみよう
まず、この新しい機能をどう料理していくかの前にどういう動作なのかをかくにんしましょう。
まず、画像の大きさに関しては、セルの大きさで自動的に変わるというのは前述の通り。
では、これは編集的には何の扱いなのか深堀っていきます。
セル結合をすると、複雑になってしまうので、以下のようにセルB2に元の画像がセル内に入っていて、セルD2にそのセルを参照し、同じ画像が入っている状態を作りました。
まず、削除方法。
これは、普通の文字と同じように、Deleteキーで消せました。
消すと参照しているセルは0を出します。
ではIF関数を仕込んだらどうでしょうか。
セルD2の計算式にIF関数を入れて空白対策をします。
元画像を消すと、当然と言えば当然ですが、0ではなく、空白となりました。
でもこれで、IF関数で画像の切り替えや値の切り替えができること、それから画像のセルは空白ではないということがわかりました。
もしかしたら、挿入タブからファイルを挿入するだけではなく、元画像をコピーして、セル内に貼り付けがあるのでは?
と思い、やってみたらホームタブにありました。
図を貼り付け後にもセル内貼り付けへ変更可能な貼り付けオプションもあります。便利です!
当然セル内で貼り付けたらリンク先にも表示されました。
セル内配置も文字と同じように操作できるようです。
元画像は中央揃え、リンク画像は左揃えというバラバラに設定することもできました。
横位置の繰り返しはできないのかなと思いましたができませんでした。残念。
REPT関数も撃沈です。
他にも文字列結合なども試しましたが、結果として1セルの1画像だけの参照式しか反応するものを見つけることができませんでした。
元画像をダブルクリックして画像の入れ替えできないかなと思ったのですが、「画像」という文字列に代わり元の画像もなくなりました。この動作は危険ですね。
一応、元に戻すで画像は戻ってきます。
画像をデータベース化できるのか
これができるということは、やっぱり人名に対する写真入りのデータベースシステムを実現させたくなるものです。
ということでどこまでできるのかデータベース観点で試してみましょう。
まずはテーブル内のデータでセル内画像はできるのか。
余裕でできてしまいました。
あまりにもあっけないです。
なんとVLOOKUP関数も余裕です。
テーブル名は「メンバー」になっています。
本当に値を参照しているのと使い方が全く同じでいけます。
ということは、こんなプロフィール確認のアプリケーションも作成可能です。
ヤバい、ヤバすぎます。この機能。
またExcelでアプリケーションを作る時間が少なくて済むようになってしまっています。
マクロとの相性は?
とりあえず、このセルの値は、Excelは一体なんなのだと思っているのでしょうか?
セル内画像が入っているセルに対し、新たな値の読み出しの形ができたのかと思いましたが発見できませんでした。そこで「TypeName関数」で「Value」と「Value2」という値を読み出すプロパティの値の形を調べてみました。そこで新しい「Image」型とかが発見出来たら嬉しいなと思いましたが、結果は惨敗。
FormulaプロパティはStringでした。
FormulaプロパティはStringになるのは、セル内画像のセルの数式バーの表示を見てみると「画像」という文字になっているので正体が文字ということで認識されているからなのかなと思いました。
このあたりの解析方法は慣れていないので識者の方の分析を待ちたいと思います。
僕は僕で、自動化で活用する方法を極めようとおもいますので、マクロの記録で活用するために、値として貼り付けにはどのような反応を示すか、確認したいと思います。
以下の様な入力フォームのようなものを作成しました。
セルC6には、生年月日からの年齢が求まるように「=IF(C4=””,””,DATEDIF(C4,TODAY(),”Y”))」の式を入れています。
14行目には、セルB14が名前を参照するので「=C2」、セルC14が生年月日を参照するので「=C4」、セルD14がフォロワー数を参照するので「=C8」、セルE14が顔写真を参照するので「=F3」としておき、下位写真はセルF3にセル内貼り付けを行うことにします。
データが全部入ると、次のようになり、14行目に1列のデータセットができます。画像のセルも入ります。
このB14からE14の範囲をテーブルの下に、値として貼り付けられれば、マクロ化はとても簡単です。
ではやってみます。
なんと画像でありながら、値の貼り付けが可能なのです!
もう画像ではなく文字扱い?に近い扱いでいいのではないかと思います。
これで、VLOOKUP関数で「あくあまりん」を検索するとちゃんと画像が出てきます。
セル内画像が値の貼り付け可能というのは可能性がとても広がると思うのです。
この値の貼り付けをマクロの記録をしましたが、普通に動きました。
記録されたVBAを確認しましたが、従来通り、PasteSpecialでxlPasteValuesだけでイケてるみたいです。素晴らしい。
まとめ
また次元が一つ進んだかもしれません。今までもVLOOKUP関数で画像をリンクする方法はあったことはあったのですが、手順を踏まなければならなかったり、Excelやパソコンにものすごく負荷をかけることになっていたりしました。
この機能が実現した背景にはExcelにIMAGE関数が装備されたことが大きいのかもしれません。IMAGE関数はネット上の画像を今回と同じようにセル内画像にする関数で、画像が扱えるという意味では初めての関数でした。しかし残念なことに、IMAGE関数はネット上の画像しか扱えなかったのです。
しかし今回の機能は、あくまで文字扱いとして、画像を扱うために、様々な関数で利用することができるようになりました。
今回は紹介しませんでしたが、スピル機能でも対応していて、FILTER関数でも画像を出力できます。
また、セル内画像のセルは保護もかけられるので、テーブルではもともと保護はかけられないのですが、テーブル以外のセルであれば保護することもできるのです。
うまく作り込めば、とても今までは考えることもできなかったExcelを使ったアプリケーションを作ることが可能になったのです。
スピル以来の大きな出来事かもしれません。