フォルダにファイルが保存されたら自動通知してくれるマクロを作る方法

エクセル

あなたは社内のメンバーにファイルやデータ作成を依頼して、共有フォルダに保存してもらったとき、保存したら教えてほしいと思ったことはありませんか?

あなた「Aさん、あのファイル保存してくれた?」

Aさん「もう3日前に入れましたよ」

あなた「わかった、ありがとう。(心の声:保存したら教えてよ~)」

まあよく見る光景ですが、フォルダを保存されたかいちいち見るのも面倒だし、聞くのも、答えるのも面倒です。

ただのホウレンソウ(報告・連絡・相談)の話のようにも聞こえますが、保存した方も、保存された方も、自動で通知されれば、より便利ですよね。

エクセルのマクロを使えば、共有フォルダに新しいファイルが保存されたら自動で通知を出せます。

今回は、「フォルダにファイルが保存されたら自動通知してくれるマクロを作る方法」を紹介します。

フォルダにファイルが保存されたら自動通知してくれるマクロを作る方法

フォルダにファイルが保存されたら自動通知してくれるマクロを作る方法です。

Aフォルダに新しいファイルが保存されたら、下の画像のようなメッセージが出る方法で紹介します。

マクロを作るときは、「開発」タブを使います。
開発タブが出ていない方は、下のリンクで出し方を紹介していますので、まずは準備をお願いします。
→エクセルで開発タブを表示する方法

1.「開発」タブをクリック →「挿入」をクリック →「ボタン」をクリック

2.「新規作成」をクリック

3.コード入力画面が開く

4.コードを入力

コードを入力します。

5.ボタンができた →ボタンを押す

ボタンができたら、ボタンを押しましょう。

6.ファイルが追加されたら通知が出た

ボタンを押して、Aファイルにファイルを追加します。

少し待つと・・・通知が出ました!

これなら、「保存した?」→「保存しました!」のやり取りがなくなって、いちいち聞かなくてよくなりますね!

A,B,Cフォルダのように複数フォルダをチェックする方法

チェックしたいフォルダは、1つとは限りませんよね?

A、B、Cフォルダなど複数のフォルダをチェックしたいこともあります。

次は、A、B、Cフォルダにファイルが入ったら通知してくれるようにしてみます。

そんなときは、下のようにコードを入れてみて下さい。

コードを入れたら、B,Cフォルダにファイルを入れて確認してみます。

ファイルを入れたら、先程と同様に、ボタンを押して下さい。

少し待つと・・・通知が出ました!

実際には、Bフォルダの通知が出た後に、Cフォルダの通知が出る・・・というように、順番に通知が出ます。

これで、複数フォルダをチェックするのも簡単ですね!

まとめ

フォルダにファイルが保存されたら自動通知してくれるマクロを作る方法です。

1.「開発」タブをクリック →「挿入」をクリック →「ボタン」をクリック

2.新規作成をクリック

3.コードを入れる画面が出る

4.コードを入力

5.ボタンができた →ボタンを押す

6.ファイルが追加されたら通知が出た

これでフォルダの保存をしたか、聞く方も、聞かれる方も、面倒がなくなりましたね!

最後に、紹介した赤枠部のコードです。

Option Explicit

Const WatchFolder As String = "C:\Users\*****\Desktop\A"
Dim LastFileCount As Integer

Sub ボタン1_Click()
    ' 初回ファイル数を取得
    LastFileCount = GetFileCount()
    
    ' 定期的にチェック
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolder"
End Sub

Sub CheckFolder()
    Dim CurrentFileCount As Integer
    CurrentFileCount = GetFileCount()
    
    If CurrentFileCount > LastFileCount Then
        MsgBox "Aフォルダに新しいファイルが追加されました!", vbInformation
    End If
    
    ' 最新のファイル数を記録
    LastFileCount = CurrentFileCount
    
    ' 再実行
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolder"
End Sub

Function GetFileCount() As Integer
    Dim FileName As String
    Dim Count As Integer
    
    FileName = Dir(WatchFolder & "\*.*") ' フォルダ内のファイルを取得
    Count = 0
    
    Do While FileName <> ""
        Count = Count + 1
        FileName = Dir()
    Loop
    
    GetFileCount = Count
End Function

Sub StopMonitoring()
    ' 監視を停止
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolder", , False
    On Error GoTo 0
End Sub

※*****のところは、適切なパスを入れて下さい。

こちらは、複数フォルダ対応版です。

Option Explicit

' 監視するフォルダのパスを定数で定義
Const FolderA As String = "C:\Users\*****\Desktop\A"
Const FolderB As String = "C:\Users\*****\Desktop\B"
Const FolderC As String = "C:\Users\*****\Desktop\C"

' 各フォルダのファイル数を保持する変数
Dim LastCountA As Integer
Dim LastCountB As Integer
Dim LastCountC As Integer

' 開始ボタン(初回のみ手動で実行)
Sub ボタン1_Click()
    ' 初期ファイル数を取得
    LastCountA = GetFileCount(FolderA)
    LastCountB = GetFileCount(FolderB)
    LastCountC = GetFileCount(FolderC)
    
    ' 監視を開始(10秒後に最初のチェック)
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolders"
End Sub

' 各フォルダをチェック
Sub CheckFolders()
    Dim CurrentA As Integer, CurrentB As Integer, CurrentC As Integer

    ' 各フォルダの現在のファイル数を取得
    CurrentA = GetFileCount(FolderA)
    CurrentB = GetFileCount(FolderB)
    CurrentC = GetFileCount(FolderC)

    ' フォルダAに追加があった場合
    If CurrentA > LastCountA Then
        MsgBox "Aフォルダに新しいファイルが追加されました!", vbInformation
    End If

    ' フォルダBに追加があった場合
    If CurrentB > LastCountB Then
        MsgBox "Bフォルダに新しいファイルが追加されました!", vbInformation
    End If

    ' フォルダCに追加があった場合
    If CurrentC > LastCountC Then
        MsgBox "Cフォルダに新しいファイルが追加されました!", vbInformation
    End If

    ' 最新のカウントを記録
    LastCountA = CurrentA
    LastCountB = CurrentB
    LastCountC = CurrentC

    ' 次回のチェックをスケジュール(10秒後)
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolders"
End Sub

' フォルダ内のファイル数をカウントする関数
Function GetFileCount(ByVal FolderPath As String) As Integer
    Dim FileName As String
    Dim Count As Integer
    FileName = Dir(FolderPath & "\*.*")
    Count = 0
    Do While FileName <> ""
        Count = Count + 1
        FileName = Dir()
    Loop
    GetFileCount = Count
End Function

' 監視を止める処理(手動で実行)
Sub StopMonitoring()
    On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:10"), "CheckFolders", , False
    On Error GoTo 0
End Sub

※*****のところは、適切なパスを入れて下さい。

フォルダにファイルが保存されたらメールで通知してくれても助かりますよね?

やり方を下のリンク先で紹介していますので、参考にしてみて下さい!

→フォルダにファイルが保存されたらメールで自動通知してくれるマクロを作る方法

コメント

  1. 匿名 より:

    Aフォルダだけでなく、Bフォルダ、Cフォルダの通知も同時に取得可能な方法はございますでしょうか?

    • You より:

      後半に、Aフォルダ、Bフォルダ、Cフォルダの通知もできるようなコードを追加してみました。ご参考下さい。

タイトルとURLをコピーしました