エクセルで電子納品を楽にする
ソフトを使わずに電子納品のファイルを用意するのはなかなか手間がかかるので、
 最終的なファイルを集める作業とかファイル名称を変えつつコピーする部分をエクセルで集計してやる方法を思いついた。
そのほかにも使えるケースがあるかもしれないので、
 アップしてみる。
ファイル収集(電子納品などにどうぞ)
 ちなみに、黄色い背景にしている範囲をダブルクリックすると、そのセル以下に選んだファイルパスが登録できます。
マクロ部分。(雑ですみません)
‘—————————————————————
 ‘2015/3/29
 ‘作成環境: Excel2010
 ‘
 ‘known bugs: まだ解らない. 😉
 ‘
 ‘—————————————————————
Private Sub StartFileCopy()
 On Error GoTo ErrorHandler
 Set fs = CreateObject(“Scripting.FileSystemObject”)
 Dim gyo As Integer
 Dim targetDir As String
 If Range(“B” & CStr(7)).Value = “” Then
 MsgBox “ファイル登録が一つも無い…”, , “ちょっとまって!”
 Exit Sub
 End If
targetDir = Range(“C3”).Value
 Do
 If Range(“B” & CStr(gyo + 7)).Value = “” Then Exit Do   ‘指定ファイルが書いてないとき
 ‘登録したPATH
 ‘MsgBox Range(“B” & CStr(gyo + 7)).Value
 ‘フォルダー名取得
 ‘MsgBox fs.GetParentFolderName(Range(“B” & CStr(gyo + 7)).Value)
 ‘ファイル名取得
 ‘MsgBox fs.GetFileName(Range(“B” & CStr(gyo + 7)).Value)
 ‘拡張子取得
 ‘MsgBox fs.GetExtensionName(Range(“B” & CStr(gyo + 7)).Value)
 If Range(“c” & CStr(gyo + 7)).Value = “” Then
 ‘リネーム名指定なしの場合はファイル名そのままでコピー
 fs.CopyFile Range(“B” & CStr(gyo + 7)).Value, _
 targetDir & “\” & fs.GetFileName(Range(“B” & CStr(gyo + 7)).Value), False
 Else
 ‘リネーム名指の指定があれば、コピー
 fs.CopyFile Range(“B” & CStr(gyo + 7)).Value, _
 targetDir & “\” & Range(“c” & CStr(gyo + 7)).Value & “.” & fs.GetExtensionName(Range(“B” & CStr(gyo + 7)).Value), _
 False
 End If
gyo = gyo + 1
Loop Until gyo > 999 ‘1000超えたら
Set fs = Nothing
Exit Sub
ErrorHandler:
 Close
 MsgBox “エラーです”, 0, “困ったことに”
 Set fs = Nothing
 Exit Sub
End Sub
Private Sub Button1_Click()
 Call StartFileCopy
End Sub
Private Sub SetFilePath(ByVal StartTarget As Range)
 Set fs = CreateObject(“Scripting.FileSystemObject”)
 flist = Application.GetOpenFilename( _
 FileFilter:=”すべてのファイル,*.*, エクセルファイル,*.xlsx, ワードファイル,*.docx”, _
 FilterIndex:=1, _
 MultiSelect:=True _
 )
 If IsArray(flist) Then
 For i = 1 To UBound(flist)
 Range(“B” & CStr(StartTarget.Cells.Row + i – 1)).Value = flist(i)
 Next
 End If
Set fs = Nothing
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 ‘ダブルクリックした位置よりファイルパスを登録処理
 If Target.Cells.Column = 2 And Target.Cells.Row >= 7 Then
 Cancel = True
 Call SetFilePath(Target)
 End If
End Sub