プログラミングの勉強 その7 ファイルを作る

年収アップの方法

 

あなたが視聴率を出す会社の社員だとして、各テレビ局向けの視聴率データを作るシチュエーションを例にします。

 

元になるデータから各テレビ局のデータを抜き出し、一つずつエクセルファイルを作っていきます。

今回の例では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

がアクティブ(前面に出る)になります。

 

大量のファイルを自動で作る意味

 

 

この図の赤い人のポジションを見てください。

 

こういう要所を抑える事で必要とされる人材として評価されて、年収が上がっていきます。

このポジションの人は、自分が偉いと思ってダラダラと仕事をしていたりします。

 

手作業でゆっくりファイルを作って、

『大変な仕事だ』

と他の人にアピールして、恩着せがましく仕事をします。

 

この上流のポジションの人が遅くてボトルネック(詰まる場所)になっていると、下流の多くの人の仕事に影響が及びます。

 

だから自動化できる人がこのポジションを取ってしまいます。

 

ポジションを取った後は

 

わたしがこういったポジションを取った時は、下流にいる人の都合に合わせて仕事をしていました。

 

各自が朝一からフルで動けるよう、わたしは彼らの段取り係のように働きました。

その結果、各自が有効に動いてくれた利益がわたしにもたらされました。

 

プログラミングで重要なのは、画面の外にある状況を織り込む事です。

 

 

システム設計(難しくないです)についても書きました!

システム設計の考え方【その1 観察が重要】
普通の社会人が接するシステム設計は、NASAのロケット軌道予測プログラムみたいなものではなくもっと身近なものです。 なので人の顔色をうかがうとか、じっくり考える内向的な人でも稼ぎやすい分野です。 設計で一番最初に...