goo blog サービス終了のお知らせ 

gooブログはじめました!

業務 を 自動化する Excel VBA。

〇 Excelマクロで画像データを読み込み、見やすい商品一覧表を作成しよう。

画像にハイパーリンクを作成しよう。

では、一覧表の画像にハイパーリンクを作成し、クリックすると元の画像ファイルを開くマクロを作成してみましょう。

元の画像ファイルを簡単に開けるようにすることで、一覧表の画像をサムネイルのように使用できるので大変便利です。

それでは早速、作っていきましょう。

標準モジュールに、続けて、リスト2のコードを記述してください。

リスト2●画像にハイパーリンクを作成するコード
リスト2、画像にハイパーリンクを作成するコード。

 「ハイパーリンク作成」という名前のプロシージャを作成しました。このプロシージャを実行すると、アクティブシートにあるすべての画像に対して、サンプルブックのフォルダーの中にある同名ファイルへのハイパーリンクを作成します。

(1)のFor Each…Nextステートメントは、アクティブシートにあるすべての画像に対して処理を繰り返します。繰り返し処理の間は、変数oをPictureオブジェクトとして扱えます。

(2)で、まず、サンプルブックのあるフォルダー(ThisWorkbook.Path)と、画像の名前(o.Name)を連結したパスを、変数fnに格納します。画像の名前は、リスト1の(15)で、挿入元画像のファイル名が付けられていましたね。

(3)は、行継続文字である「半角スペース」+「(半角アンダーバー)」を使用して改行していますが、実際は1行のコードです。Hyperlinks.Addメソッドを使用して、現在処理の対象となっている画像のShapeオブジェクト(ActiveSheet.Shapes(o.Name))をハイパーリンクのアンカーに、変数fnに格納した挿入元画像へのパスをハイパーリンクのアドレスに、それぞれ指定します。

ちなみに、Hyperlinks.Addメソッドで指定できる引数の一覧は表1のとおりです。

表1、Hyperlinks.Addメソッドの引数一覧。表1●Hyperlinks.Addメソッドの引数一覧
 
最後に(4)で、「ハイパーリンクを作成しました」のメッセージを表示して、コードを終了します。
(イラスト:武藤 玄)
                                           (イラスト:武藤 玄)
 

では実際に、コードを実行して動作を確認してみましょう。

「マクロ」ダイアログボックスを表示し、「マクロ名」の一覧から、「ハイパーリンク作成」マクロを選択し、「実行」ボタンをクリックします。

マクロを実行すると「ハイパーリンクを作成しました」のメッセージが表示されるので、「OK」ボタンをクリックしてください。見た目に変化はありませんが、各画像にハイパーリンクが設定されています。試しに、E4セルの画像をクリックしてみましょう。

E4セルに貼り付けられた画像の元画像が、関連付けられたアプリケーションで表示されました(図6)。このようにハイパーリンクを使うことで、シートに挿入した画像をサムネイルのように使用できます。

図6●関連付けられたアプリケーションで元画像が表示された
図6、関連付けられたアプリケーションで元画像が表示された。

表を配布するために画像を再貼り付けしよう。

最後に、画像を貼り付けたブックを第三者に配布できるように、画像を再貼り付けするマクロを紹介したいと思います。

画像貼付プロシージャで貼り付けた画像は、元になる画像ファイルを削除したり、貼り付けたブックを移動したりしてしまうと、図7のメッセージが表示されて画像が表示されません。

図7●画像ファイルへのリンク切れを示すアラート
図7、画像ファイルへのリンク切れを示すアラート。

なぜでしょうか。その理由を説明しましょう。

Pictures.Insertメソッドを使って画像を貼り付けると、画像に対するリンク情報がブックに保存されます(ここでいうリンク情報とは、先ほど作成したハイパーリンクとは異なり、挿入した画像を表示するために自動作成されるリンク情報のことを指します)。

そのため、画像データやブックを移動、削除してリンクが切れてしまうと、画像が表示されなくなってしまうのです。第三者に配布するのに、これでは困ります。

そこで、ブックを移動しても画像が表示されるように、画像を再貼り付けするマクロを作成してみましょう。

標準モジュールに、続けて、リスト3のコードを記述してください。

リスト3●配布できるように画像を再貼り付けするコード
リスト3、配布できるように画像を再貼り付けするコード。

「画像再貼付」という名前のプロシージャを作成しました。このプロシージャを実行すると、一覧表のE列の画像をカット&ペーストすることで再貼り付けを行い、画像のリンク切れを回避します。

(1)のFor…Nextステートメントは、商品一覧表のデータが入力されている2~6行目の範囲で処理を繰り返します。

(2)で、現在繰り返しの対象となっている、E列のセルに入力されているファイル名と同じ名前のShapeオブジェクト(.Shapes(Cells(i, 5).Value))を切り取り(.Cut)ます。

(3)で、現在繰り返しの対象となっているE列のセルを選択(Cells(i, 5).Select)します。

(4)では、(2)で切り取った画像を貼り付け(.Pictures.Paste)ています。切り取った画像を元の場所に貼り付けているだけなので見た目は変わりませんが、リンクによって表示される画像ではなく、ブックと一緒に保存される画像に変更されています。

(2)~(4)の処理を、E列のすべての画像に対して行います。

処理が終わったら、(5)でA1セルを選択し、(6)で「画像を再貼り付けしました」のメッセージを表示して、コードを終了します。

コードを実行する前に、再貼り付けを行わないとどのようになるかを確認しておきましょう。

サンプルブックを保存して閉じ、サンプルブックのフォルダーにある「パネルL1.jpg」~「パネルS2.jpg」の6個のファイルを、別のフォルダーに移動させます。この状態で、サンプルブックを開いてみます。

画像がすべてリンク切れの状態で表示されました(図8)。確認が終わったらサンプルブックを閉じ、サンプルブックのフォルダーに画像を戻して、再度サンプルブックを開きます。

図8●リンクした画像がない状態でブックを開く
図8、リンクした画像がない状態でブックを開く。

「マクロ」ダイアログボックスを表示し、「マクロ名」の一覧から、「画像再貼付」マクロを選択し、「実行」ボタンをクリックします。

マクロを実行すると「画像を再貼り付けしました」のメッセージが表示されるので、「OK」ボタンをクリックしてください。見た目に変化はありませんが、一覧表の画像はカット&ペーストによって再貼り付けされています。

試しにサンプルブックを保存して閉じ、サンプルブックのフォルダーにある画像ファイルを別フォルダーに移動させて、サンプルブックを開いてみます。

今度は、画像がリンク切れの状態ではなく表示されました(図9)。これで元画像を削除したり、第三者にブックを配布したりしても、リンク切れになることなく画像がきちんと表示されます。

図9●リンクした画像がなくても画像が表示された
図9、リンクした画像がなくても画像が表示された。

今回のマクロ、いかがでしたでしょうか? マクロで画像データを貼り付けることで、簡単にグラフィカルな一覧表を作成することができました。製品カタログやマニュアル、業務で使用する様々な一覧表など、画像を貼り付けたいニーズは多々あります。そのようなときにマクロを使うことで、正確かつ高速に画像の貼り付けを行うことができます。目を凝らしながら位置合わせをしたり、サイズ変更したりといった作業ともおさらばです。ぜひ、お役立てくださいね!

(イラスト:武藤 玄)
                                             (イラスト:武藤 玄)

ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「〝 たぬき の 「 スマホ & パソコン 」 ワールド 〟」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事