とかく、プログラマーって長時間労働で、いつでも忙しくて、
徹夜で働く、といったイメージがある(!?)かと思いますが、
当然ながら、プロの仕事には必ず期限というのがありますので、
要領よくプログラミングしないと納期に間に合わなくなるわけ
です。
前回に言いましたように、言語(VBA)なんて調べればいい
だけのものの理解には極力時間を使わない、基本、結果オーライ
でやっていく、それが忙しいプログラマーの鉄則になっています。
それは、何もプロのプログラマーだけに限りませんから、
業務の効率化をマクロ習得の目的とされている読者の皆さんは、
VBA言語の勉強は必要最小限に抑えるべきです。
とにかく、「マクロは賢く作るもの」でなければなしません。
作業効率を上げるためマクロ作りを、効率悪い作り方で作って
いるようでは、本末転倒そのものですから。
解法(ロジック)なし、言語(VBA)ありきでは、
決してプログラムを組めるようにはならないですし、
第一、そのような言語の勉強というのは辛いだけで、ちっとも
楽しくないと思います。
エクセルの既存機能を存分に活用して、
それをどう組み合わせていくか、繰り返すか、条件分岐させるか、
このマクロ講座には、その為の知恵が沢山詰まっています。
解法(ロジック)を考える力「プログラマーの考え方」というのを
身に付けていく為の勉強を意識して是非やっていってください。
当講座のレッスンは、知らず知らず自然とそれが身に付くようにと、
考え抜いて作って来ています。
何度も言いますが、考える事がメインだから(用語や言語の理解や
暗記勉強ではないから・・)プログラミングは面白いし、楽しい。
だから長く続くのです。
その辺、ご理解いただけましたら幸いに思います。
でこれは、(前回の続き)
ばらばらに複数シートに管理している作業時間(作業工数)等を、一覧シートにまとめて一目で確認できるようになったという成功事例になるわけですが、
この方の場合は在宅勤務をされているということで、依頼された仕事毎に別々に、仕事の数だけのシートになっているかと思いますが、
もし、これ会社でやる場合には従業員名ごとの作業時間シートが人数分存在していたり、部門毎や営業所毎の売上シートだったり、商品ごとの販売管理シートだったり、
また、学校や塾での生徒ごとの成績表シートの場合なら、そこから生徒全員の国語の点数だけを抜き出した一覧シートを作りたいとか、
研究職であれば、実験毎や計測地点毎のシートから最大値を取り出して一覧シートを作るとか、などなど、
色々な場面でこれは役に立つかと思いますので、このマクロ作りの手順、今回ご紹介してみたいと思います。
それで、このマクロを作成する際の仕様としては、
まず、データとしてD列に合計の作業工数が入っている表(SUM関数で計算されているようなもの)だと仮定して、
ブックには、この1年分(2015年4月~2016年3月までなど)の12個のシートがあるものとします。それらのデータシートを前提にした場合、
1 新規のシートを挿入する。
2 シート名をA列、作業時間をB列に表示する
3 全シートに対して、2を行う
となります。
読者成功事例です。
[ 投稿者 ] tanpopo さん
WordやExcelを使用した仕事を在宅でしています。
時給制の仕事が多いため、Excelで作業時間を記録して、データの納品時に作業時間を報告しています。
全ての作業の合計時間を報告するだけであれば楽ですが、ファイルごとの作業時間を求められることも多いです。
その場合、ファイル1の作業時間はシート1、ファイル2の作業時間はシート2に記録していました。数ファイルであればよいのですが、ファイル数が10以上に及ぶ時もあり、ファイルごとの作業時間を確認するだけでも面倒でした。
数年前に教材を購入して作成したのが、シート別に記録している作業時間を新規のシートにまとめて表示して、全シートの合計作業時間を表示するマクロです。
1 新規のシートを挿入する。
2 シート名をA列、作業時間をB列に表示する
3 全シートに対して、2を行う
4 B列の作業時間を合計して、合計作業時間を表示する
マクロで作成した表を見るだけで、全ファイルの作業時間が一目で分かるようになりました。おかげで、作業時間を記録した多数のシートの確認は不要になりました!
◆読者の事例紹介
年度初めに、徴収した負担金の領収証書(とその控)を生徒数分作成し、
印刷後配布しなければなりません。
1000人以上の生徒数分を印刷するには、かなりの時間(数時間)と
手間がかかります。
-------------------------------
|領収証書 |領収証書(控) |
|1年A組 |1年A組 |
|1番 田中 |1番 田中 |
| | |
| | |
| [1] | [2] |
| | |
| | |
|----------------------------- |
|領収証書 |領収証書(控) |
|1年A組 |1年A組 |
|2番 鈴木 |2番 鈴木 |
| | |
| | |
| [3] | [4] |
| | |
| | |
-------------------------------
それで、今回の成功事例ですが、
実務的に言うと上記の領収書以外にも、特に小さめの帳票を印刷する
給与明細票(一人分が細長いヤツ)とか、
宛名ラベル(横2列の8段組み等で出して封筒に貼るヤツ)とか、
の場合にですね、この用途は色々あるかと思います。
今回のポイントは、
「1件目のデータ→[1][2]の領域に
2件目のデータ→[3][4]の領域に
差し込む」
という点になります。
これ以前、それで仕方なくだと思いますけど同じデータを2件並べて印刷
やってる人を目にしたことがありますが、、
当然それだと印刷元の一覧のデータが2倍の量になってしまいますので、
決してウマイやり方とは言えません。
あと、2名分づつ出せないということで、でわざわざプリンターに紙逆さ
に入れ直して2度印刷してる・・・という人も見たことがありますが、、
それやるとプリンターって壊れやすくもなりますから、2度目はよく紙
乾かしてから印刷するようにしてくださいね。(笑)
で、今回はそんな面倒を解決する為のマクロ作りです。
印刷が1000人分以上にもなりますと、これ手作業でやる言うのはほんと
大変だと思いますから、これはぜひともマクロ化(自動化)するべき
事案と言えますね。
ただ、プログラムでこういった2段組み等の出力というのは、一見簡単
なようでやってみると結構難しいものの定番と言えます。しっかり勉強
して置きましょう。
◆読者の事例紹介
[ 投稿者 ] ポリネシア さん
年度初めに、徴収した負担金の領収証書(とその控)を生徒数分作成し、
印刷後配布しなければなりません。
領収証書ですから「学年・クラス・出席番号・生徒氏名」は一人一人
違います。指定のフォーマットに差し込めばいいのですが、A4用紙に
2名分を以下のように配置するため、Wordの差込印刷も使えません。
前任者はVLOOKUP関数で転記していたようですが「検索値の入力と印刷
は手動」のため、1000人以上の生徒数分を印刷するには、かなりの時間
(数時間)と手間がかかります。
-------------------------------
|領収証書 |領収証書(控) |
|1年A組 |1年A組 |
|1番 田中 |1番 田中 |
| | |
| | |
| [1] | [2] |
| | |
| | |
|----------------------------- |
|領収証書 |領収証書(控) |
|1年A組 |1年A組 |
|2番 鈴木 |2番 鈴木 |
| | |
| | |
| [3] | [4] |
| | |
| | |
-------------------------------
そこで、Excelでリストを作成し、1件目のデータ→[1][2]の領域に
2件目のデータ→[3][4]の領域に差し込むにはどうすればいいか、
苦労しながらなんとかマクロを作成しました。
完成後は「ボタンを1クリック」するだけで、後はすべて自動で転記し、
印刷されるようになり、不毛な繰り返しによるストレスもなくなり、
大幅に効率化ができるようになりました。
ポリネシアさん、ご投稿ありがとうございます。
きれいな図まで書いていただけて、大変分かりやすいですね。
Q.変数は、なぜ変値とは言わないのか?
「変数」という言葉は、特に「専門用語なしで・・・」と謳って
教えている当講座では、唯一と言っていいほどいつも使っている
専門用語になるわけですが、
プログラマーであれば、これは極々あたり前の(あたり前過ぎる
ぐらいの)日常用語に過ぎませんが、(例えるなら、日本語の
「こんにちは」や、英語の「ハロー」や、中国語の「ニイハオ」
のようなもの・・・)
でも、プログラミング経験の無い一般の人の殆ど(99.9%の人)は
この「変数」という言葉の意味は知りません。
なので、これはプログラム用語の中でも特に特異性のある業界用語
であるかと思います。経験者にとっては、実に誰でも当然知ってる
言葉だと錯覚しがちなものです。
それで、私自身、これ疑問に思ったこともないですし、特にこれまで
誰かに聞かれたという記憶もないですし、実に意表をつかれた斬新な
疑問ですね。
で、この質問の答えですが、
これは、一言でいうとコンピュータの歴史によるものだと思います。
初期のコンピュータというものは、未だ数字しか扱えないもの
(現在の電卓のようなもの・・・)でありましたから、
おっしゃる通りで、これは現在であれば
定数・変数・引数 → 定値・変値・引値
と呼ぶべきであろうと思いますが、
コンピュータの出来た当時から数十年間のコンピュータ用語
としては、
定数・変数・引数
これが正しかったからだと思います。
その後のコンピュータの発展で、今のように文字データやなんやらも
容易に扱うことができるようなってきたいうのは、プログラミング
言語の歴史からすると、ごく最近(最近とは言っても数十年も前の話
・・・)、
しかも、定値・変値・引値と言うのはちょっと呼び難いですし、
時代と共にわざわざ変えるのも面倒なわけですから、昔の流れで
相変わらずにこの呼び名が使われているのだろうと思います。
例えば、テレビのチャンネルは今でも「回す」と言うわけですが、
今どきのテレビはリモコンなのでチャンネル回す人は居ないのと
同じですね。(けど、今でもチャンネルは「回す」ものであって、
「押す」ものではないわけです。)
それはそうした言葉だけに限りませんで、世の中の「何でそうなの?」
といった、その手の素朴な疑問というのは、ちょっとその歴史をひも
解いてみると、案外そのわけが良くわかるという場合が多いのだろう
と思います。
「マクロ」の歴史や、「マクロの記録」の歴史も、またしかりです。
機会あったらまたその辺もお話します。
小学生のお子さんをお持ちの方ならご存知かと思いますが、
今、安倍政権下では子供たちへの「プログラミング教育」
というものに力を入れていて、
東京オリンピックのある2020年までには、小学校でも
「プログラミング教育が必修化」になるということですが、
既に、全国の幾つかの小学校ではプログラミングの授業が
始まっているそうです。
それは要するに、このメルマガでも度々言ってきている、
従来型の「知識詰め込み」「暗記重視」の学習から脱却して、
「応用力重視」の学習への転換ですね。
(いくらVBAの知識を詰め込んでも、構文暗記しても、
マクロが作れるようになるわけではないですから・・・。)
それで、既に試験的にその「プログラミング教育」の授業を
始めている小学校では、
「物事を順序立てて考えられるようになった。」
「論理的な思考力や問題解決能力などつきてきた。」
との報告がなされているそうです。
これが、いわゆる「プログラマー脳」とか「プログラミング思考」
というものです。(この辺は、また次回のレッスンで詳しく解説
する予定でいます。)
元々、あのビル・ゲイツやスティーブ・ジョブスや、孫社長も
プログラマーの出身で大成功をおさめているわけなので、
小さい頃からこの能力を鍛えておくと、将来、うちの我が子も
思わぬ大物になれるかも(!?)知れませんですね。父(^_^)/
そもそも「マクロ作成」での問題点というのは、
プログラムの
1.書き方が分からない
2.解き方が分からない
この2つに大別されるわけです。
でも、
前者の「1.書き方が分からない」というのは単なる調べ物です。
後者の「2.解き方が分からない」の方は、考え方のコツです。
前者は調べる力が必要ですが、さほど難しいことではありません。
今どきですからインターネットでうまく検索できるスキルさえあれば、
それでよいだけです。
問題なのは、後者の「解き方が分からない」の方です。
よく、
「プログラムとはパズルを解くようなものだ。」
と比喩する人がいますが、、もっともです。。
ところであなたは、ルービックキューブで6面揃えることが出来ますか?
(そう、その昔流行った色を揃える四角い箱形のおもちゃの事です。
「手軽な頭の体操」ということで、最近また流行り始めているそうです。)
これは、殆どの人の答えは「NO」だと思います。
(もちろん、わたしもです。。(笑))
でも、あれもちょっとしたコツというのがあって、
そのコツさえ分かってしまえば、ちょっと練習すれば小学生でも
6面がほんの数分で、必ず誰でも揃えられるようになるそうです。
9個×6面=54個ものばらばらになった色が、小学生でも
ほんの数分で綺麗に揃うのです。ちょっとしたコツを知れば・・・です。
そのコツを教えているサイトによると、
ステップ1.1面とその側面1段目まで揃える
↓
ステップ2.側面2段目まで揃える
↓
ステップ3.上面に十字を作る
・
・
これがそのコツだそうです。
要するに、一足飛びに(最初から6面)揃えようと思ったら、
絶対に出来ません。
それは、この講座でもよく説明しているマクロプログラミングの場合の
「データマッチング」のコツとほぼ同じですね。
これまでに「データマッチング」は、「1対1」→「1対多」→「多対多」
こうやると簡単です・・・といったお話を再三してきましたが、、
複数のシートやブック上に分かれてばらばらに管理されているデータ同士を
一つにまとめ上げるための、
それに必要不可欠な「データマッチング」というマクロの組み方のコツも
また、
「1対1」を「1対多」の事を考えながらを作る
↓
「1対多」を「多対多」の事を考えながらを作る
↓
○○しながら「多対多」を作る
・
・
・
という事なんです。
それを、いきなりデータ全部の突合せ(多対多)から作ろうとするから
非常に難しくなる、絶対にプログラム完成には至りません。
それは、いっぺんにルービックキューブの6面を揃えようとしている行為
と同じだからです。
ルービックキューブの場合には名人になると10秒も掛からずに6面揃える
人も居ますが、そんな名人とて、その手順(コツ)を必ず踏んでやっている
わけです。(名人はその手順をすこぶる高速で出来るというだけです。)
プログラミングの場合でも、プロの優秀なプログラマーの場合も同じです。
必ずこの手順を踏んで作っていきます。どんな天才プログラマーであっても、
決して一足飛びにはいきません。
だから、作る過程が極めて大事なわけです。
マクロ作りに失敗する人の多くが、完成品(サンプルコード)から
逆に辿ろうとしてしまいます。サンプルコード好きの人はいませんか?
それを作る「過程」が見えない完成されたプログラムコードは、
何の参考にもなりません。
複雑なロジックを簡単に解く「コツ」と「詳しい手順」を教わること。
これが非常に非常に重要、且つ、必要不可欠であるわけです。
世の中に出回っている大概の参考書やスクールやセミナーといったものは、
「1.プログラムの書き方が分からない」
これしか教えていないから、いくら勉強しても作れないわけです。
「2.解き方が分からない」
これをちゃんと教えてくれる講座を選んでください。
あなたはこの違い、ご理解いただけていますか?
大事なのは解き方のコツを教わっているかどうか・・・
それだけです。
プログラミングの勉強は暗記の勉強ではいくらやっても決して解決しない、
コツの勉強が重要です。「コツを教えろ!」ってことに尽きるんです。
「必要」は発明の母といわれます。
自分のやってるエクセル作業をかんがみて、
そのマクロ化(自動化)の必要性というのを強く感じ、
その実現の為にとにかく数週間、一生懸命打ち込むこと
が大切です。
ところで、
日本のそこかしこには最近、外国人の観光客が非常に多いですが、
あなたは、そんな外国人と英語で会話ができますか?
ムリですか。(私もです。笑)
けど、あなたは学生時代には何年間、英語の基本を勉強しましたか?
私の場合は、中学と高校で3年づつと大学の教養課程で2年間の計8年間
になりますが、自分なりに一生懸命に英語の基本は勉強してきました。
でもダメでした。^^;
要するに、「英語の基本」と「英会話の基本」というのはぜんぜん違う
ということに、もう少し早く気付いていれば良かったなぁ~と、
今つくづくそう思いますが、もう後悔は先には立ちません。。
実はそれ、マクロでも一緒です。
実際にマクロを作れない人の多くが、「VBAの基本(言語の勉強)」ばかりを
してしまっているわけです。
当たり前ですが、マクロが作れるようになるためには、
マクロを作る為の勉強をしなければなりません。
あなたが本当に勉強すべきは「マクロ作りの基本」なのであって、
決して「VBAの基本」ではありません!
ここだけは くれぐれも 間違えないようにしてください。
あなたの英会話力をかんがみて、
学校英語の二の舞だけは、ぜったいに踏まぬよう
マクロ勉強の場合でも「マクロ作りの基本」を勉強することに
努めるようにしていってください。それが、私一番の願いです。
さて、
これからマクロを始めたいという人のために私が作って
YouTubeで公開中の下記の10分動画なんですが、
あれよあれよという間に、YouTubeでの再生回数が何と
14万回を 超えてきました。(拍手!)
当講座のホームページも、Google検索の「マクロ」で、
11ヵ月連続 第1位 を継続中です!
※今回から購読いただいたマクロ初心者(未経験者)の皆さんへ
まずは、こちらの動画をぜひ一度ご覧ください。
これ10分弱見るだけで、あなたの「マクロって何?」という疑問が
バッチリ解決します!(たぶん解決します。笑)