Excel VBAは、Excel上での作業を効率化するための非常に強力なツールです。特に多くのファイルを扱う場合、Excel VBAを使って自動化することで、作業の効率を大幅に向上させることができます。この記事では、外部から受け取ったファイルを送信者別に自動で整理する方法を、具体的なコードとともに紹介します。
Excel VBAの基本
Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。
そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。
Excel VBAを使ったファイル整理の基本
VBAでファイルを整理するには、以下の手順を踏む必要があります。
1. ファイルの一覧を取得する
2. 送信者ごとにフォルダを作成し、ファイルをそのフォルダに移動する
これを実現する基本的なコードは以下の通りです。
Sub OrganizeFilesBySender()
Dim FolderPath As String
Dim SenderName As String
Dim FileName As String
' ファイルが保存されているフォルダのパスを指定
FolderPath = "C:\YourFolderPath\"
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
' 送信者名をファイル名から取得するロジックを設定
SenderName = GetSenderFromFileName(FileName)
' 送信者名のフォルダを作成
If Not FolderExists(FolderPath & SenderName) Then
MkDir FolderPath & SenderName
End If
' ファイルを送信者名のフォルダに移動
Name FolderPath & FileName As FolderPath & SenderName & "\" & FileName
FileName = Dir
Loop
End Sub
Function GetSenderFromFileName(FileName As String) As String
' ファイル名から送信者名を取得するロジックを実装
' 例: [SenderName]_filename.xlsx の場合
GetSenderFromFileName = Split(FileName, "_")(0)
End Function
Function FolderExists(ByVal FolderName As String) As Boolean
On Error Resume Next
FolderExists = (GetAttr(FolderName) And vbDirectory) = vbDirectory
On Error GoTo 0
End Function
コードの詳細解説
OrganizeFilesBySender()関数
この関数は、指定したフォルダ内のファイルを送信者別に整理するためのメイン処理を行います。FolderPathには整理したいファイルが格納されているフォルダのパスを指定します。
GetSenderFromFileName()関数
この関数は、ファイル名から送信者名を取得します。今回の例では、ファイル名が「送信者名_filename.xlsx」という形式を持っていると仮定しています。この形式に基づき、送信者名を取得しています。
FolderExists()関数
指定したフォルダが存在するかどうかを確認する関数です。
応用例
1. 送信者名ごとのフォルダに日付フォルダを追加する
外部から受け取ったファイルを送信者別、さらに日付ごとに整理することで、過去のファイルも容易に管理できるようになります。
Sub OrganizeFilesBySenderAndDate()
Dim FolderPath As String
Dim SenderName As String
Dim DateFolder As String
Dim FileName As String
FolderPath = "C:\YourFolderPath\"
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
SenderName = GetSenderFromFileName(FileName)
DateFolder = Format(Date, "yyyy-mm-dd")
If Not FolderExists(FolderPath & SenderName & "\" & DateFolder) Then
MkDir FolderPath & SenderName & "\" & DateFolder
End If
Name FolderPath & FileName As FolderPath & SenderName & "\" & DateFolder & "\" & FileName
FileName = Dir
Loop
End Sub
2. 拡張子別にファイルを整理する
送信者名だけでなく、拡張子ごとにもファイルを整理することができます。
Sub OrganizeFilesByExtension()
Dim FolderPath As String
Dim Extension As String
Dim FileName As String
FolderPath = "C:\YourFolderPath\"
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
Extension = GetFileExtension(FileName)
If Not FolderExists(FolderPath & Extension) Then
MkDir FolderPath & Extension
End If
Name FolderPath & FileName As FolderPath & Extension & "\" & FileName
FileName = Dir
Loop
End Sub
Function GetFileExtension(FileName As String) As String
GetFileExtension = Split(FileName, ".")(1)
End Function
3. ファイルの作成日時を基に古いファイルをアーカイブする
一定期間を超えたファイルを別のフォルダに自動で移動させ、アーカイブとして保存することができます。
Sub ArchiveOldFiles()
Dim FolderPath As String
Dim ArchivePath As String
Dim FileName As String
Dim FileDate As Date
Dim ThresholdDate As
Date
FolderPath = "C:\YourFolderPath\"
ArchivePath = "C:\YourArchivePath\"
ThresholdDate = Date - 30 ' 30日前
FileName = Dir(FolderPath & "*.*")
Do While FileName <> ""
FileDate = FileDateTime(FolderPath & FileName)
If FileDate < ThresholdDate Then
If Not FolderExists(ArchivePath) Then
MkDir ArchivePath
End If
Name FolderPath & FileName As ArchivePath & FileName
End If
FileName = Dir
Loop
End Sub
まとめ
Excel VBAを使用することで、多くのファイルを効率的に整理する作業を自動化することができます。この記事で紹介した方法を参考に、実際の業務に適用してみてください。自動化により、作業時間の短縮やミスの削減など、多くのメリットを享受できるでしょう。
VBAも良いけどパワークエリも良い
VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。
クリックするとパワークエリの全11講座が表示されます。
-
【初心者向け】パワークエリ入門:ETLツールを使ってエクセルデータを簡単に整形・統合しよう!(1/11)
-
【実践ガイド】パワークエリでデータ収集:Excel、CSV、PDF、Webデータを簡単に取り込む方法をマスターしよう!(2/11)
-
【総力特集】パワークエリで列操作をマスター:選択、変更、移動、削除、結合、分割の詳細解説&実践テクニック!(3/11)
-
【徹底解説】パワークエリで行操作をマスター!フィルター・保持・削除テクニックと練習用エクセルで実践学習(4/11)
-
パワークエリでデータクレンジング: 文字列結合、0埋め、テキスト関数をマスター(5/11)
-
パワークエリで四捨五入、切り捨て、切り上げをマスターする方法(6/11)
-
パワークエリで効率的なデータグループ化を実現する方法(7/11)
-
パワークエリで時間と日付の計算をマスター!便利な関数を使って効率アップ(8/11)
-
パワークエリで条件別集計をマスターする方法(9/11)
-
Excelパワークエリでクロス集計表とデータベース形式を瞬時に変換する方法(10/11)
-
Excelパワークエリ入門: 効率的なデータ整理をマスターしよう!(11/11)
パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください
コメント