2021年4月24日 本日の鹿児島県北西部は快晴。

お客様から頼まれてちょっと思考錯誤・・・そんな土曜日。

無題


依頼
「一日60件程の取引データのエクセルファイルが月別に格納されているフォルダが5年分あって、全てのファイルに自社の署名を入れたいのだけど、一つ一つ開いてコピー&ペーストしていたら日が暮れるので、何か良い方法があれば提案しては貰えませんか?」との依頼でしたので、2時間ほど試行錯誤していました・・現在自営はしていないので、今度焼肉を奢ってもらうということで引き受けましたw。

答え
エクセルなので当然解決策はマクロを書く位しかないので、マクロを書いていました。同じようなニーズは結構あると思うので、途中段階のものですがシェアしておきます。マクロを記述してあるブックの任意のセル範囲(ここでは1~6行)を同じフォルダにある他の全ての「*.xlsx」ファイルの1~6行にコピーしていくマクロです。フォルダ内の全てのファイルが書き換わったら終了します。バージョンによっては、このマクロで範囲内の画像もコピー&ペーストできるかもしれませんが、2013バージョンでは画像はコピーできませんでした・・・

コード
 Sub 指定した範囲のセルのコピー()
    Dim Myfile As String, Filepath As String
    Filepath = ThisWorkbook.Path & "\"
    Myfile = Dir(Filepath & "*.xls?")
    Application.ScreenUpdating = False
    Do While Myfile <> ""
        If Not Myfile = ThisWorkbook.Name Then
            With Workbooks.Open(Filename:=Filepath & Myfile)
             ThisWorkbook.Worksheets(1).Range("1:6").Copy
                .Worksheets(1).Range("1:6").PasteSpecial
                .Save
                .Close
            End With
        End If
        Myfile = Dir()
    Loop
    Application.ScreenUpdating = True
    MsgBox "処理完了"
End Sub

雑感

マクロも長く使わないと忘れてしまいますね。でも「こんなの確かできたよなぁ」という想い出は検索に役に立ちます。記憶を辿りつつ、ネットの情報を拾いながら2時間程かかりました・・現役のプロなら30分程度でできないといけない内容ですねw。でも、ちょうど焼肉代として良い感じの時間でした。マクロってコード集なども沢山出回っているのですが、いざシンプルな作業をしようとすると意外と目的のものが見つからなかったりするので、結局手作業に甘んじる人って多いんですよね。今回の「任意のセルを他の全てのファイルにコピーする」というのも最初はそのものずばりのコードをコード集から探しましたが見つかりませんでしたので作りました。エクセルで使われるマクロとはVBAと呼ばれる言語で書かれるコードなのですが、結構面白いですので、プログラム学習のとっかかりとしては良いかもしれません。ただ、現在主流のPythonとかに流用できるようなものは何もないので、プログラマになりたいのでしたら、最初からPythonなどをお勧め致します。youtubeなどでも非常にクオリティの高い講座が沢山ありますので、この週末にプログラミングなんていかかでしょうか! それでは素敵な週末をお過ごし下さい。