事務作業をやっていると、このような悩みを持ってことはないでしょうか?
・同じファイルを毎回手動でコピーしており、膨大な時間がかかっている
・手作業でファイルコピーするため、ミスが起こりやすい
・手動でバックアップをとっており、手間がかかっている
毎月同じファイルをコピーする機会って、何気に多いですよね。
しかもそれを手作業するのって憂鬱ですよね。。。私も本当に困っておりました。
でも、もう大丈夫!
この記事では、このような毎月のルーティン作業をグッと減らせるテクニックを紹介します!
「毎回手作業がしんどい。。。」と感じている方!
ぜひ一度目を通していただけると嬉しいです!
ファイルを一気にコピー・リネームできると、何が便利なの?
ファイルを一気にコピー・リネームできると、様々なメリットがあります!
例えば、
・ルーティン作業が効率化できて便利!
・ヒューマンエラーの防止につながる!
・ファイルのバックアップが簡単にとれる!
などが挙げられます。
ルーティン作業が効率化できて便利!
毎月同じファイルを複数コピーしないといけないとき、手作業でコピーするのって大変ですよね。。
例えば、日報みたいな「1日~31日」の日付分のファイルを作成したり、「支店①、支店②・・・」みたいに各拠点分をファイルを作成したり、、
そんなときに、いちいち手作業でコピー&リネームしなくても、一気に自動作成することができるので、とても便利です!
ヒューマンエラーの防止につながる!
手作業でファイルをコピーしていくとき、「文字の打ち間違い」や、「ファイルコピー漏れ」などミスが発生しがちです。ファイル数が多いと、気づいたとき絶望しますよね。。
手作業でやる限り、ミスが発生するのはしょうがないことだと思います。
自動化することはそのリスクを減らすことができるので、効率化もぐんと上がります!
ファイルのバックアップが簡単にできる!
ファイルを誤って削除したり、破損したときに備えて、ファイルのバックアップを定期的にとるケースはあると思います。
そのときにいちいちフォルダを見に行き、ファイルを選択して、バックアップフォルダにコピーする・・・手作業でやると面倒ですよね。。
そんなバックアップ作業も自動化できます!
バックアップ日別にファイルをコピーすることだって可能です!
ファイルを一気にコピー・リネームするには?
今まで手作業でやっていたことが、自動化できるとなるとワクワクしますよね!
では実際にどうすればいいか、順番に紹介していきます。
コマンドプロンプトを活用する方法
コマンドプロンプトは、Windowsに標準装備されているツールです。
以下のように真っ黒な画面のやつですね。
文字で命令を書いて、実行する操作ツールになります。


バッチファイルを活用する方法
バッチファイルは、拡張子が「.bat」となっているファイルです。
(エクセルだと、「.xlsx」というやつですね)
下のように、歯車みたいな見た目のファイルです。
「え、何か難しそう・・・」って思いますよね。実はこれ、メモ帳で作成できるのです!

バッチファイルは、
・毎回命令を記述する必要がない
・タスクスケジューラと組み合わせて、定期的な作業を自動化する
ときなどに便利なツールとなります。
PowerShellを活用する方法
PowerShellも、Windowsに標準装備されているツールです。
見た目はコマンドプロンプトに似ていて、こちらも真っ黒な画面です。


コマンドプロンプトより高度な処理が可能です。
コマンドプロンプトの進化版みたいな感じだと思ってください。
ファイルをコピーするには?
簡単なファイルコピーであれば、コマンドプロンプトを活用すると便利だと思います。
今回は「日報」というエクセルファイルを日付分コピーすることをゴールとし、そのやり方・流れを説明していきます!
コマンドプロンプトでファイルをコピーするには、「Copy」コマンドを使用します。
コマンドプロンプトでファイルコピーする方法
copy コピーするファイル コピー後のファイル
copyと記述することで、対象ファイルをコピーすることができます。
注意点としては、
・「copy」、「コピーするファイル」、「コピー後のファイル」それぞれの間には半角スペースを入力
・「コピーするファイル」、「コピー後のファイル」にはそれぞれ拡張子を記載する
(エクセルファイルであれば「.xlsx」など)
などがあります。
コマンドプロンプトでファイルコピーすることはできますが、毎回手作業で記述するのは面倒なので、エクセルと組み合わせする方法を紹介します。
エクセルを使ってコマンド記述を効率的に!
ただコマンドプロンプトに記述する文を一つずつ書いていたら面倒ですよね。
少しでも楽するために、自分なりに考えた結果、エクセルを使ったら楽になるのでは?と思い、試してみました。
今回は、Cドライブの直下に「テスト」というフォルダを作成し、そのフォルダに格納している「日報」エクセルファイルをコピーしていきます。
「日報」というエクセルファイルを、1月1日~10日分でコピーする場合、以下のように記述します。
順番に解説していきたいと思います。

