【効率化】同じファイルを簡単・一気にコピーする方法(エクセル、テキストなど)

Excel

中身は同じファイルだけど、担当者別や日付別など複数ファイルを作らないといけないとき、いちいちコピー&ファイルリネームを一つずつするのは面倒ですよね。

効率化できないものか、、と色々調べてみましたが、以下方法だと多少効率化できたので紹介します。ルーティンの業務だと、毎回の作業が楽になると思います!便利な方法だと思うので、ぜひ活用してみください!

コマンドプロンプトとは?

今回使用するのはコマンドプロンプトというWindowsに標準装備されているアプリです。以下のように真っ黒な画面ですね。

コマンドプロンプト

コマンドプロンプトでファイルをコピーするには

コマンドプロンプトでファイルをコピーするには、以下の記述を行います。

copy コピーするファイル コピー後のファイル

copyと記述することで、対象ファイルをコピーすることができます。
注意点としては、
・「copy」、「コピーするファイル」、「コピー後のファイル」それぞれの間にはスペースをいれる
・「コピーするファイル」、「コピー後のファイル」にはそれぞれ拡張子を記載する(エクセルファイルであれば「xlsx」など)

などが挙げられます。

エクセルを使って記述を効率的に

ただコマンドプロンプトに記述する文を一つずつ書いていたら面倒ですよね。少しでも楽するために、エクセルを使用してみました。

今回はサンプルとして、Cドライブの直下に「テスト」というフォルダを作成し、そのフォルダに格納している「日報」エクセルファイルを数日分コピーしてみたいと思います。
「日報」というエクセルファイルを、1月1日~10日分でコピーする場合、以下のように記述しました。
順番に解説していきたいと思います。

コマンドプロンプトに記載するエクセル記述

・A列:B列~I列に記載している文字列を結合したもの、今回はconcatenate関数を使用しています。こちらで結合した文字列を、コマンドプロンプトに貼付します!
・B列:使用するコマンドを記載しています(今回はファイルコピーのため、「copy」コマンドを記載)
・C、E列:表面上は見えませんが、スペースを入力しています。
・D列:「コピーするファイル」を記載しています。(今回はサンプルのため、使用する際には実際のファイルパスとファイル名、拡張子を記載してください)
・F~I列:「コピー後のファイル」を記載しています。

※concatenate関数とは?
 →2つ以上のセル内の文字列を結合させることができる数式です。「&」を使用して文字列を結合しても結果は同じですが、今回は結合させる文字列が多いため、より簡単に結合できるconcatenate関数を使用しました。

※F~I列の解説について
 →今回はコピー元ファイルを1日~10日分コピーするため、H列に1月○日の記載を追加しました。
 →G列のアンダーバーはなくても大丈夫ですが、ファイル名を見やすくするため、今回は記載しました。
 →拡張子を記載しないと正しくファイルコピーができないため、I列に拡張子を記載しています。F列の「コピー後のファイル1」には拡張子を記載せず、リネーム後のファイル名の後に拡張子を記述することにご注意ください。

エクセルを使い、一括でコピーファイルを作成!

ここまでできたらあともう一歩!EXCELの記述内容をコマンドプロンプトにコピー&ペーストで完了です。
上記エクセルのセルA2~A11をコピーし、コマンドプロンプトにペーストすると、以下のような画面になり、ファイルがコピーされます。

コマンドプロンプトで実行した後の画面

こちらがコピー&ペーストした結果です。ちゃんと指定したファイルが作成されていますね。

コマンドプロンプトで実行した後のエクセルファイルコピー結果

今回は「日報」エクセルファイルをコピーしたため、日付がついているファイルは全て、「日報」エクセルファイルと同じ中身になります。

今回は日付でファイル名をコピーしましたが、日付を社員名や支店名などに変更することも可能です。
実際は使用するファイルパスとファイルに合わせ、カスタマイズしてみください!

<追記>エクセルVBAでコマンドプロンプトに貼付する方法

エクセルで作成した数式を起動したコマンドプロンプトに貼ればいいだけなのですが、それすら自動化できないかな~と思い、色々模索。(ただの面倒くさがり)エクセルで実行できる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

いかがだったでしょうか。ルーティンでやる内容だったら、少しでも効率化していきたいですよね。今回の内容が少しでも参考になれば幸いです。

コメント

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