リストボックスで選択したフォルダの中身(JPGファイルが複数入っています)をExcelシートに貼り付けるマクロを作成したいです。
ユーザーフォームにはフォルダの選択を行う以下のマクロが組んであります。
Private Sub UserForm_Initialize()
Dim S_folderPath As String
Dim filename As String
Me.TextBox1 = ThisWorkbook.Path & "\"
S_folderPath = Me.TextBox1.Text
UserForm1.Caption = "フォルダ名を選択して下さい"
'先頭のファイル名の取得
FolderName = Dir(S_folderPath, vbDirectory) '←リストボックスに表示させるフォルダ名
'ファイルが見つからなくなるまで繰り返す
Do While FolderName <> ""
If FolderName <> "." And FolderName <> ".." Then
ListBox1.AddItem FolderName
End If
FolderName = Dir()
Loop
End Sub
該当のフォルダを選択し、コマンドボタンを押せばそのフォルダの画像が貼り付けられるようにしたいのですが、コマンドボタンにどのようなマクロを組めば良いのか分かりません。
写真を取り込むマクロはあるのですが、これをどう使えば良いかも分かりません。
Sub 写真取り込み()
Dim folderpath As String
Dim basefile As String
Dim filename As String
Dim myFileName As String
Dim filenum As Integer
Dim filen As Integer
Dim myShape As Shape
Dim darray() As Variant
Dim i As Shape
basefile = "このマクロが組んであるファイル.xlsm"
folderpath = ThisWorkbook.Path & "\"
Workbooks(basefile).Activate
Worksheets("写真").Select
Cells.ClearContents
'jpegファイル名を取り込む
Dim buf As String, cnt As Long
buf = Dir(folderpath & "*.jpg")
Do While buf <> ""
cnt = cnt + 1
Sheets("写真").Cells(cnt, 1) = buf
buf = Dir()
Loop
'ファイル数を数える
Workbooks(basefile).Activate
Worksheets("写真").Select
filenum = WorksheetFunction.CountA(Columns("A:A"))
'写真を貼り付ける
For filen = 1 To filenum
'貼り付けるファイル名を決める
filename = Sheets("写真").Cells(filen, 1)
folderpath = ThisWorkbook.Path & "\"
myFileName = folderpath & filename
Cells(filen, 2).Select
'--(1) 選択位置に画像ファイルを挿入し、変数myShapeに格納
Set myShape = ActiveSheet.Shapes.AddPicture( _
filename:=myFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=0, _
Height:=0)
'--(2) 挿入した画像に対して元画像と同じ高さ・幅にする
myShape.Select
Selection.ShapeRange.Height = 99
Selection.ShapeRange.Width = 132.09428
Selection.ShapeRange.ZOrder msoSendToBack
Next
End Sub
長々と申し訳ありません。
一部でも分かるような方がいましたら、お力をお貸しいただけないでしょうか?
よろしくお願いいたします。
No.1
- 回答日時:
こんにちは
コード中のコメントにある通り、ひとつのファイルを貼り付けるのは(1)の部分(実際は一つの命令)だけです。
画像のサイズを固定(?)に調整するのなら(2)の部分も。
上記(1)を実行する際には、
・変数myFileNameに画像のパス
・Selectionは画像を挿入するセル位置
にしておく必要があります。
ということで、
>コマンドボタンにどのようなマクロを組めば良いのか分かりません。
・formで選択されている画像ファイルのパスを変数myFileNameに
・画像挿入位置のセルを選択
の状態にして、(1)の処理(必要に応じて(2)も)を行えば宜しいかと。
回答ありがとうございます。
恥ずかしながら知識不足で、頂いたアドバイスを実行することができなさそうです。
(写真を取り込むマクロは当方が作成したものではなく、そのため解読できていない有様です。)
申し訳ありません。
No.2
- 回答日時:
こんばんは、
>該当のフォルダを選択し、コマンドボタンを押せばそのフォルダの画像が貼り付けられるようにしたい
>写真を取り込むマクロはあるのですが、これをどう使えば良いかも分かりません。
TextBox1で選択したフォルダを対象にするためには
Sub 写真取り込み()の
folderpath = ThisWorkbook.Path & "\" を
folderpath = Me.TextBox1.Text にすることで良いかと思います。
使用されていない変数などもあるようなのでざっくりですが、、
ブック名やシート名は適時変更、A列にファイル名、B列に画像(.jpg)、と言う処理のようですが、ファイル数を数えるについては、変数cntが値を持っているので、流用できるような気がしますし、変数bufが、ファイル名を持っているなら、このDo While buf <> "" 内ですべて処理してしまっても良さそうですが、入力(設定)メイン処理 出力を分ける意味では有用なのかもしれませんね。
また、拡張子の大文字小文字対策や簡単なエラー処理も必要かと思います。未検証なので、、あくまで参考程度で。
回答ありがとうございます。
恥ずかしながら知識不足で、頂いたアドバイスを実行することができなさそうです。
(写真を取り込むマクロは当方が作成したものではなく、そのため解読できていない有様でして、後半のおっしゃっていることもわかりませんでした..
.)
申し訳ありません。
No.3ベストアンサー
- 回答日時:
#2です。
不明な点を確認するべきでした。
>リストボックスで選択したフォルダの中身(JPGファイルが複数入っています)をExcelシートに貼り付けるマクロを作成したいです。
フォルダ内のすべてのjpgファイルを貼り付けたいと言う事でよろしいのでしょうか?また、どこのセルにどのように出力(貼り付け)したいのでしょうか?
ご質問にあるコードを拝見すると
Excelには写真と名付けられたシートがあり、
UserFormには、TextBox1とListBox1、CommandButton1が配置されていると想定できます。
おそらく実行するとTextBox1にThisWorkbook.Pathが、ListBox1に同階層のファイルとフォルダが表示されてしまいます。
この時ListBox1にファイル名も表示されると思いますが、そのファイル単体で貼り付ける場合もあるのでしょうか?
もし、ListBox1にフォルダ名のみを表示して、そのフォルダを選択して実行するなら、vbNormal+vbDirectory=16の不具合を回避するために
Do While FolderName <> ""
If GetAttr(S_folderPath & FolderName) And vbDirectory Then
If FolderName <> "." And FolderName <> ".." Then
ListBox1.AddItem FolderName
End If
End If
FolderName = Dir()
Loop
こんな感じになるでしょうか、他には
FSO(Scripting.FileSystemObject)などを使う方法もあります。
この部分はご質問の部分ではないので置いといて、
参考にされようとしている Sub 写真取り込み()を読むと、ListBox1の対象フォルダを選択してCommandButtonを押すとSheets("写真")のA列にフォルダ内にあるすべてのjpgファイル名が出力され、B列に画像(jpg)が指定サイズで貼り付けられるかと思います。
すべての画像をB列下方向に貼り付けで良いのでしょうか?
この時、貼り付けサイズはどうされますか?
参考になるか分かりませんが、
Private Sub CommandButton1_Click()
Dim buf As String
Dim folderpath As String
Dim cnt As Long
Dim myShape As Shape
Worksheets("写真").Activate
With ActiveSheet
.Shapes.SelectAll 'すべてのShapeを選択
Selection.Delete '選択されているShapeを削除
.Cells.ClearContents 'シートセルの書式、値をクリアー
folderpath = TextBox1.Text & "\" & ListBox1.Text & "\"
'jpegファイル名を取り込む
buf = Dir(folderpath & "*.jpg")
Do While buf <> ""
cnt = cnt + 1
.Cells(cnt, 1) = buf
'写真を貼り付ける
.Cells(cnt, 2).Select
'--(1) 選択位置に画像ファイルを挿入し、変数myShapeに格納
Set myShape = ActiveSheet.Shapes.AddPicture( _
filename:=folderpath & "\" & buf, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=0, _
Height:=0)
'--(2) 挿入した画像に対して高さ・幅を設定する
myShape.Select
With Selection
.ShapeRange.Height = .TopLeftCell.Height 'セルの高さ
.ShapeRange.Width = .TopLeftCell.Width 'セルの幅
End With
buf = Dir()
Loop
End With
MsgBox ("画像ファイル " & cnt & "枚を貼り付けしました")
End Sub
これを実行するとListBox1で選択したフォルダ内すべてのjpgファイルが
Worksheets("写真")のB列にセルのサイズに合わせて貼り付けられると思います。
長文回答で分かり難いかも知れませんが、参考になれば幸いです。
追記
拡張子の大文字小文字対策、、、
buf = Dir(folderpath & "*.jpg")なので忘れてください。
条件設定など(If~ Like)の場合と勘違いしました。
例
For Each myFile In fso.GetFolder(folderpath).Files
If LCase(myFile.Name) Like "*.jpg" Then
こんにちは。お返事が遅くなりました。
詳細にありがとうございます。
ご提示いただいたマクロで、目的通りの操作になりました!
最終目標はまた別にあるので、これをもとに改良していこうと思います。
無知で失礼いたしました。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
ExcelのVBAでフォルダ指定がで...
-
Excelのハイパーリンクについて...
-
エクセルのマクロについて教え...
-
フォルダ内のPDFファイル名を変...
-
vbsで選択ダイアログを表示した...
-
[VBS] Unicodeの文字化けを防ぎ...
-
ファイル名と同名のフォルダを...
-
excel VBA Dirにて検索したフォ...
-
同一フォルダ内の別ブックから...
-
Excel VBA で フォルダ名の一部...
-
エクセル VBA ファイルをフォ...
-
VBA フォルダの複数選択ができない
-
【マクロ】ファイル名の日付に...
-
VBScriptでのフォルダ指定ダイ...
-
VBS 途中のパスに変数を入れたい
-
VBA フォルダ名に特定の文字を...
-
保存先のフォルダ名を指定した...
-
パス名に2バイト文字(マルチバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
VBA 最新のフォルダ取得
-
ファイル名と同名のフォルダを...
-
VBA フォルダ名に特定の文字を...
-
デスクトップの画像をhtmlに表...
-
Excelのハイパーリンクについて...
-
フォルダ内のPDFファイル名を変...
-
Excelで指定したフォルダに保存...
-
会社のネットワーク上のファイ...
-
【マクロ】ファイル名の日付に...
-
保存先のフォルダ名を指定した...
-
多量のファイルをフォルダに自...
-
パス名に2バイト文字(マルチバ...
-
ディレクトリ名変更してコピー...
-
Access VBA で フォルダ権限...
-
C ファイル出力で、フォルダが...
-
サーバ内のフォルダ名と各フォ...
-
フォルダにリンクを貼りたい
-
vbsで選択ダイアログを表示した...
おすすめ情報