Excelで何かを作るテーマの教材で、ステップごとに完成例を作ってその都度保存して、万が一動作がおかしかったときは続きのファイルを開いてから実践すればいいですし、その部分だけ学習したい時も途中のファイルから操作できるようになっていると便利です。
そのカリキュラムを全て出来上がったところで、途中でもう少しこんな解説を入れたいなと思うこともしょっちゅうがあるのですが、そうなってくるとステップ元の完成例のファイルをその段階に戻って全て作り直さなければいけないということになります。
カリキュラムの変更ははじめに完璧なものを作ればいいのですがなかなかそういうことにもならなくて、後からこのように変更が発生するということは結構あるのです。
そんな時にやはりそのステップに戻ってそのステップから全て作業をやり直して保存し直していくというのもかなり面倒な話で、割と小さなカリキュラムでも30ファイルくらいになることもあって、一気に変換できる何かがあると便利だなと思うことはあります。
こういう時にこそ私がいつもお話している「簡単に作るマクロ」で対処すればいいのかなと思ったのです。
その変換する何かを作る時間があれば全部ファイルを作り直したほうが早いという時間よりも短い時間で作れるかどうか初めにある程度見積もらないと無駄な努力に終わってしまうかもしれません。だいたい手作業でした時間の半分の時間で作れればいいかなと思っています。
変換する何かのツールは新規ブックに作成していって、実際の完成例ファイルに対して外部からアクセスできるようにしていきます。
今回は使い捨てかもしれませんので、私はVBAに「Option Explicit」 を仕掛けているので、変数宣言は必須になっているのですが、使う変数を宣言する時間がもったいないくらいであれば宣言しなくてもいいなとすら思うレベルです。
基本的には、Dirでファイルを1個ずつ開き、その開いたファイルに対して「動き」をするループを考えて行くので、Dirを使ったループを使うのですが、それだとすべてのファイルに対して動作させることになってしまうので、私はコマンドプロンプトでそのディレクトリでDIRコマンドを打って、出力したものをExcelに貼り付けて区切り位置で処理してファイル一覧を作成して、そのうちの何行目から何行目までを処理するかのForループで指定しています。この場合は作成順にファイルが並んでいることが必要です。
そのループの中に書くのは、変換したいファイルのうち、ひとつのファイルを実際に操作した内容をマクロの記録で記録したマクロの名前です。このマクロの保存する場所も今回の変換する何かのツールに指定します(マクロを開始する時にこのツールのファイルから始めればOK)。
ただ、このやり方だとVBAの1行目に完成例ファイルを選択する、最終行にこのツールのファイルに戻るというステップが入るのでそれは削除しなければいけません。
このツールを完成例ファイルの入っているフォルダーに保存しておけば、次のようなコードで一気に変換することが可能です。
For i=[開始行] To [最終行] Workbooks.Open ThisWorkbook.Path & "\" & Cells(i, "F").Value Set ws = ActiveWorkbook Call [記録したマクロ名] For Each sh In ws.Sheets sh.Select sh.Range("A1").Select Next ws.Sheets(1).Select ws.Save ws.Close Next
全てのシートでセルA1を選んで、一番左側のシートを表示しておく状態で保存して閉じています。
実は私の場合はこれは使い捨てではなくて何度も使うことになるのですが、記録したマクロ名だけを入れ替えていけばその都度繰り返したくさんの完成例ファイルに対して変更がかかるので使いまわしています。
コメント