・A列:B列~I列に記載している文字列を結合したもの(コマンドプロンプトに貼る部分)
※今回はCONCATENATE関数を使用しました。(文字列を結合する関数)

・B列:使用するコマンドを記載
※今回はファイルコピーのため、「copy」コマンドを記載
・C、E列:半角スペースを入力
※見えにくいですが、下の画像の通り、半角スペースを入力しています。

・D列:「コピーするファイル」を記載
※拡張子を含むフルパスを入力しています。
・F~I列:「コピー後のファイル」を記載
※コピーするファイルの名前に、日付を追加しています。
※F~I列の解説について
→今回はコピー元ファイルを1日~10日分コピーするため、H列に1月○日の記載を追加しました。
→G列のアンダーバーはなくてもOKです!ファイル名を見やすくするため、今回は記載しました。
→拡張子を記載しないと正しくファイルコピーができないため、I列に拡張子を記載しています。
F列の「コピー後のファイル1」には拡張子を記載せず、リネーム後のファイル名の後に拡張子を記述することにご注意ください。
作成したコマンドを、コマンドプロンプトに貼付
コマンドができたら、あとはコマンドプロンプトに貼るだけです!
エクセルのA列をコマンドプロンプトにコピー&ペーストすると、下の画像のように「ファイルをコピーしました」と表示されたら成功です!
では実際に、ファイルがコピーされているか確認しましょう。

こちらがコマンドを実行した結果です。
ちゃんと指定したファイルが作成されていますね!

今回は「日報」エクセルファイルをコピーしたため、日付がついているファイルは全て、「日報」エクセルファイルと同じ中身になります。
今回は日付でファイル名をコピーしましたが、日付を社員名や支店名などに変更することも可能です!
ぜひアレンジして、活用してみてください!
<応用>エクセルVBAでコマンドプロンプトに貼付する方法
エクセルで作成した数式を起動したコマンドプロンプトに貼ればOKなのですが、それすら自動化できないかな~と思い、色々模索していました。できるだけ手作業減らしたいですよね!
自動でコマンドプロンプトに貼ってくれる、エクセルVBAコードを作りました!
こちらを使えば、わざわざコマンドプロンプトを開かなくてもファイルコピーできました!(コピーファイルが多い場合、一度動作検証されてから使用されてください)
Sub コマンドプロンプトに一気に貼付()
Dim shell As Object
Dim lastRow As Integer
Dim i As Integer
Dim cmd As String
Dim allCommands As String
Dim ws As Worksheet
'対象のシートを選択(「シート名」部分を変えてください)
Set ws = ThisWorkbook.Worksheets("シート名")
' Shellオブジェクトの作成
Set shell = CreateObject("WScript.Shell")
' A列の最終行を取得(コマンドプロンプトに貼付する数式がA列にあるため)
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
' コマンドを順番に一つの文字列に連結
allCommands = ""
For i = 2 To lastRow '2行目から貼付したい数式があるため、2行目~最終行で指定
cmd = ws.Cells(i, 1).Value
If cmd <> "" Then
If allCommands <> "" Then
allCommands = allCommands & " & " & cmd ' 前のコマンドと次のコマンドを繋げる
Else
allCommands = cmd ' 最初のコマンドはそのまま追加
End If
End If
Next i
' 連結したコマンドを実行
If allCommands <> "" Then
shell.Run "cmd.exe /c " & allCommands
End If
' オブジェクトの解放
Set shell = Nothing
Set ws = Nothing
End Sub
ファイル名を変更するには?
ファイルを作成した後、ファイル名を間違えたので変えたい!というケースがあると思います。
ただコピーした後だと、また作り直すのは面倒ですよね。。ましてや既にファイルが編集されている場合などは作り直すわけにもいかず。。
そんなときは、ファイル名を一括で変更する方法が役に立ちます!
今回はコマンドプロンプトで実施する場合(バッチファイル)と、PowerShellで実施する場合の2パターンを紹介します!
今回は、「1月」ではなく「3月」であった場合で、ファイル名の「1月」を「3月」に変更する場合ということで紹介します!
バッチファイルでファイル名を一括変更する場合
コマンドプロンプトでファイル名の一部を変更する場合、バッチファイルを使用して変更します。
まずはバッチファイルの作り方から紹介します!
・メモ帳を開く
(メモ帳からバッチファイルを作成していきます)

・メモ帳にコマンドを入力する
入力するコマンドは、以下内容を使用します。
※ファイルが格納されている場所に合わせ、パス名を適宜変更してください。
@echo off
setlocal EnableDelayedExpansion
cd /d "C:\Users\%USERNAME%\Desktop\テスト"
for %%f in (*1月*.xlsx) do (
set "oldname=%%f"
call set "newname=%%oldname:1月=3月%%"
echo ren "%%f" "!newname!"
ren "%%f" "!newname!"
)
pause
※少し難しいですが、バッチファイルの中身を補足します。
・setlocal EnableDelayedExpansion
→setlocal:バッチファイルで環境変数のローカライズを実施
(変数の変更が外に影響しないようにする)
→EnabledelayedExpansion:遅延展開を有効にする
(変数がリアルタイムで変更できるようにする)
今回フォルダの中にある複数ファイルを一括でリネームするコマンドを作成しました。
そのため、「newname」という変数が、ループ毎に変わる必要があります。それをリアルタイムで変更の変更を使うために、「sellocal EnableDelayedExpansion」というコマンドを使用しました。
・「名前を付けて保存」する

