きょうはエクセルで品番に応じた商品画像を自動で切り替え表示させることを学びます。
商品の品番を入力するだけで、商品情報や写真が自動表示されるーーー。そんな便利な商品データベースは Excel ではできないと思っていませんか?
確かにエクセルのメニューには、画像を切り替えて表示する機能はありません。
しかし、マクロ(VBA)を使えば、それが実現できるのです。
きょうはあなたと、エクセル VBA で品番を入力するだけで商品写真を表示させる方法を学びます。
1.Excel VBAで写真を自動表示し、商品データベースを作成する手順
- 商品データベースの作成:Excelシートに商品の情報を入力するためのテーブルを作成します。例えば、商品名、価格、在庫数などの列を持つシートを作成します。
- 写真の挿入:商品の情報に画像を関連付けたい場合、画像を挿入するための列を追加します。画像は、ファイルパスを保存することでExcel内に保存されるのではなく、ファイルのパスを参照して表示します。
- VBAコードの作成:VBAマクロを作成して、データベース内の情報を読み取り、適切なセルに表示するためのコードを記述します。また、画像を表示するためのコードも含まれるでしょう。
以下は、商品データベースを作成し、商品情報と関連する画像を表示するための簡単な例です:
この例では、「商品データ」という名前のシートに商品情報が入力されており、商品名がA列、価格がB列、画像のファイルパスがF列に保存されていると仮定しています。商品情報はメッセージボックスで表示され、商品情報の右隣に関連する画像が表示されます。
ただし、実際のシナリオに応じてカスタマイズする必要があります。画像のファイルパスの保存方法、画像のサイズと配置、データベースの構造など、具体的な要件に合わせて調整してください。
2.商品画像のファイルを準備、挿入手順をマクロに記録
品番を入力したときに自動でマクロを実行し、商品画像を表示する仕掛けをつくります。
ポイントは、シートに画像を挿入する方法と、セルに品番を入力したときに、自動でマクロを実行する方法です。
エクセルで写真を表示させるなんて、思ってもみませんでした。データベースで利用できるならアクセスのように大規模でなくてもできそうです。これは儲けものです。
まず初めに、商品の画像を準備します。ここでは「ピクチャー」に「写真」というフォルダを作り、JPEG 形式の画像を保存することにします。ファイル名は、商品の品番と一致させておかなければなりません。マクロで扱いやすいよう、品番をローマ字でそのままファイル名にしておきます。
「マクロの始め方」は以下からどうぞ!
1.まずはエクセルから呼び出す画像ファイルを準備
それでは始めます。
「ツール」メニューの「開発」→「マクロ」→「マクロの記録」を選んだら、開く画面でマクロ名などを指定します。「OK」を押すと記録がはじまります。
2.「マクロの記録」で命令を調べる
この「マクロの記録」機能は、ユーザーの操作内容をそっくりマクロにしてくれるもので、画像の挿入を実際に行うだけで、マクロの命令文を作成できるのです。
マクロ名を入力し、保存先は「作業中のブック」、説明には「マクロ記録日」を入力し「OK」をクリックします。
※マクロ(VBA)は、「ツール」メニューの「開発」→「マクロの記録」から、セキュリティレベルを「中」に変更して再起動することで可能になります。
3.ここから記録されます
まず、画像を表示したい場所のセルをクリックして選択。「挿入」→「図」→「画像」→「このデバイスから(ファイル)」からを選ぶ。ファイルの選択画面が開いたら、準備していた画像を選び「挿入」ボタンを押します。
こうして挿入した画像は、そのままではサイズが合わないことが多いので、画像を右クリックして「サイズとプロパティ」で「図の書式設定から」高さ・幅を指定します。
最後に画像に名前をつけておきます。
画像が選択された状態のまま、シート左上の「名前ボックス」に「画像」と入力して「Enter」キーを押します。このような名前をつけておくと、不要になった画像をマクロで削除するとき単純な「画像」という名前で削除できるからです。
操作が終わったら「記録を終了」のボタンを押して記録をとめます。
記録したマクロを見るにはマクロの編集ツール「VBE(ビジュアル・ベーシック・エディター)」を開きます。VBE の左画面で「標準モジュール」の「Module4」をダブルクリックすると右側にマクロの命令文が表示されてきます。
Sub 画像挿入()
Range(“E4”).Select ①セルを選択
ActiveSheet.Plctures.Insart(“C:写真Book101.jpg”).Select ②画像を挿入
Selection.ShapeRange.LockAspectRatio = msoTrue ③縦横比を固定
Selection.ShapeRange.Height = 141.75 ④高さを変更
Selection.ShapeRange.Width = 207.75 ⑤幅を変更
Selection.ShapeRange.Rotation = 0# ⑥回転はなし
Selection.Name = “画像” ⑦画像に名前を付ける
End Sub
①画像の挿入先として E4 セル(Range(“E4”))を選択します(Select)
②減殺表示しているシート(ActiveSheet)に、画像(Pictures)を挿入して(Insert),挿入した画像を選択します(Select)。挿入する画像は、C ドライブの「写真」フォルダにある「Book101.jpg」というファイルとします。(“C:写真Book101.jpg”)
③選択(Selection)している画像(ShapeRange)の「縦横比を固定する」(LockAspectRatio)を有効(msoTrue)にします。
④選択している画像の「高さ」(Height)を141.75ポイント(約5㎝)にします。
⑤選択している画像の「幅」(Width)を207.75ポイント(約7.3㎝)にします。
⑥選択している画像の「回転」(Rotation)を0度にします。
⑦選択している画像(Selection)の名前(Name)を「画像」とつけます。
「マクロの記録」は以下からどうぞ!
4.「パス」を指定して画像を呼び出し挿入する
ActiveSheet.Pictures.Insert(”パス”)
画像を挿入するには「Pictures.Insert」という命令を使い、カッコ内にファイルの「パス」を指定します。これに「.Select」と続けると、挿入後、画像を選択した状態になります。
命令文の「Pictures.Insert」というのがポイント。後ろに( )をつけて画像ファイルへの「パス」を指定すると、その手前で指定したシート、ここでは「ActiveSheet」に、画像を挿入しています。
ちなみに「パス」とは、フォルダやファイルの場所を表す文字列のことです。ドライブ名を先頭に、辿るフォルダの名前を「¥」記号でつなげて書きます。ファイルの場合は、パスの末尾にファイル名と拡張子をつけます。拡張子とは、ファイルの種類を表す3文字前後の英数字で、エクセルのファイルなら「.xls」JPEG 形式の画像ファイルなら「.Jpg」などとつけます。
今回の例では、入力した品番に応じた画像ファイルへのパスを、「Pictures.Insert」の ( ) 内にそのつど指定できるように、マクロを改良すればよいことになります。すると該当商品の画像を自動で挿入できるようになるのです。
ただし、画像を挿入するマクロが作れても、品番を入力するたびに「開発」→「マクロ」→「マクロ」とメニューを選び、マクロを実行しなければならないのは面倒です。そこで、セルに品番を入力すると、即座にマクロが自動で実行されるようにしたいですよね?
※作成画面の左上で「Worksheet」と選ぶと、「Private Sub Worksheet_SelectionChange—」というマクロ名が自動入力されます。今回、このマクロ名は使わないので、とりあえずそのままにして、右端で「Change」を選び直します。すると、『Privete Sub Worksheet_Change—」と必要なマクロ名が入力されます。先に入力されたもう一つのマクロ名は削除して構いません。
3.セルの入力と同時に自動挿入でマクロ実行
1.入力した品番に応じ、画像を切り替えて表示する
セルに品番を入力するだけで、マクロが自動で実行される。これには、VBE の画面左側で、入力するシート名をダブルクリックすると、右側に開く入力画面に下のようなマクロを書くのです。これは「イベントマクロ」と呼ばれるマクロの作り方です。
作成画面には「セルの値を変更したとき」などの、状況に応じたマクロ名で、マクロを作成するだけです。これらのマクロ名は一覧から選ぶだけで自動入力できます。作成画面左上の(General)と書かれたリストで「WorkSheet」を選び、続けてその右側のリストから「Change」を選びます。
Private Sub WorkSheet_Change(ByVal Target As Range) ①セルに入力したとき自動で実行するDim ファイル As String ②変数の宣言
If Intersect(Target, Range(“C3”)) Is Nothing Then Exit Sub ③入力したセルの確認ActiveSheet.Shapes(”画像”).Delete ④既存の画像を削除
ファイル=”C:写真” & Range(“C3”).Value & “.jpg” ⑤画像のパスを作成
Range(“E4”).Select
ActiveSheet.Pictures.Insent(ファイル).Select
Selection.ShapeRange.LookAspectRatio = msoTrue ⑥画像を挿入する
Selection.ShapeRange.Height = 141.75
Selection.Name = “画像”
End Sub
そこに上のような命令文を入力すれば、品番に応じた商品画像を自動挿入するマクロは完成です。
- セルの値を変更したときに自動で実行するマクロの名前。カッコ内で「Target」という名前の変数を宣言している。この変数に、変数を加えたセルやセル範囲(Range)が入る。
- 「ファイル」という名前で、文字列(string)を扱う変数を用意する(Dim)
- 変数「Target」に入っている変更セルの位置が、C3セル(Range(“C3”)と重ならない(Is Nothing)場合は、ここでマクロを終了する(Exit Sub)。そうでなければ以下の処理に進む(If ~ Then~)
- 現在のシート(ActiveSheet)にある「画像」という名前の画像(Shapes(“画像”))を削除する(Delete)
- 「C:写真」という文字列に、C3セルに入力した値(Range(“C3”).Value)と「.Jpg」という拡張子を結合し(&)、画像ファイルへのパスを作成。これを「ファイル」という変数に入れる。
- E4 セルを選択し、変数「ファイル」で指定したパスの画像を挿入する。挿入後、縦横比を固定して高さを141.75ポイントにし、「画像」という名前を付ける。
(引用:PC21 田村規雄)
※変数とは、データの一時的な入れ物のことです。入っているデータに応じてそのつど違った処理を実行できます。通常、変数を使うときは、変数を表す文字列(変数名)と、変数で扱うデータの種類(データ型)を、マクロの冒頭に書いておくのが作法です。
※シートに画像がないと、削除の命令でエラーとなります。挿入した画像を残したままマクロを実行します。
2.「シート」を対象にした「イベントマクロ」のマクロ名
気をつけたいのは、「セルの値を変更したとき」に実行するイベントマクロは、シート内のどのセルを変更しても自動で動き出すことに注意しなくてはいけません。
今回のシートでは、「品番」欄の C3 セルに入力したときにだけマクロを実行し、それ以外のときは何も実行したくない。そのため「変更されたのは C3 セルかどうか」を最初に判定し、そうでなければ実行を停める必要があります。これに使うのが「Intersect」という命令です。
Private Sub Worksheet_「 」
シートを選択して表示したとき——Activate
セルの値を変更したとき————-Change
セルをダブルクリックしたとき——BeforeDoubleClick
セルを右クリックしたとき———-BeforeRightClick
ある操作をしたときマクロを自動で実行するには、操作に応じた名前のマクロを作ります。これを「イベントマクロ」と呼び、例えば上のようなものがあります。
3.変更されたセルが、「Target」という変数に入る
セルの値を変更したときのイベントマクロでは、変更したセルが自動で「Target」という変数に入ります。そこで「Target」が C3 セルと一致しないときは実行を中止するよう、場合分けをするのです。
① C3 セルに品番を入力する(セルの値を変更)変数「Target」に変更された「C3 セル」が入る
②イベントマクロを自動で実行
Private Sub Worksheet_Change(ByVal Target As Range)
セルの値を変更したときに自動で実行する「Worksheet Change」のマクロでは、続くカッコ内に書かれている五「Target」という名前の変数に、変更したいセルが自動で入ります。
4.「Intersect」で”共通範囲”を調べる
Intersect(範囲1,範囲2,—)
特定のセルに入力したときだけ「Worksheet_Change」のマクロを実行するには、「Intersect」を使い、入力セルの位置を調べます。2つの範囲の共通部分を調べ、重ならない場合は「Nothing」と判定します。
5.条件が成り立つときだけ実行する
If 条件式 Then 処理内容
ある条件が成り立つかによって処理を切り替えるには「If」の構文を使います。条件が成り立つときに実行する命令が1つだけの場合は、「Then」に続けて命令を書けばいいのです。マクロを停止するには「Exit Sub」と書きます。この結果を「If」の構文で判定すれば、「品番」欄に入力したときだけ、画像を挿入できます。実際に画像を挿入するときは、「写真」フォルダへのパスに C3 せるの品番と画像の拡張子を「&」記号でつなげ、ファイルへのパスを作ります。
ファイル=”C:写真” & Range(“C3”).Value & “.jpg”
ActiveSheet.Shapes(”画像”).Delete
これを「Pictures.Insect」のカッコ内に指定すれば、「品番」に応じた画像を自動挿入できます。なお、新に画像を挿入する前に、先に挿入されていた画像は削除します。ただし、シートに画像がないと、削除の命令でエラーになります。挿入した画像を残したままマクロを実行します。
6.VLOOKUP —表を検索して値を取り出す
ちなみに、画像以外の「書名」「価格」などの文字は、マクロではなく、VLOOKUP 関数で別シートの表から取り出す形にしたほうが簡単です。
「検索値」を「範囲」の左端で探し、該当する行の、「列番号」で指定した列からデータを取り出します。「列番号」は、「範囲」の左端から1,2,3と数えます。「検索の型」を「FALSE」と指定すると、「検索値」と完全に一致する値だけを探します。
品番に応じた商品名や価格などを自動表示するには、マクロではなく「関数」を使うのが手っ取り早いです。商品情報を記入した「商品一覧」という別シートを用意して、ここから値を取り出す VLOOKUP 関数の式を立てます。
あとがき
Excel VBAを使用することで、写真を自動表示し、商品データベースを作成することができます。
写真を自動表示するには、
- 商品データベースのシートに、写真を表示するための画像コントロールを配置する。
- 画像のファイルパスをデータベースに記録する。
- 入力する際に、ファイルパスを参照し、画像コントロールに画像を表示する。
商品データベースを作成するには、
- 商品データを入力するためのシートを作成する。
- 商品データを入力する際に、データのバリデーションを行うことで、入力ミスを防ぐ。
- 商品データを検索するための機能を実装する。
これらの機能をExcel VBAを使って作成することで、商品管理を効率的に行うことができます。ただし、Excelはデータベース管理システムとしては限界があり、大量のデータを扱う場合はAccessを検討することが望ましいです。
コメント