あなたが視聴率を出す会社の社員だとして、各テレビ局向けの視聴率データを作るシチュエーションを例にします。
元になるデータから各テレビ局のデータを抜き出し、一つずつエクセルファイルを作っていきます。
今回の例では6つのテレビ局用のファイルを作りますが、これを手作業でやれば6局分の手間と時間が必要です。
ですが自動化すれば、100局だろうがあなたの手間は変わりません。
こういう仕事の作り方が、あなたの年収を上げていきます。
このページから見始めた方
いきなりだとわからないと思うので、本ページ下部にこれまでの勉強ページのリンクがあります。
エクセルがあれば動かせて、プログラムの動作が見られるVBAで勉強する方法が載っています。
プログラムはまず動かして馴染む事が重要です。
なるべく簡単に書いているので、よければ最初から読んでみてください。
ファイルを自動で作るソース
まずはコピペ用のソースです。
’ ← コピーしてシングルコーテーションが赤くなってしまったら、’を打ち直すか行を削除してください。コメントなのでプログラムの実行には関係ない行です。
Dim fpath As String
Dim fname As String
Dim imarow As Long
‘1
fpath = ActiveWorkbook.Path & “\” & “格納場所”
Sheets(“元データ”).Select
endrow = Cells(Rows.Count, 1).End(xlUp).Row
For imarow = 2 To endrow
‘2
Range(Cells(imarow, 1), Cells(imarow, 3)).Select
Selection.Copy
Sheets(“編集”).Select
Cells(2, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Excel.Application.CutCopyMode = False
‘3
Cells.Select
Selection.Copy
Workbooks.Add
Cells(1, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Excel.Application.CutCopyMode = False
‘4
fname = Cells(2, 1).Value & “-” & Cells(2, 2).Value
‘5
ActiveWorkbook.SaveAs Filename:= _
fpath & “\” & fname, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Saved = True
‘6
ActiveWindow.Close
Sheets(“元データ”).Select
Next imarow
そして新しいフォルダを一つ作成し、そこに
ファイル作成機.xlsm
というエクセルファイルと更にもう一つ『格納場所』というフォルダを作ります。
ファイル作成機.xlsmのシート
ファイル作成機.xlsmに
元データ
と
編集
というシートを作って、『元データ』のシートに以下をコピペが手入力してください。
チャンネル | 放送局 | 視聴率 |
1 | NHK | 2% |
4 | 日本テレビ | 12% |
5 | テレビ朝日 | 9% |
6 | TBS | 8% |
7 | テレビ東京 | 13% |
8 | フジテレビ | 6% |
準備は以上です。
ファイルを自動作成する流れ
プログラムの内容説明の前に、実行したらどうなるのか流れを説明します。
イメージが出来なくても、プログラムを動かせばわかるので大丈夫です。
それではプログラムを実行したらどう動くのか、流れを説明します。
元データに入っている各社の視聴率を、1社分ずつ一旦、編集というシートにコピペします。
そして自動で新規エクセルを立ち上げて、シート『編集』から新規で起ち上げたエクセルのシートにコピペをし、名前を付けて保存します。
一度、シート『編集』に転機する意味
今回は単純なデータですが、実際の仕事では各社ごとに何かの計算が必要かもしれません。
そういう時に『編集』というシートに転機して、そこで計算させるとわかりやすいです。
もっとスマートなプログラムは沢山ありますが、わたしは途中で確認しやすい方法をとります。
ソースプログラムの書き方を品評されたらわたしは下位ですが、わたしは実務ですぐに使える道具を作り出して稼ぎました。
その経験からすると、途中の動きがエクセルシート上で確認できるもののほうが、実戦で使えます。
チームでプログラムを作る人は、スマートな書き方の方がいいと思います。
実行結果
『格納場所』フォルダの中に
こんな風に各社のフィルが出来上がります。
プログラムの説明
ソースに ‘ と数字(例えば ‘1)となっている箇所の説明をしていきます。
‘1
fpath = ActiveWorkbook.Path & “\” & “格納場所”
fpath というのは、各局ごとに作ったファイルをどこに保存するのかというパス(住所みたいなもの)です。
ActiveWorkbook.Path というのは、
ファイル作成機.xlsm
が入っているフォルダのパスを教えてくれる命令文です。
“\”は フォルダの区切りです。
& は文字列を接続するためのものです。
これで、
ファイル作成機.xlsm
のファイルと一緒のフォルダに入っている、格納場所というフォルダのパスができました。
皆さんの環境によって違いますが、デバッグで見ると
C:\新しいフォルダー\格納場所
こんな風になっています。
‘2 シート編集にコピぺ
Range(Cells(imarow, 1), Cells(imarow, 3)).Select
でコピー元の範囲を指定しています。
for文は2行目のセルからスタートさせているので、最初のコピー元の範囲は
Cells(2,1),Cells(2,3)
という事になります。
次にペースト先を指定します。
Sheets(“編集”).Select
Cells(2, 1).Select
ペースト先のシート『編集』を選択して、ペーストするセルの起点を指定(選択)しています。
ActiveSheet.Paste
Application.CutCopyMode = False
Excel.Application.CutCopyMode = False
この部分は、『マクロの記録』で動作を記録しただけなので、暗記不要です。
ペーストをする命令文です。
‘3 新規のエクセルを立ち上げてコピペ
この部分は、ペースト位置である
Cells(1, 1).Select
の指定以外は、全てマクロを記録しただけです。
デバッグで一行ずつ動作を追えば、どの命令文が何をしているのかがわかるでしょう。
例えば
Workbooks.Add
は、新規のエクセルを起ち上げています。
Application.CutCopyMode = False
はコピーでセルの枠がチカチカした状態を解除するものでしょう。
この辺りは別に深追いする必要がない所です。
‘4 ファイル名をつける
fname = Cells(2, 1).Value & “-” & Cells(2, 2).Value
で、各局ごとのファイル名をつけています。
Cells(2, 1).Value
のチャンネルと
Cells(2, 2).Value
の放送局の間に - を入れたものをファイル名にしています。
この例なら
1-NHK
です。
‘5 保存する
各局ごとのエクセルを保存します。
ここも基本的にマクロの記録から持ってきた部分です。
ActiveWorkbook.SaveAs Filename:= _
って、SaveAsと書いてあるので、何となく保存するのかなとわかりますよね。
概ねマクロの記録そのままですが、この部分は
fpath & “\” & fname, FileFormat:=
fpath と fname に書き換えています。
マクロの記録をそのまま使うとパスは固定(決まった場所)で、わたしがデスクトップにフォルダを作っていたら、皆さんもデスクトップにフォルダを作らないと動きません。
だからActiveWorkbook.Pathを使ってパス取得してfpathに入れて、どこにフォルダを作っても動くようにしています。
_ の意味
‘5
ActiveWorkbook.SaveAs Filename:= _
fpath & “\” & fname, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
右端の _ の意味は、長くなるので下の行に続くという意味です。
この _ なしで改行してしまうと、命令文が分断されてしまいます。
‘6 ウィンドウを閉じる
ActiveWindow.Close
で、新規で起ち上げて名前を付けたエクセルファイルを閉じます。
閉じると自動的に
ファイル作成機.xlsm
がアクティブ(前面に出る)になります。
大量のファイルを自動で作る意味
この図の赤い人のポジションを見てください。
こういう要所を抑える事で必要とされる人材として評価されて、年収が上がっていきます。
このポジションの人は、自分が偉いと思ってダラダラと仕事をしていたりします。
手作業でゆっくりファイルを作って、
『大変な仕事だ』
と他の人にアピールして、恩着せがましく仕事をします。
この上流のポジションの人が遅くてボトルネック(詰まる場所)になっていると、下流の多くの人の仕事に影響が及びます。
だから自動化できる人がこのポジションを取ってしまいます。
ポジションを取った後は
わたしがこういったポジションを取った時は、下流にいる人の都合に合わせて仕事をしていました。
各自が朝一からフルで動けるよう、わたしは彼らの段取り係のように働きました。
その結果、各自が有効に動いてくれた利益がわたしにもたらされました。
プログラミングで重要なのは、画面の外にある状況を織り込む事です。
システム設計(難しくないです)についても書きました!