VBA 기본 조작(파일)

4648 단어 VBA
VBA 초보자를위한 기본 조작 방법 (파일)을 소개하고 싶습니다.

【FSO】
FSO(FileSystemObject)란 폴더를 조작하는 전용의 객체로, 코드를 보기 쉽게 할 수 있으므로 매우 편리한 기능입니다. 사용에 있어서 준비가 필요하므로, 우선은 아래의 화상에 맞추어 설정을 해 주세요.


이것으로 사용할 수 있게 되었을까 생각합니다.

데스크톱의 파일 수를 계산합니다.
Dim folderPath As String
folderPath = "C:\Users\jorut\OneDrive\デスクトップ"
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim i As Long
i = fso.GetFolder(folderPath).Files.Count
MsgBox (i)
Set fso = CreateObject("Scripting.FileSystemObject") 에서 fso를 객체화하고 있습니다만, 처음에는 필요한 「의식」이라고 생각해 깊이 생각하지 않아도 됩니다.fso.GetFolder(folderPath).Files.Countfso - 任意のフォルダ - ファイルを検知 - 数える같은 느낌으로 하나하나의 함수를 나누어 번역하면 의미를 알기 쉽다고 생각합니다.

바탕 화면에 폴더를 만들고 그 안에 텍스트 파일을 만듭니다.
Dim FolderName As String
FolderName = "C:\Users\jorut\OneDrive\デスクトップ\test"
MkDir FolderName
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("C:\Users\jorut\OneDrive\デスクトップ\test\test.txt")

파일 내용을 셀에 표시
Dim FSO As Object, TextFile As Object, buf As String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextFile = FSO.OpenTextFile("C:\Users\jorut\OneDrive\デスクトップ\test\test.txt")
buf = TextFile.ReadAll  'テキストファイルの中身を読み取る
Cells(1, 1) = buf

파일 삭제
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile "C:\Users\jorut\OneDrive\デスクトップ\test\test.txt"

폴더 바로 아래의 모든 파일 이름을 셀에 표시합니다.
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
   .InitialFileName = ""
   If .Show = True Then
      folderPath = .SelectedItems(1)
   Else
      Exit Sub
   End If
End With

Dim fso As Object
Dim file As Object
Set fso = CreateObject("Scripting.FileSystemObject")
ReDim BaseNames(fso.GetFolder(folderPath).Files.Count)

For Each file In fso.GetFolder(folderPath).Files
   cnt = cnt + 1
   BaseNames(cnt) = fso.GetBaseName(file.Name)

   For i = 1 To cnt
      Cells(i, 1) = BaseNames(i)
   Next i
Next

폴더 내의 모든 파일명을 표시한다(폴더 내에 추가 폴더가 있는 경우에는 그 안의 파일명도 표시한다)
Sub メイン()
    With Application.FileDialog(msoFileDialogFolderPicker)
        If Not .Show Then Exit Sub
        Call サブ(folderPath:=.SelectedItems(1))
    End With
End Sub
Sub サブ( _
    folderPath As String, Optional myCount As Long = 0)
    Dim fso As New FileSystemObject, myFolder As Folder, myFile As file
    Dim fname
    For Each myFile In fso.GetFolder(folderPath).Files
        myCount = myCount + 1
        fname = Split(myFile.Path, folderPath)
        fname = Split(fname(1), "\")
        Cells(myCount, 1) = fname(1)
    Next
    For Each myFolder In fso.GetFolder(folderPath).SubFolders
        Call サブ(myFolder.Path, myCount)
    Next
End Sub

조금 긴 코드이므로 나누어 설명하네요^^;

해설 1
Sub メイン()
    'FileDialogで開くフォルダを選択させる
    With Application.FileDialog(msoFileDialogFolderPicker)

        'もしフォルダが無ければマクロから離れる
        If Not .Show Then Exit Sub

     'サブ(...)のマクロを呼び出す
        Call サブ(folderPath:=.SelectedItems(1))

    End With
End Sub

해설 2
    'フォルダパスの設定
    folderPath As String, Optional myCount As Long = 0)
    'FSOの設定
    Dim fso As New FileSystemObject, myFolder As Folder, myFile As file
    '変数fnameの設定
    Dim fname

    'フォルダがある限りカウントする
    For Each myFile In fso.GetFolder(folderPath).Files
        myCount = myCount + 1
     
       'fnameは「パス名+\+〇〇.xlsx」になっているので分ける
        fname = Split(myFile.Path, folderPath)
        fname = Split(fname(1), "\")
        Cells(myCount, 1) = fname(1)
    Next

해설 3
    'フォルダ内にフォルダがあるか検知
    For Each myFolder In fso.GetFolder(folderPath).SubFolders
        'フォルダがあった場合はサブ関数をもう一度呼び出す
        Call サブ(myFolder.Path, myCount)
    Next

위의 코드와 같이 매크로 안에서 다시 한번 매크로(정확하게는 모듈)를 호출하는 처리를 再帰処理 라고 합니다.

이번 코드와 같이 함수 내에서 다른 함수를 호출해, 호출한 곳에서 원래의 함수를 호출하는 소스를 재귀 처리라고 합니다. 꽤 어려운 내용입니다만 여기까지 할 수 있으면 실무에 종사하게 됩니다(다고 합니다^^;)
이번 내용은 둥글게 기억하지 않아도 코드를 읽고만 하면 copipe로 조합해 나가는 것으로, 나름대로의 처리를 할 수 있게 될까 생각하기 때문에 함수나 변수의 하나하나의 의미를 읽을 수 있게 되면 좋다고 생각합니다.

좋은 웹페이지 즐겨찾기