【VBAで画像を貼り付ける】ダイアログから画像を選択して貼り付けるコードを紹介
画像貼付作業での「大きさ、配置」調整を自動化したい!
こんな要望にお応えします。
この記事では、
ダイアログから画像を選択して指定するセルに貼り付けるVBAの作り方
をご紹介しています。
VBAの処理結果はこんな感じ
画像貼付作業の手間を省きたい!
という方は是非参考にしてみてください。
目次
ダイアログから画像を選択して指定するセルに貼り付けるVBA
ダイアログから画像を選択して指定するセルに貼り付けるVBAを導入すれば、
画像の大きさ、表示位置を自動調整が可能になる
のでエクセル作業の効率を大幅にアップさせることが可能です。
使い方
1.画像を貼り付けたいセルをダブルクリック
ダイアログが起動します。
2.ダイアログから画像を選択
たったこれだけ。
ダブルクリックしたセル内に収まるように画像が表示されます。
設定されているコード
「ダイアログから画像を選択して指定するセルに貼り付けるVBA」に設定されているコードがこちら
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim myF As Variant
Cancel = True
'''''''''''''''写真を貼り付けたいセルをダブルクリックするとダイアログが表示される''''(写真を貼り付けるセルの行数が18以上となることを想定)
If ActiveCell.MergeArea.Rows.Count > 17 Then
'''''''''''''''写真貼付ける
myF = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
If myF <> False Then
With ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, Width:=-1, Height:=-1)
'''''''''''''''写真の大きさを調整
.LockAspectRatio = True '縦横比率の維持(念のため)
.Width = Target.Width
If .Height > Target.Height Then .Height = Target.Height
'''''''''''''''写真の配置を調整
.Top = Target.Top + Target.Height / 2 - .Height / 2
.Left = Target.Left + Target.Width / 2 - .Width / 2
'''''''''''''''写真の名前を取得
ds1 = InStrRev(myF, "\")
File1 = Mid(myF, ds1 + 1)
ds2 = InStrRev(File1, ".")
'''''''''''''''写真の名前を表示
Cells(Target.Row, Target.Column + 23) = Mid(File1, 1, ds2 - 1)
Cells(Target.Row, Target.Column + 23).Select
End With
End If
Else
SendKeys "{F2}", True
End If
End Sub
上記コードはModuleではなくSheetに入力してします。
コードの設定ができる!という方はコピペして使ってみてください。
画像を貼り付けるVBAのコード解説
「ダイアログから画像を選択して指定するセルに貼り付けるVBA」に設定されているコードを解説します。
ダイアログを開くVBA
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim myF As Variant
Cancel = True
'''''''''''''''写真を貼り付けたいセルをダブルクリックするとダイアログが表示される''''(写真を貼り付けるセルの行数が18以上となることを想定)
If ActiveCell.MergeArea.Rows.Count > 17 Then
'''''''''''''''写真貼付ける
myF = Application.GetOpenFilename("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
1行目は、「ダブルクリックすると〇〇する」コード
5行目と7行目は、「17行以上結合されたセルをダブルクリックするとダイアログが表示される」コード
画像を貼り付けるVBA
With ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, Width:=-1, Height:=-1)
'''''''''''''''写真の大きさを調整
.LockAspectRatio = True '縦横比率の維持
.Width = Target.Width
If .Height > Target.Height Then .Height = Target.Height
'''''''''''''''写真の配置を調整
.Top = Target.Top + Target.Height / 2 - .Height / 2
.Left = Target.Left + Target.Width / 2 - .Width / 2
1行目は、「AddPictureでダイアログで選択した画像をアクティブ中のセルに貼り付ける」コード
3行目は、「貼り付けた画像の縦横比を固定する」コード
4行目~8行目は、「貼り付けた画像の大きさ、表示位置を調整する」コード
画像貼付けVBAを使って資料を作成してみた
ダイアログから画像を選択して指定するセルに貼り付けるVBAを使って作成した資料がこちら
- 好きな場所に適切なサイズの画像を貼り付けできる
- 17行以上結合されたセルを作るだけで画像貼付けVBAが使える
- 貼り付けた画像の調整が必要ないので作業効率が良い
20枚程度の画像を貼り付ける作業にかかった時間は約4分。
画像を1つ1つ選びながら貼り付けできる!ことがこのVBAの最大の特徴です。
設定されているVBAには、
17行以上のセルが結合されているセルをダブルクリックした時ダイアログを表示する
というコードが設定されています。
なので、
「様式が足りなくなった」「様式が変更になった」場合でも、
17行以上接合されたセルを作れば画像貼付けVBAを起動させるとができます。
こんな感じ
様式をアレンジしても、
17行以上接合されたセルをダブルクリックすればダイアログが起動する
という仕組みさえ守ればそのまま使えます。
「ダイアログから画像を選択して指定するセルに貼り付けるVBA」は下記のサイトでダウンロードすることができます。
気になる方は是非ダウンロードして画像貼付け作業の効率をアップさせてみてください。
仕事では20枚ほどの画像データ編集作業に2時間から3時間程度費やしていましたが、
VBAを導入してからは30分以内で完成させることができるようになりました。
業務内容に合わせたVBAを導入する方法
今回紹介した、
「ダイアログから画像を選択して指定するセルに画像を貼り付けるVBA」を業務内容に合わせてアレンジしたい!!
このように感じてくれた方がいらっしゃるのではないでしょうか。
業務内容に合わせたVBAを導入することができれば、
2時間~3時間もかかっているエクセル業務を1時間以内に処理する
ことだって可能です。
なんとしてもエクセル業務の効率をアップさせたい!と考えている方のために
業務内容に合わせてVBAをアレンジする2つの方法
を具体的にご紹介します。
それは、
「VBAのコード開発を第三者に依頼する」または「自分でVBAのコードを編集する」
という方法です。
VBAの開発を依頼する
「VBAのコード開発を第三者に依頼する」は、
プログラミング開発を請け負っている会社、または個人に依頼することで
業務内容に合わせたVBAの導入ができます。
通常の業務に専念しつつエクセル業務の効率をアップできるのでめちゃくちゃおすすめの手段なのですが、
依頼先によっては費用が高い!担当者によって完成度の差が激しい
などのデメリットがあります。
勤めていた会社でよく利用していたのですが、
「これだけのVBAでこんなに請求されるの!??」
と驚かされたことも。。。
VBAのコード開発を依頼予定の方は、
依頼先の候補として「マメBlogのエクセルVBA開発サービス」
を検討してみてください。
マメBlogで開発した「画像を貼り付けるVBA」の事例がこちら
フォルダ内全ての画像をまとめて貼り付けるVBA
「画像貼付けVBA」と「プルダウンリストVBA」を組み合わせたVBA
どんなエクセル作業をしていて、どんなVBAを設定したいのか。
を聞き取りをして開発したものです。
これらはほんの一例で、年間50件ほどのVBA開発を担当させていただいております。
マメBlogが提供するVBA開発サービスの特徴がこちら
- 現在行っている業務内容に合わせてVBAを設定
- 依頼を受けてから2週間以内に納入
- 簡単な改修は追加費用なしで実施
「実際に使っている様式」「職場での運用方法」に合わせてVBAを設定するので、
めちゃくちゃ使いやすいと大好評。
効率をアップさせたい!でもVBAを1から勉強する時間なんてない!!
こんな方は、是非「マメBlogVBA開発サービス」の利用を検討してみてください。
自分でVBAのコードを編集する
「自分でVBAのコードを編集する」にはVBAの勉強が必要です。
プログラミングの勉強って難しそぅ!
と思われるかもしれませんがそんなことはありません。
VBAは
「ネットや参考書で情報をゲットしやすい」「エクセルを使えればすぐにでもVBAを操作できる」
という理由から初心者が挑戦しやすいプログラミングだと言われています。
例えば、
【VBA 書き方】
【VBA 画像貼付 サンプルコード】
このようにネット検索すればいろんな情報を手に入れることができて、開発しようとしているVBAの難易度をすぐ調べることができます。
簡単なVBAであれば、
ネットや参考書で紹介されいるコードを組み合わせて業務内容に合わせたVBAに仕上げる
ことが可能です。
実現させたいVBAの難易度を確認してから、
「自分でVBA開発を進めるのか」それとも「第三者にVBA開発を依頼するのか」
を検討すると効率よくVBAの導入が可能です。
今後のためにVBAの知識を身に付けて業務内容に合わせたVBAを自ら設定したい!
と考える方はエクセルVBAの情報を発信しているメルマガ登録がおすすめ。
メルマガでは、以下のような情報を不定期に発信しています。
- 普通の会社員がVBAの知識を身に付けた方法
- 業務内容に合わせたVBAの開発方法
- VBA開発依頼の中から「これはエクセル業務で使える!!」と個人的に感じたコードの紹介
参考書やプログラミングスクールでの授業で行うような
「変数の意味とは」「プロパティとは」
という解説は行いません。
というか、私はプログラマーではないのでできません。
効率の悪いエクセル業務を毎日、何時間も強いられた苦しい経験から得たスキルを使って
エクセル業務の効率がアップするVBAのコードや作り方の情報
を積極的に紹介しています。
プログラミング学習は内容が難しいため途中で挫折する人が多い!
こんな不安からVBA学習をスタートさせていない方は、まずは無料で始められるメルマガでVBAの情報をお得にゲットしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません