VBA 기본 조작(파일)
4648 단어 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.Count
fso - 任意のフォルダ - ファイルを検知 - 数える
같은 느낌으로 하나하나의 함수를 나누어 번역하면 의미를 알기 쉽다고 생각합니다.바탕 화면에 폴더를 만들고 그 안에 텍스트 파일을 만듭니다.
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로 조합해 나가는 것으로, 나름대로의 처리를 할 수 있게 될까 생각하기 때문에 함수나 변수의 하나하나의 의미를 읽을 수 있게 되면 좋다고 생각합니다.
Reference
이 문제에 관하여(VBA 기본 조작(파일)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/borubo/items/3abc65e025d936e66713텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)