エクセルVBAでフォルダ内のファイル名をランダムな名前にリネームするボタンを作る方法

エクセル

あなたはフォルダ内のファイル名をランダムなファイル名にリネームしたいと思ったことはありませんか?

例えばですが、個人情報をそのままファイル名にすると、うまくないことがありますよね。

「山田太郎_○○銀行_普通_12345678_暗証番号9876」みたいな。

でも1ファイルずつランダムな名前を考えてリネームするなんて面倒です。

そんなときはエクセルVBAでランダムな名前に自動でリネームすれば簡単にできます。

今回は「エクセルVBAでフォルダ内のファイル名をランダムな名前にリネームするボタンを作る方法」を紹介します。

エクセルVBAでフォルダ内のファイル名をランダムな名前にリネームするボタンを作る方法

エクセルVBAでフォルダ内のファイル名をランダムな名前にリネームするボタンを作る方法です。

こんな感じでリネームしてみます。

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

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

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

4.コードを入力

コードを入力します。

ランダムフォルダ内のファイル名をランダムにリネームする、という内容です。

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

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

6.リネームできた

ファイル名がリネームされ、「リネーム完了しました」と出ます。

フォルダを見ると、ちゃんとリネームされてました。

ファイル名の変換は、エクセルでもワードでも大丈夫です。

まとめ

エクセルVBAでフォルダ内のファイル名をランダムな名前にリネームするボタンを作る方法です。

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

2.新規作成をクリック

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

4.コードを入力

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

6.リネームできた

これでフォルダ内のランダムリネームが簡単になりましたね!

最後に今回使ったコードです。

    Dim folderPath As String
    Dim fso As Object
    Dim fil As Object
    Dim fileExt As String
    Dim newName As String
    Dim idx As Long
    
    folderPath = Environ("USERPROFILE") & "\Desktop\ランダム\"
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Not fso.FolderExists(folderPath) Then
        MsgBox "フォルダが見つかりません: " & folderPath, vbExclamation
        Exit Sub
    End If
    
    Randomize
    idx = 0
    For Each fil In fso.GetFolder(folderPath).Files
        idx = idx + 1
        fileExt = fso.GetExtensionName(fil.Path)
        If fileExt <> "" Then fileExt = "." & fileExt
        
        newName = "File_" & "_" & Int((99999999 - 10000000 + 1) * Rnd + 10000000) & fileExt
        fil.Name = newName
        
        WaitMilliseconds 100  ' 100ミリ秒待つ(下に定義)
    Next fil
    
    MsgBox "リネーム完了しました。", vbInformation
End Sub

Private Sub WaitMilliseconds(ms As Long)
    Dim startT As Double, endT As Double
    startT = Timer
    endT = startT + ms / 1000#
    
    If endT < 86400 Then
        Do While Timer < endT
            DoEvents
        Loop
    Else
        ' 00:00 をまたぐ場合の処理
        Do While Timer >= startT Or Timer < (endT - 86400)
            DoEvents
        Loop
    End If

コメント

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