「名前を付けて保存」するまでは普通の流れですが、バッチファイルとして保存するとき、次の点に注意が必要です!
・ファイル名の後ろに、「.bat」とつける(バッチファイルの拡張子です)
・「ファイルの種類」を、「すべてのファイル」に変更(バッチファイルとして保存するため)
・「エンコード」を「ANSI」に設定(文字化けを防ぐため)

すると、下のようにバッチファイルが作成されました!
このバッチファイルは、ダブルクリックもしくは右クリックで実行することができます。

保存したバッチファイルを実行すると、ファイル名の「1月」が、すべて「3月」に変わりました!

PowerShellでファイル名を一括変更する場合
PowerShellでファイル名を一部変更する場合、以下の手順で進めていきます。
・変更したいファイルが入っているフォルダのアドレスバーをクリックする

・アドレスバーに「powershell」と入力し、Enterを押す

すると、以下のようなファイルが入っているフォルダを表示したPowerShell画面が表示されます。

・PowerShell画面に、以下コマンドを貼付してEnterを押す
Get-ChildItem -Filter "*1月*.xlsx" | Rename-Item -NewName { $_.Name -replace "1月", "3月" }

すると、ファイル名にあった1月が、すべて3月に書き換えられました!

ファイルのバックアップをとるには?
ファイルが削除されたり、破損したときに備えて、ファイルのバックアップを定期的にとっておきたいケースもあるかと思います。
ただ毎回毎回フォルダを見に行き、ファイルを選択して、バックアップフォルダにコピーする、、という作業を手動で行うのは面倒ですよね。
安心してください!その作業、自動化できます!
今回はバッチファイルで、「同じフォルダにバックアップをとる方法」と「日別にバックアップする方法」を紹介します。
同じフォルダにバックアップをとる方法
今回はデスクトップの「テスト」フォルダにある全ファイルを、「バックアップ」フォルダにコピーしていきます。

ちなみにそれぞれのフォルダ内はこのようになっています。

バッチファイルの作り方については、「バッチファイルでファイル名を一括変更する場合」で紹介していますので、ご参照ください。
下のように記述し、バッチファイルとして保存します。
※xcopy部分のフォルダパスは、適宜使用されるパスに変更して使用してください。
@echo off
echo バックアップを開始します…
xcopy "C:\Users\%USERNAME%\Desktop\テスト\*" "C:\Users\%USERNAME%\Desktop\バックアップ" /s /i /y
echo バックアップが完了しました。
pause
作成したバッチファイルを実行すると、バックアップフォルダに全ファイルをコピーすることができました!

最新のファイルのみバックアップがとれればいいということであれば、この方法で問題ないと思います。
日別にバックアップをとる方法
今度はデスクトップの「バックアップ」フォルダに、バックアップ日ごとにフォルダを作成し、ファイルをコピーする方法を紹介します。
同じようにバッチファイルを作成します。
下のように記述し、バッチファイルとして保存します。
※コピー元とコピー先は、適宜使用されるパスに変更して使用してください。
@echo off
:: 今日の日付を yyyy-mm-dd 形式で取得
set "TODAY=%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%"
:: コピー元とコピー先を指定
set "SOURCE=C:\Users\%USERNAME%\Desktop\テスト"
set "BACKUP=C:\Users\%USERNAME%\Desktop\バックアップ\%TODAY%"
echo バックアップを開始します…
:: フォルダ作成(なければ作る)
mkdir "%BACKUP%" 2>nul
:: ファイルをコピー
xcopy "%SOURCE%\*" "%BACKUP%\" /s /i /y
echo バックアップが完了しました。保存先: %BACKUP%
pause
こちらのバッチファイルを実行すると、下のようにバックアップ日のフォルダが作成されました!

フォルダの中身を確認してみると、しっかりバックアップをとることができていました!

このバッチファイルをタスクスケジューラと組み合わせると、例えば自動で「毎日ファイルをコピーする」ような便利な活用も可能です!
まとめ:ファイルコピー・リネームが自動化できる、業務が劇的に効率化できる!
今回は、自動でファイルをコピー・リネームする方法を紹介しました。
手作業でやっていたことが自動化できると、業務が劇的に効率化できます!
ぜひ活用して、ともに業務効率化の道を歩みましょう!
最後まで読んでいただき、ありがとうございました!!
コメント