質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

478閲覧

セル内の値を含むサブフォルダの写真を張り付ける(ループ処理)

ing0706

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/05/06 05:55

質問です。

以下に親フォルダに含まれるサブフォルダの写真をループ処理で行順に張り付けるコードを作っています。
現状以下コードにて親フォルダ内のすべてのサブフォルダの画像を上から行順に張り付けるコードはできております。
セル(y, 2)の列にサブフォルダーの名前を入力してあるのですが、
親フォルダーのパス + セル内の値 (親フォルダーのパスはInputBoxにて入力)
のファイルパスでサブフォルダーを参照して貼り付けることは可能でしょうか。

よろしくお願いいたします。

Sub テスト写真貼り付け()

Dim alert As VbMsgBoxResult Dim root_dir As String Dim fso As Object Dim sub_dirs As Object Dim sub_dir As Object Dim y As Long alert = MsgBox("実行してよろしいですか?", vbYesNo + vbQuestion, "実行確認") If alert = vbYes Then MsgBox "親フォルダのパスを入力してください。" '←「はい」ボタンをクリックしたときの処理。 End If ' 親フォルダのパス root_dir = InputBox("親フォルダーのパス名の入力" + Chr(10) + "例:C:\Users\xxxx\Desktop\テスト_写真", "親フォルダー確認") If root_dir = "" Then Exit Sub ' フォルダ内のサブフォルダをスキャン Set fso = CreateObject("Scripting.FileSystemObject") Set sub_dirs = fso.GetFolder(root_dir).SubFolders y = 5 For Each sub_dir In sub_dirs ' このサブフォルダについて処理 'y = importImagesFromOneSubDir(sub_dir, y, root_dir) Call imagesFromSubFolder(sub_dir, y) Next

End Sub

Private Function imagesFromSubFolder(sub_dir As Object, ByRef ref_y As Long)

Dim file_name As String 'MsgBox sub_dir.Name ' このフォルダ内の画像をすべて列挙 file_name = Dir(sub_dir & "\*.*") Do While file_name <> "" ' このファイルの拡張子を調べる If isImageFile(file_name) Then 'If file_name <> "" Then すべてのファイルを通す(検証用) ' 画像であれば,取り込んで次の行へ Call importImageFile(sub_dir & "\" & file_name, ref_y) '//フルパスと行数を渡す Debug.Print ref_y & ":" & sub_dir & "\" & file_name ref_y = ref_y + 1 '参照渡しの変数をインクリメント End If ' 次のファイルを取得 file_name = Dir() Loop

End Function

Private Function isImageFile(file_name)

' ピリオドは後ろから何文字目か pos_period = InStrRev(file_name, ".") If pos_period > 0 Then ' 拡張子を切り出し file_ext = LCase(Mid(file_name, pos_period + 1)) ' 画像の拡張子か?(小文字で指定可) If _ file_ext = "jpg" Or _ file_ext = "jpeg" Or _ file_ext = "bmp" Or _ file_ext = "gif" Or _ file_ext = "png" _ Then ' 画像であると判定 ret = True Else ret = False End If Else ret = False End If isImageFile = ret

End Function

'引数 画像ファイル(フルパス), 行数
Private Sub importImageFile(file_name, y)
Dim file_path As String
Dim MyShape As Shape

ActiveSheet.Cells(y, 11).Select Set MyShape = ActiveSheet.Shapes.AddPicture( _ fileName:=file_name, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Selection.Left + 3.4, _ Top:=Selection.Top + 3, _ Width:=Application.CentimetersToPoints(5.4), _ Height:=Application.CentimetersToPoints(4.05))

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/05/06 06:41

> 親フォルダ マクロファイルがあるフォルダの上位フォルダ、という意味でしょうか? > サブフォルダの写真 サブフォルダ内に存在する画像ファイル(jpegとか)のことでしょうか?
guest

回答2

0

h-okhsさん

その通りです。
上記のコードは写真貼り付けやサイズ加工の確認の作業の為に動くようにしておりました。

投稿2022/05/14 13:27

bonta

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上記のコードでは「親フォルダ内のすべてのサブフォルダ」から取得しているが、親フォルダ直下のセル(y,2)からのみ取得したいということでしょうか?

vba

1Set f = fso.GetFolder(root_dir & Application.PathSeparator & Cells(y,2)) 2Call imagesFromSubFolder(f, y)

投稿2022/05/09 05:51

編集2022/05/09 05:52
h-okhs

総合スコア149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問