※20140320 Ver.UP!
今日は、ちょっといつもと変わってこんなネタを。
皆さんも仕事柄「写真」を用いることがあると思います。今までは市販されている下のような台帳を購入して、L判に印刷した写真を差し込んで管理していました。
ですが、今はほとんどデジタルカメラが主流。なかなかL判用紙に印刷するのは手間が掛かります。
このような写真の管理をExcelで出来ないのかな?とGoogleから検索をかけて見ると、Freeのアドオンや有料のソフトウェアもあるらしい。でも、ちょっとそこまではなあ、というのが正直なところ。
そこで、さらにGoogle検索で「VBAでこういうものをやっている人がいるに違いない!」と更に検索!(ポイントはキーワードを空白を入れて検索をかけます)
そこでヒットしたいくつかのプログラム文をいろいろ組み合わせたり修正しているうちに・・・なんと!出来ちゃいました。
配置したいセルをダブルクリックすると、画像データを選択できるようになって、しかもそのセルのサイズに自動的に写真をあわせてくれます。
もったいないので、皆さんにもお知らせします。
導入方法
1)ツールバー上で右クリック、「VisualBasic」を選択、表示。
2)「VisualBasic」ツールバーの「VisualBasicEditer」を選択し、Editerを起動。
3)左部のツリー表示から「Sheet1」をダブルクリックすると、写真のような画面に。
4)「(General)」から「Worksheet」を選択し、全選択して削除。
5)その後、下部のプログラムをコピペ、そしてこのファイルを保存。
2)「VisualBasic」ツールバーの「VisualBasicEditer」を選択し、Editerを起動。
3)左部のツリー表示から「Sheet1」をダブルクリックすると、写真のような画面に。
4)「(General)」から「Worksheet」を選択し、全選択して削除。
5)その後、下部のプログラムをコピペ、そしてこのファイルを保存。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _Cancel As Boolean)
Dim myPic
Dim myRange As Range '画像を配置するセル範囲
Dim rX As Double, rY As Double
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
If VarType(myPic) = vbBoolean Then Exit Sub
Set myRange = Target 'このセル範囲に収まるように画像を縮小する
Application.ScreenUpdating = False
With ActiveSheet.Pictures.Insert(myPic).ShapeRange
rX = myRange.Width / .Width
rY = myRange.Height / .Height
If rX > rY Then
.Height = .Height * rY
Else
.Width = .Width * rX
End If
.Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置
.Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置
End With
Application.ScreenUpdating = True
Cancel = True
End Sub
こうすると、セルにあわせて写真を配置してくれるようになる。
僕は全くVisualBasicなどはわからないが、何となくGoogle検索から出てきたプログラム文を見ながら修正やコピペしたところ、何となく出来てしまいました…
ちなみに、このExcelファイルで写真シートのテンプレートも作ったので、ぜひ使って下さい。
エクセル写真シートテンプレート |
※20140320中央配置バージョンになりました!
※ご寄付をお願いします。
下記のように、いろいろな人のアドバイスから完成したマクロですので基本無料ですが、寄付というカタチでも受け付けています。
ご寄付頂いたものは、自分が所属する「まちづくり団体」の活動経費として使わさせて頂きます。
その後…
≪追記≫一つ欲を言えば、この写真がセルの中央に配置されるようになればもっと良いのだけど・・・誰か、教えて下さいね。
※Twitter上で質問したところ、@Mako_Misakiさんからアドバイスを頂きました。上記のプログラムは、サイズ変更をした写真をセルの中央に配置できるようになっています。@Mako_Misakiさん、ありがとうございました!Twitterのこういうところが、イイネ!
後日、@Mako_Misakiさんから下記のようなTweetを頂き、新しいエクセルのバージョンでも使えるようになっているようです。
Makoさんが運営するサイト
≪追記2≫
※「MACのエクセルでも同じ事出来ませんか?」というコメントを頂いています。誰か出来る方、いらっしゃいますでしょうか?
≪追記3≫
Macユーザーの皆さんは、ここからは自己責任でお願いします。※自分でもMacを普段使っています。このエクセルを開くと
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
の部分でエラーが発生します。
どうやら調べていくと、GetOpenFilenameはMacではあまり使うことを推奨していないようです。
Apple Scriptを使って、どうやらそのエラーを補完するようになっています。(と、言う意味だと思います。)
ですが、さっぱりこれを見ても僕はわからなかったので(苦笑)、下記のようにしてみました。
myPic = Application.GetOpenFilename()
そうです、括弧の中の”画像ファイル”という記述や拡張子の部分を削ってしまうのです。
すると…かなり挙動が不審なのですが、何とか使えます。
また、画像ファイル以外のものも選択できるようになってしまいますので、それは個人で画像ファイルを選択して下さい。
まあ、こうすると、何とかWindowsと同じような状態で使えます。でも…しつこいようですが、自己責任でお願いします~
今日のファイル
写真台紙に特化したものでは、こういうものを見つけました!
今日のBOOK
Makoさんらが運営するVBAをわかりやすく教えてくれるサイト、Moug(モーグ)では、VBAを学びたい人のための書籍を紹介してくれています。
4 件のコメント:
大変参考になりました。ありがとうございます。Macでためしてみたところアプリケーションのところでひっかかったらしくうまく動作しませんでした。
画像データを取り込む指示がWindowsとは違うのでしょうか?
もし、なにかヒントがあれば教えてください。
よろしくお願いします。
ご教示ありがとうございます。活用させていただいております。
この件について1点質問です。
この手法にて作成したEXCELファイルは、同僚や得意先にメールで送っても写真は表示されるのでしょうか?
1度試したのですが「リンクされたイメージを表示できません。・・・」というコメントが出てきて、写真が表示されません。
何か解決策等ございましたら、ご教示願えませんでしょうか?
宜しくお願い致します。
実は、エクセルのバージョンが新しくなってからこの症状が出るようになりました。僕はPDF化して送ることで対応しています。根本的な解決にはなっていませんが…
早速の御回答有難うございます。
現時点ではそれが最適な方法かと思います。
有難うございました。
コメントを投稿