タイトル通り。
ダイアログから選択したファイルのファイル名を取得するマクロを組んでみました。
ファイル名だけだと味気ないので、1.ファイル名 2.フルパス 3.ファイル作成日時 4.ファイル最終更新日時を一挙に取得できるようにしました。ファイル名のみバージョンと、yes/noで選べるようにしてます。
取得後は任意のセルからスタートして下方向に貼り付けます。上記4種取得バージョンは4列使います。ファイル名だけなら1列です。
↓↓↓↓↓
Sub ファイル名プラスアルファを取得()
'ファイル名その他を貼り付けできる
'ファイル個々に選択できるバージョン
Dim cnt As Long
Dim dlg As FileDialog
Dim db() As String '配列
Dim i As Long
Dim f As Object
Dim j As Long
Dim k As Integer
Dim myRange As Range
Dim myFlg As Integer
myFlg = MsgBox("ファイル名/フルパス/作成日時/更新日時のすべてを取得しますか?" & vbCr & vbCr & "はい(Y):ファイル名+フルパス+データ作成日時+データ最終更新日時(4列)" & vbCr & vbCr & "いいえ(N):ファイル名のみ(1列)", vbYesNo + vbQuestion, "取得形式選択")
Set dlg = Application.FileDialog(msoFileDialogFilePicker) 'ダイアログから選択
dlg.AllowMultiSelect = True
' キャンセルボタンクリック時にマクロを終了
If dlg.Show = False Then Exit Sub
cnt = dlg.SelectedItems.Count
cnt = cnt - 1 '配列インデックスなのでマイナス1
ReDim db(cnt, 3) '配列再定義
With CreateObject("Scripting.FileSystemObject")
For i = 0 To cnt '一旦配列に格納
Set f = .GetFile(dlg.SelectedItems(i + 1)) 'SelectedItemsは1はじまり
db(i, 0) = f.Name
db(i, 1) = f.Path
db(i, 2) = f.DateCreated
db(i, 3) = f.DateLastModified
Next i
End With
On Error GoTo ErrHandle '下記セル選択でキャンセルされるとfalseが入る=booleanなのでエラーになるので、エラーハンドルをつける
Set myRange = Application.InputBox(prompt:="セルを選択してください。", Type:=8, Default:=ActiveCell.Address)
Select Case myFlg
Case vbYes 'Yes:ファイル名+フルパス+データ作成日時+データ最終更新日時(4列)
For j = 0 To cnt 'ほんとうはfor文使ってまわさなくても貼り付けられるが、下記「ファイル名のみ」の1次元配列だとfor使わないといけないので、やり方を統一した
For k = 0 To 3
myRange(1).Offset(j, k).Value = db(j, k)
Next k
Next j
Case vbNo 'No:ファイル名のみ(1列)
For j = 0 To cnt
myRange(1).Offset(j).Value = db(j, 0)
Next j
End Select
Exit Sub
ErrHandle:
MsgBox "範囲選択されなかったので、プロシージャを中止します"
End Sub
↑↑↑↑↑
furikuboってフリーソフトがあって、重宝してるんですけど、それと似たようなことをしたいなと思って書き始めたのがきっかけです。
最初はクリップボードに格納しようかと思ったんですけど、参照設定する必要があるとかであきらめました。ただ、Excel内のどこにでも貼り付けられるので、まあOKだろう、と。
ほんとうは配列使わなくてもできそうですが、後々応用効くように配列に格納しています。
また、上記ではファイル名のみ取得と4種データ取得の2バージョン選択ですが、
自分用にはユーザーフォームを使って必要なデータ種類を任意選択して抽出できるようにしています。(ここでは公開しませんが、希望あればお渡しできます)
ダイアログから選択したファイルのファイル名を取得するマクロを組んでみました。
ファイル名だけだと味気ないので、1.ファイル名 2.フルパス 3.ファイル作成日時 4.ファイル最終更新日時を一挙に取得できるようにしました。ファイル名のみバージョンと、yes/noで選べるようにしてます。
取得後は任意のセルからスタートして下方向に貼り付けます。上記4種取得バージョンは4列使います。ファイル名だけなら1列です。
↓↓↓↓↓
Sub ファイル名プラスアルファを取得()
'ファイル名その他を貼り付けできる
'ファイル個々に選択できるバージョン
Dim cnt As Long
Dim dlg As FileDialog
Dim db() As String '配列
Dim i As Long
Dim f As Object
Dim j As Long
Dim k As Integer
Dim myRange As Range
Dim myFlg As Integer
myFlg = MsgBox("ファイル名/フルパス/作成日時/更新日時のすべてを取得しますか?" & vbCr & vbCr & "はい(Y):ファイル名+フルパス+データ作成日時+データ最終更新日時(4列)" & vbCr & vbCr & "いいえ(N):ファイル名のみ(1列)", vbYesNo + vbQuestion, "取得形式選択")
Set dlg = Application.FileDialog(msoFileDialogFilePicker) 'ダイアログから選択
dlg.AllowMultiSelect = True
' キャンセルボタンクリック時にマクロを終了
If dlg.Show = False Then Exit Sub
cnt = dlg.SelectedItems.Count
cnt = cnt - 1 '配列インデックスなのでマイナス1
ReDim db(cnt, 3) '配列再定義
With CreateObject("Scripting.FileSystemObject")
For i = 0 To cnt '一旦配列に格納
Set f = .GetFile(dlg.SelectedItems(i + 1)) 'SelectedItemsは1はじまり
db(i, 0) = f.Name
db(i, 1) = f.Path
db(i, 2) = f.DateCreated
db(i, 3) = f.DateLastModified
Next i
End With
On Error GoTo ErrHandle '下記セル選択でキャンセルされるとfalseが入る=booleanなのでエラーになるので、エラーハンドルをつける
Set myRange = Application.InputBox(prompt:="セルを選択してください。", Type:=8, Default:=ActiveCell.Address)
Select Case myFlg
Case vbYes 'Yes:ファイル名+フルパス+データ作成日時+データ最終更新日時(4列)
For j = 0 To cnt 'ほんとうはfor文使ってまわさなくても貼り付けられるが、下記「ファイル名のみ」の1次元配列だとfor使わないといけないので、やり方を統一した
For k = 0 To 3
myRange(1).Offset(j, k).Value = db(j, k)
Next k
Next j
Case vbNo 'No:ファイル名のみ(1列)
For j = 0 To cnt
myRange(1).Offset(j).Value = db(j, 0)
Next j
End Select
Exit Sub
ErrHandle:
MsgBox "範囲選択されなかったので、プロシージャを中止します"
End Sub
↑↑↑↑↑
furikuboってフリーソフトがあって、重宝してるんですけど、それと似たようなことをしたいなと思って書き始めたのがきっかけです。
最初はクリップボードに格納しようかと思ったんですけど、参照設定する必要があるとかであきらめました。ただ、Excel内のどこにでも貼り付けられるので、まあOKだろう、と。
ほんとうは配列使わなくてもできそうですが、後々応用効くように配列に格納しています。
また、上記ではファイル名のみ取得と4種データ取得の2バージョン選択ですが、
自分用にはユーザーフォームを使って必要なデータ種類を任意選択して抽出できるようにしています。(ここでは公開しませんが、希望あればお渡しできます)