YouTubeにて、解説している講座動画の第4弾です!

VBAのコードを概要欄に掲載しようと思ったのですがどうやら角カッコ<>がHTMLのタグと認識されるのでコードが記載できないみたい。。

ということで、こちらのHPにてコード記載しておりますので、ぜひ見てみてください!

 

VBAコード

動画ではこちらのコードを利用しています。

'----------------------------------------------------
' 以下のプログラムで使うのだが、気にしなくてよい
Dim cnt As Long
Dim folderPathArray() As String
'----------------------------------------------------

'----------------------------------------------------
' フォルダ内のファイルを順に開いていくコード
'----------------------------------------------------
Sub フォルダ内のファイルを順に開く()
    
    Dim ws, 申請書ファイル As Workbook
    Set ws = ThisWorkbook.Worksheets("シート名")
    
    cnt = 0
    パスワード = ws.Range("A2").Value
    
    ' 親フォルダのフォルダパスを取得→配下の申請書ファイルを全部取得
    親フォルダパス = ws.Range("A1").Value
    Call GetFolder(親フォルダパス)

    ' 申請書ファイルを順に開く
    申請書数 = UBound(folderPathArray)
    For i = 1 To 申請書数
        
        申請書名 = folderPathArray(i)
        ' エクセルのパスワードがあれば、パスワードを解除しながら開く
        If パスワード <> "" Then
            Set 申請書ファイル = Workbooks.Open(申請書名, Password:=パスワード)
        Else
            Set 申請書ファイル = Workbooks.Open(申請書名)
        End If
        
        ' *************************************
        ' 書き込み処理
        ' ******************
        With 申請書ファイル.ActiveSheet
            ws.Range("A" & i + 5).Value = .Range("A1").Value
            ws.Range("B" & i + 5).Value = .Range("A2").Value
            ws.Range("C" & i + 5).Value = .Range("A3").Value
            ws.Range("D" & i + 5).Value = .Range("A4").Value
            ws.Range("E" & i + 5).Value = .Range("A5").Value
        End With
        ' *************************************
        申請書ファイル.Close
        
    Next
    
    MsgBox "完了しました"
    
End Sub

'----------------------------------------------------
' 以下は↑のプログラムから呼び出すコード(再帰処理用)
' おまじないと考えてOK。意味も分からず追加してください。
'----------------------------------------------------
Sub GetFolder(Path)
    Dim buf As String, f As Object
    
    If Right(Path, 1) <> "\" Then
        Path = Path & "\"
    End If
    
    With CreateObject("Scripting.FileSystemObject")
    For Each f In .GetFolder(Path).SubFolders
        Call GetFolder(f.Path)
    Next f
    End With
    
    buf = Dir(Path & "*.*")
    Do While buf <> ""
        cnt = cnt + 1
        ReDim Preserve folderPathArray(cnt)
        folderPathArray(cnt) = Path & buf
        buf = Dir()
    Loop

End Sub



学べる内容

エクセルファイルで作られた申請書を一つずつ開いてコピーすることなんてめちゃめちゃありますよね。

そんなときにこのコード利用していただければ同僚から感動されること間違いなしです。

  • エクセルファイルを開いて操作する
  • デバッグ
    • ブレークポイント
    • ステップイン
  • ループ(カウンタの利用)

 

さいごに

基礎はあともう一つで終わりにしようかなあとか考えています。

なんか教えておいた方が良いことあるかなあ。詰め込みすぎた・・・ではまた!