EXCEL VBA セルで選択した場所に画像を挿入・シートに画像挿入作業を効率化する方法(テクニック)
EXCEL VBA セルで選択した場所に画像を挿入・シートに画像挿入作業を効率化する方法(テクニック)
●はじめに●【EXCEL VBA エクセルシートに写真(画像)を挿入する・写真(画像)を削除、については、下記を参照して下さい】
EXCEL VBA ダブルクリックだけ!Excelのセルに画像を挿入する方法 ●プログラム説明 (サンプル①)下記のサンプルプログラムは、ユーザーがEXCELシートの特定のセルをクリックして選択した画像を挿入するサンプルプログラムです。具体的には、セルの(A2, C2, A4, C4, A6, C6)をダブルクリックすると、画像ファイル選択ダイアログを表示し、選択された画像をそのセルに挿入する動作をするものです。EXCELシートに画像ファイルを挿入する作業は、手間が掛るのでこのサンプルプログラムを利用する事で簡単にEXCELシートへ画像を挿入する事ができます。工事管理写真などを管理する場合は便利だと思います。
【プログラムの流れ】 ① ユーザーがセルをダブルクリックする。 ② ターゲットとなるセルが特定のセルのいずれかであることを確認する。 ③ ダイアログを作成し、ユーザーに画像ファイルを選択させる。 ④ ユーザーがファイルを選択すると、そのファイルをダブルクリックしたセルに挿入する。 ⑤ 挿入された画像のサイズと位置を調整する。
【プログラム実行条件・注意事項】 ① このコードは特定のセル(A2, C2, A4, C4, A6, C6)に対してのみ機能します。他のセルをダブルクリックしても何も起こりません。 ② 選択可能な画像ファイル形式はGIF、JPG、JPEG、BMP、PNG、TIFです。他の形式のファイルは選択できません。 ③ 挿入された画像は、セルのサイズに合わせて自動的にリサイズされます。セルのサイズを変更すると、画像のサイズもそれに合わせて変わります。
★【サンプルプログラム】 下記のリンク先よりサンプルプログラムをダウンロードする事ができます。 ● insertimages01(サンプルプログラム)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Visual Basic Option Explicit Private Sub Worksheet_BeforeDoubleClick ( ByVal Target As Range , Cancel As Boolean ) ' ターゲットセルが指定したセル(A2, C2, A4, C4, A6, C6)のいずれでもない場合、CancelをTrueに設定します。 Cancel = True ' ターゲットセルが指定したセル(A2, C2, A4, C4, A6, C6)のいずれかであれば、処理を実行します。If Not Intersect ( Target , Union ( Range ( "A2" ) , Range ( "C2" ) , Range ( "A4" ) , Range ( "C4" ) , Range ( "A6" ) , Range ( "C6" ) ) ) Is Nothing Then
' ファイル選択ダイアログを作成します。 Dim fd As FileDialog Set fd = Application . FileDialog ( msoFileDialogFilePicker ) . Title = "Select an Image File" ' ダイアログのタイトルを設定します。 . Filters . Clear ' 既存のフィルターをクリアします。. Filters . Add "Image Files" , "*.GIF; *.JPG; *.JPEG; *.BMP; *.PNG; *.TIF" , 1 ' 画像ファイルのフィルターを追加します。
' ダイアログで画像が選択されたら、その画像をダブルクリックされたセルに挿入します。 If . Show = - 1 Then Dim Picture As Picture Set Picture = ActiveSheet . Pictures . Insert ( . SelectedItems ( 1 ) ) ' 挿入した画像のサイズと位置をダブルクリックされたセルに合わせます。 With Picture With . ShapeRange . LockAspectRatio = msoFalse . Width = Target . Width . Height = Target . Height . Left = Target . Left . Top = Target . Top . Placement = xlMoveAndSize●実行前~実行後 ※Excelの特定のセル(A2, C2, A4, C4, A6, C6)をダブルクリックすると画像選択ダイアログが表示されます。選択した画像は、ダブルクリックしたセルに挿入され、そのセルのサイズに自動的に合わせられます。 (画面クリックして拡大)
EXCEL VBA 複数の画像ファイルを自動的に順番に挿入する方法(複数のイメージファイルをワークシートに配置) ●プログラム説明 (サンプル②)【プログラムの流れ】 ① ダイアログボックスが表示され、画像ファイルの複数選択を行います。 ② 選択した各画像について、以下の処理を行います: ②-1ファイル名を対応するセルに挿入します。 ②-2画像をワークシートに挿入します。 ②-3挿入した画像のサイズと位置を調整します。
【プログラム実行条件・注意事項】
① 現在のアクティブシートにのみ画像を挿入します。他のシートに画像を挿入する場合は、コードを適切に調整する必要があります。 ② ユーザーが画像ファイルを選択することを前提としています。画像ファイルが選択されなかった場合、以下の通り続きます。 ③ ユーザーが画像ファイルを選択することを前提としています。画像ファイルが選択されなかった場合、コードは何も行いません。 ④ 選択した画像が適切に表示できることを前提としています。画像が大きすぎる場合や、対応するセルが存在しない場合などは、想定外の結果が生じる可能性があります。
★【サンプルプログラム】 下記のリンク先よりサンプルプログラムをダウンロードする事ができます。 ● insertimages02 (サンプルプログラム)
Sub InsertImages02() ' コメント:ダイアログボックスを開き、画像ファイルを選択します。 Visual Basic Sub InsertImages02 ( ) ' コメント:ダイアログボックスを開き、画像ファイルを選択します。 Dim fd As FileDialog Set fd = Application . FileDialog ( msoFileDialogFilePicker ) . Title = "Select Image Files" . Filters . Clear . Filters . Add "Image Files" , "*.GIF; *.JPG; *.JPEG; *.BMP; *.PNG; *.TIF" , 1 . AllowMultiSelect = True ' コメント:複数選択を許可します。 ' コメント:選択した画像ファイルを開きます。 If . Show = - 1 Then Dim i As Long For i = 1 To . SelectedItems . Count ' コメント:奇数行にファイル名を表示します(フルパスではなく)。 Dim fileName As StringfileName = Right ( . SelectedItems ( i ) , Len ( . SelectedItems ( i ) ) - InStrRev ( . SelectedItems ( i ) , "\"))
Range(" A " & (2 * i - 1)).Value = fileName Dim Picture As Picture Set Picture = ActiveSheet.Pictures.Insert(.SelectedItems(i)) ' コメント:選択した画像を対応するセル(A2を起点に下方向)に配置し、サイズを調整します。 With Picture With .ShapeRange .LockAspectRatio = msoFalse .Width = Range(" A " & (2 * i)).Width .Height = Range(" A " & (2 * i)).Height .Left = Range(" A " & (2 * i)).Left .Top = Range(" A " & ( 2 * i ) ) . Top . Placement = xlMoveAndSize●実行前~実行後 ※プログラムを実行後、ファイルダイアログが表示され、ユーザーは画像ファイルを選択できます。選択した各画像は、ワークシートに挿入され、適切なセルにフィットするようにサイズと位置が調整されます。また、選択した画像のファイル名が、対応するセルに表示されます。 (画面クリックして拡大)
EXCEL VBA 一瞬でExcelシートの画像を全削除・シートをクリーンにする! ●プログラム説明 (サンプル③)【プログラムの流れ】 ① ユーザーに削除の確認メッセージを表示します。 ② ユーザーが「はい」を選択した場合、次の処理を実行します。それ以外の場合、処理は終了します。 ③ アクティブシート上の全ての画像を取得します。 ④ 各画像に対して削除操作を行います。
【プログラム実行条件・注意事項】 ① アクティブシート上の全ての画像を削除します。削除したい特定の画像だけを選択する機能はありません。そのため、必要な画像が混在している場合は注意が必要です。 ② 画像が削除されると元に戻すことはできません。したがって、重要な画像が含まれている可能性がある場合は、コードを実行する前にシートのコピーを作成することをお勧めします。 ③ このプログラムは、アクティブシート(現在開いているシート)のみに影響します。他のシートにある画像は影響を受けません。
★【サンプルプログラム】 下記のリンク先よりサンプルプログラムをダウンロードする事ができます。 ● insertimages02 (サンプルプログラム)
Sub DeleteAllPictures() '画像の一括削除 Visual Basic Sub DeleteAllPictures ( ) '画像の一括削除 ' ユーザーに削除の確認を求めるメッセージボックスを表示 If MsgBox ( "全ての画像を削除してもよろしいですか?" , vbYesNo + vbQuestion , "確認" ) = vbYes Then ' 確認が取れた場合、以下の処理を行う ' 各画像に対して操作を行うための変数を定義 Dim pic As Picture ' アクティブシートの全ての画像に対してループ For Each pic In ActiveSheet . Pictures pic . Delete ●実行前~実行後 ※プログラム実行後、アクティブシート上の全ての画像が削除されます。ただし、ユーザーがメッセージボックスで「はい」を選択した場合のみです。 (画面クリックして拡大) 最後まで、ご覧いただきまして誠に有難うございました。 また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。よろしければシェアお願いします
EXCEL VBA Union関数でデータの複数範囲を一つにまとめる!・条件に基づくセル色の変更 Excel VBA 表に合計行と合計列を追加する・行と列の合計を自動生成する方法(テクニック)関連記事
EXCEL VBA エクセルシートに押印処理を行う・ダブルクリックで押印(判子・電子印鑑・スタンプ)(テクニック)EXCEL VBA エクセルシートに押印処理を行う・ダブルクリック .
EXCEL VBA ドロップダウンリスト・プルダウンリスト・コンボボックスの作成(リスト選択)EXCEL VBA ドロップダウンリスト・プルダウン .
EXCEL VBA 便利なVBAコード・サンプルプログラム一覧・覚えると便利・効率が上がる。パート①EXCEL VBA 便利なVBAコード・サンプルプロ .
EXCEL VBA 別のブックからデータをコピーする(ブック間のシートコピー)(テクニック)EXCEL VBA 別のブックからデータをコピーする(ブック間のシ .
EXCEL VBA 消費税対応10%・8%(軽減税率) 自動計算 (テクニック)EXCEL VBA 消費税対応10%・8%(軽減税率) 自動計算 (テクニック) .