Q.
下記の手順にてマクロを記録させたのですが、
「data.xls」をダブルクリックしてブックをオープンしていますが
プログラムにはそれが表示されていません。何故でしょうか?
> 1.「新しいマクロの記録」を開始
> 2.「data.xls」をダブルクリックしてブックを開く
> ・
> ・
> ・
> 14.「data.xls」を×印から閉じる
A.
やられた様に、(フォルダから)ファイル名をダブルクリックしてブックを
開くというのは Windows の操作でありますので、Excelの操作ではあり
ません。
エクセルの「マクロの記録」で記録できる操作というのは、当然ながら
エクセルの操作に限ります。
閉じる場合も同様に、
×印から閉じるというのは Windows の操作になりますので、Excelの操作
ではありません。
Excelの[ファイル]メニューの中に、それらの操作をExcelでやる場合の
ファイルを「開く」や、「閉じる」や、「終了」などのメニューがあり
ますので、「マクロの記録」をする場合は、必ずそれらのExcelのメニュー
を使って操作する様、ご注意ください。
■関連情報
・なぜ、あなたはマクロを作れないのか? その答えとは・・・
以前、私がコンサル&開発したある貸布団会社の請求書の
自動発行システムの話なんですが、
そもそもリース業やレンタル業というのは請求処理がやっかいで、
基本は、貸し出した日数によって金額を計算するわけではあり
ますが、
当然、延滞の割り増し料金もあれば、初日と2日目以降や
短期と長期、等々といった条件によっても1日あたりの
リース料金が違ってくる商品ですので、複雑怪奇な計算を
しないと請求書が作れないという厄介なものなんです。
特に建設の重機や布団のような、お客さんの所まで運ぶこと自体も
大変で、その輸送経費が高く掛かってしまうような大きい物を
貸し出しているリース会社の場合には、
間に使わない期間があった場合でも、輸送費や配送の手間を省く
ために、客先に置きっぱなしにしておくというケースが多々あり
ます。
その期間は当然ながらリース料金というのは請求ができない
(タダの貸し出し期間として)計算をしなければならない、
すなわち、貸し出している期間でも料金が発生する日としない
日があるなど、単純に
返却日 - 貸出日 = 貸し出し日数
という計算式にはならないという、これまた請求業務が非常に
厄介な要因になっています。
で、請求書の自動発行システムの開発をしてほしいとの
ご依頼を受けて、その会社へ初めて訪問した時に
丁度、依頼主の社長さんが面接中とのことでしばらく事務所で
待っていたのですが、その当時、その会社の事務所には3名の
女性パート事務員さんがいて、いかにも忙しそうにその厄介な
請求業務に追われているといった様子でした。
そのあと社長さんから聞いた話では、現状の3人では請求業務は
手一杯でとても足りない状況なので、増員する為のパート面接を
行っていたということで、
2回目の仕様検討で訪問した際には、ほどなく4人目の事務員さん
も雇われていて、計4名の体制でどうにか請求書発行業務をこなし
ているといった状況でした。
それから、弊社で(エクセルマクロにて)請求書の自動発行システム
の開発を1ヶ月ほど掛かって終え、実運用が始まってみたところ、
当然ながら、業務負荷は可也軽減されていったわけではありますが、
納入の半年後に、久しぶりにシステムのメンテナンスでその会社
を訪れた際には、
既に女性事務員は1名しか見あたらず、しかも、その1人も3時
になったので私がメンテしている最中に帰宅されました。
午後のまだ3時過ぎでしたが、他に女性の事務員さんはもう1人も
いませんでした。
その辺、社長さんに聞いてみると、
つまり、以前はパート事務員4名を雇ってめいっぱいのフルタイムで
なんとかこなしていた請求業務が、システム導入後はほぼデータ入力
業務だけでよくなったので、
今ではパート2名(1名は午前中だけでもう1名は3時まで)の勤務
だけで十分にこなせるようになったということです。
単純に月の作業時間にして、約800時間掛かっていたものが
200時間以下となった計算で、そのリース会社の請求業務の人件費は
それ以前の4分の1程度に圧縮でき、既にシステムの開発費が3ヵ月で
ペイできたということです。
この成果には、貸し布団屋さんらしくたいへん我体のよい社長さんも
相当にご満悦なご様子で、私も随分と感謝の言葉をいただきましたて
システム屋冥利に尽きるというものです。
このような結果からしても、今更ながらに特に中小企業の経営には、
エクセルのマクロというのは多大な威力を発揮する、ということを
疑う余地はないだろうと思います。
▼マクロを始めてみたい方へ▼
マクロのプロが直伝する「エクセルマクロ成功の鉄則」
今回は、マクロ大賞受賞作品の独創的なアイデアと時間対効果が
すばらいという所をご紹介させていただきましたが、
特に、この「時間対効果」の話で言いますと、例えば、
毎年、年度末に1回だけやる2時間程度の集計作業があったとして
これをマクロを組んで自動化するために2週間程度
(1日3時間づつ×14日=42時間)
が掛かったとします。
そうすると、掛かった時間の元を取るには実に21年間
(42÷2時間=21)も掛かってしまう計算になりますので、
これでは笑い話にしかなりません。
その逆に、毎月、月末に2日掛かり(計16時間)
掛けてやっている定型業務の処理をマクロで組むのに、
同様に42時間掛かったとすると、
たったの3ヵ月(42÷16時間)でおつりが出る計算
となりますので、
4ヶ月目からはまるっきりその貯金した時間の利息だけで
食べていけるみたいな、実においしい話となるわけです。
なのでまずは、
その辺の「費用対効果」ならぬ「時間対効果」ということを
よく考えてみて(計算してみて)、より時間対効果の高い業務
に絞ってマクロ化に取り組みましょう!!
で、その際に注意していただきたいのが、8:2の理論です。
営業や販売のお仕事に携わっている方ならよくご存知かと
思いますが、
マーケティングの「80対20の法則」という理論
(上位2割の顧客が8割の売上をもたらす)に代表される
まさにそれです。
面倒な手作業の80%は20%の労力で作れるマクロで
解決することができます。
が、
残り20%の部分はマクロを作ってやろうとすると
80%の労力を要するほど時間がかかり難しいものです。
システム開発の現場でも、フル仕様で作るには予算不足があると
いった場合には、この理論で作業のボトルネック(一番時間の掛か
っている作業)を抑えた上で、全体の8割のシステム化を提案する
といったことがよくあります。
私の長年のSE経験から言っても、20%の労力で(開発費で)
80%の作業の効率化が達成できるという場合が殆どなわけです。
残りの20%というのは、手作業でもほんの5分でできるもので
あったり、年に1度有るか無いか程度に発生するイレギュラーな
特殊データに対処する為のエラー処理であったりしますが、
当然、そうしたものまで対応した100%の自動化を求めれば、
100%の費用が掛かることになるわけです。
面倒な手作業の80%は20%の労力を掛ければ作れるマクロで
十分に処理ができますので、残り20%の部分は可能な限りは
手作業で対処する。それでも、年に1、2回あるかないかだったり、
手でも5分程度で終わる作業だったりするのであれば、業務現場の
担当者からも特に問題視されるということはありません。
皆さんが自分でマクロを作る場合でも、このことは当てはまります。
100%自動化しようとすると、とうしてもその中で難しい部分に
多くの時間が掛かってしまい、完成に至らない可能性も高くなるわけ
なんですが、
80%の自動化でよいという考えでやるのなら、短時間で完成できる
可能性はより高くなります。
100%のマクロ化で全自動処理が実現できることに越したことは
ないわけですが、それはやはり「時間対効果」をよく考えてみるべき
です。
100%マクロ化 → 処理時間30秒、マクロ作成時間 → 無限大
80%のマクロ化 → 処理時間30秒+手作業5分、マクロ作成 → 数時間
どちらを選ぶべきなのかは、明白ですね。(勿論、後者です。)
手作業でやったとしてもそんなに手間なく時間も掛からないという
部分で、且つ、マクロを組むには少々難易度高く難しそうだな、と
思われる部分の残り20%の部分については、
あえてマクロ化せずに、当面は手作業で片付る。という道を選択
することで、より短時間でプログラムが作成でき、「時間対効果」上
断然有利となるわけです。
このように、マクロ作りは「時間対効果」を考えて、
8:2(自動化したい作業の8割を、2割の労力で作る)
というのが、業務効率化には特に重要な考え方になります。
■関連情報
・マクロでExcelの自動化ができる人、できない人、 その違いとは・・・
残念なながら私はまだ持っていませんが、
よく知られているように今人気のアップル社のiPad端末には
取説らしき「分厚い説明書」というものは一切付いていない
そうです。
理由は、誰でも感覚的に使えるものなのでその必要ないから
ということだそうですが、
そういえば以前、当講座の教材をお買い求めいただいた方から
「通信教育をする場合はたいてい同封されている手引き書の
ようなものは、ないのでしょうか?」
といったご質問をいただいたことがありますが、、、
あいにくと、当教材にそのような手引き書、説明書に類するものは
一切ございません!
CDの簡単な使い方の説明がテキストの最初に1ページ載っている
だけです。
(説明書ではなく、勉強の仕方やマクロの作り方のコツについてなら
たくさん載っていますが。。。)
その理由は、iPad同様に、エクセルもマクロもただの便利な道具に
過ぎませんから、
基本、なにも分厚い説明書を隅々まで読まなくても使いこなせるもの
であるのが理想であり、わざわざ前置きの部分に貴重な時間を
費やす必要のない教材というものに作り上げています。
なので、当教材でマクロを勉強する際には、前置きに掛けるムダな
時間はまったく必要なく、直ぐに最初のLesson 1 から順に進んで
いってください。
むしろ、感覚的な使い方さえ必要なく、メルマガ講座で8千人超に
学習していただいて成果を出してきた実績をそのままに、学んで
いける教材となっています。
▼賢くマクロ作りをマスターするのコツが満載▼
プロが直伝する「エクセルマクロ成功の鉄則」教材セット
受講生のお便りから・・・
データびっしりのシートの上方に、教わったLesson 11を
見て設置した「実行」ボタンをポチッと押したら、
そのシートの大量データが、ダダダダダーと処理されでいき
今まで3時間以上かけてあくせくやっていたデータ処理が、
一瞬で(たぶん10秒以内で)終わってしまいました。
まったく先生の言うとおりでした。たいへん恐れ入りました。
マクロが作れるようにならない人の理由、それは一言でいうと
学校で何年も英文法を勉強したところでちっとも英語が話せる
ようにはならない、ということと一緒だと思います。
英語を身につけるには、その基本である英文法がとにかく大事だ!
ということで、
学校英語の授業では文法を最優先に教えられたと思います。
しかし、それは本当でしょうか?
本当に、英文法を理解しなければ英語を話せるようにはなれない
のでしょうか?
たとえば、アメリカ人やイギリス人の3歳くらいの幼児でも
ペラペラと流暢な英語は話せます。
その子供達が我々日本人が散々英語の授業で教わってきたような
”三人称単数現在”のような英文法を理解した上で会話をしている
と思いますか?
そんなワケはありませんよね。
3歳の時から既に日本語の文法を理解して話していたという
日本人なんていないわけですから。。。(笑)
英語を話せるようになるためには、まず英語を話さなければ
ダメなんです。(当たり前です。)
最初は当然、下手で片言の英語でいいので、とにかくどんどん
声を出して話すということが大切だと思います。
決して、文法の勉強を一生懸命にすることではありません。
VBAマクロでも話はまったく同じです。
マクロを作りたければ、まずマクロ作りを勉強するしかありま
せん。文法や基本の勉強から入ろうとするからダメなんです。
第一、英語と一緒で文法の勉強というのは実につまらないもの
です。つまらない勉強は、決して長続きしません。
下手でも、たとえ、三単現が少々めちゃくちゃな英語であった
としても、多少なりと外人と英語でコミュニケーションが
とれれば楽しくなってきますので、自然と勉強もはかどります。
VBAマクロの場合でも、
へたなプログラムでも、なんか実行して動けば楽しくなって
きますので、どんどん勉強がはかどっていきます。
当然、英語は話せば話すほど(VBAマクロは作れば作るほど)
だんだんと確実に上達していきますので、自分でもその成果が
分かります。
基本や文法の勉強で、それはありません。
まず基本が大事と、文法の勉強ばかりを優先させて学ぶ人は
いつまで経っても英語が話せるようにならない、
VBAマクロが作れるようにならない、
というのが、できない人の最大の理由なのです。
昭和の日本の英語教育そのままに、その辺を間違った勉強を
してしまって、
●VBAの基本の理解に時間がかかる
●VBAの勉強は辛いと思う
●いつまでたっても自作マクロが1本も作れない
●結局、Excel業務の自動化(マクロ化)は諦める
という経路をたどって、あえなく挫折してしまうという人が
実に大勢いるわけです。
心当たりのある方は、ぜひ勉強の仕方を変えてみてください!!
▼賢くマクロ作りをマスターするのコツが満載▼
プロが直伝する「エクセルマクロ成功の鉄則」教材セット
Q.福岡県 総務・経理 50代男性より
福岡県の○○です。
仕事が忙しいくなかなか出来なかったのですが、言われたとおり
に毎日少しづつ勉強しました。
そして、いとも簡単に出来てしまうことにビックリしました。
チョッと拍子抜けという感もあります。
マクロの記録を使い我流で少しやってはいたのですが、知らない
ことばかりでした。
Lesson13のところで理解が出来ず、自分なりに意味を考えてみ
ました。
以下のような理解でいいのでしょうか?
③④で変数がからみあっているようで 初心者に理解するのは
なかなか難しいです。
① a = ActiveCell.Value
② ActiveCell.Offset(1, 0).Activate
③ For i = 1 To Len(a)
④ ActiveCell.FormulaR1C1 = Mid(a, i, 1)
⑤ ActiveCell.Offset(1, 0).Activate
⑥ Next i
Range("B4").Select
① クリックしたセルの値をaという変数に入れる。
② 書き込む位置を縦方向に1つ移動させる。
③⑥ i という変数(1からaという変数の文字数)の数
だけ④⑤の命令を繰り返す。
④ Mid(a, i, 1)の命令を書き込む。
Mid(a, i, 1)の意味は 文字列aを iの開始位置
(1からaという変数の文字数分)から1文字抽出する。
※この部分が?
⑤ 書き込む位置を縦方向に1つ移動させる。
自分でマクロをいじってみました。
i は別の文字でもいいこと。 ②を消すと最初の文字が消えて
しまうことなど
でも、なぜ②を消すと最初の文字が消えてしまうのでしょうか?
以上3ヶ所の疑問点よろしくお願いいたします。
※各レッスンの最後マクロが完成した時に各命令の横にコメント
があると初心者には復習の意味もあり理解が進みもっと分かり
やすくなるように思いました。
回答.三太郎より
> そして いとも簡単に出来てしまうことにビックリしました。
> チョッと拍子抜けという感もあります。
→(笑)。ちょっと簡単すぎましたかね!?
> 以下のような理解でいいのでしょうか?
> ③④で変数がからみあっているようで 初心者に理解するのは
> なかなか難しいです。
→とても詳しく、疑問な点をまとめていただけて感心しました。
これでバッチリです。これだけ理解できていて、しかもそれを
文章に書き表すことができるということが重要ですので、これは
すばらしい内容だと思いますし、この通りのご理解でまったく
問題ないです。(この部分が分かりにくい・・・とおっしゃる
部分も、私以上に説明がうまいです。^^; )
> 自分でマクロをいじってみました。
> i は別の文字でもいいこと。 ②を消すと最初の文字が消え
てしまうこと など
> でも、なぜ②を消すと 最初の文字が消えてしまうのでしょうか?
→これは、仰るとおりに「②書き込む位置を縦方向に1つ移動さ
せる。」ということですから、この行を消してしまう場合だと、
ここでは「書き込む位置を移動させない。」ということになります
ので、その後の1回目のループで最初に、まず先頭の1文字をその
移動させなかった位置(すなわち、入力する文字列のある位置)に
上書きをしてしまうわけですね。なので、上書きをされて最初の
文字が消えてしまうということになります。
例えば、②を消した上で、これの④と⑤の順番を入れ替えて下記
としても同じ結果が得られるわけです。
a = ActiveCell.Value
For i = 1 To Len(a)
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = Mid(a, i, 1)
Next i
(ただ、元々このような順番にあえてなっていないのは
( Offset(1, 0) が2回出てくるようになっているのは)、より
理解しやすくするためを考えてのレッスン上の都合で、です。)
とにかく、ご自分で色々試してみる!という姿勢がある方は必ず
上達が早いですので期待が持てます。
> ※各レッスンの最後マクロが完成した時に各命令の横にコメント
> があると初心者には復習の意味もあり理解が進みもっと分かり
> やすくなるように思いました。
→貴重なご意見ありがとうございます。仰るとおりですね。
ただ、実はそれ、あえて(わざと)書いていないという面もある
んです。
テキストの鉄則の中にも「コメントをたくさん書きなさい!!」と
いうことを書いていますが、もしこれに予めコメントが書かれて
いたとしたら、皆さん中々自分では書かなくなってしまうだろう
と思います。
○○さんのように、
> ① クリックしたセルの値をaという変数に入れる。
> ② 書き込む位置を縦方向に1つ移動させる。
> ③⑥ i という変数(1からaという変数の文字数)・・・
> ④ Mid(a, i, 1)の命令を書き込む。
> Mid(a, i, 1)の意味は 文字列aを・・・
> ⑤ 書き込む位置を縦方向に1つ移動させる。
このような自分で理解した内容を、プログラム中にコメントとして
”自分の言葉で書き残す”ということが非常に重要なことなんです
ね。
自分自信でプログラムの意味を理解しようとしないことには、こう
したコメントは書けませんから。
ぜひこれをこのままLesson13で作成したプログラムの各行の横に
書き残しておいてくださいね。
以上ですが、説明にご不明な点などありましたらお手数ですがまた
何なりとご質問ください。
また、その後の近況、「こんなマクロを作りました!(^^)」とか、
「中々勉強する時間がありません(~_~)」とか・・・などのご連絡も、
是非お待ちしています!(何らかのよいアドバイスもできるだろうと
思いますので。。。)
では。
お返事.ご質問者より
福岡の○○です。
早速のご回答有難うございます。
やはり そうだったのですね!
出来たマクロを見ていたら ActiveCell.Offset(1, 0).Activate
が2回あったので何か変だなと思い1つでいいのではと思い
1つ目を消して実行してみたしだいです。
a = ActiveCell.Value
For i = 1 To Len(a)
ActiveCell.Offset(1, 0).Activate
ActiveCell.FormulaR1C1 = Mid(a, i, 1)
Next i
このマクロで理解できました。
「こんなマクロを作りました!(^^)」とか とありましたので
完成してはいるのですがアドバイスいただければと思い送ります。
ただ、個人情報に触れる部分がありますので内容を修正して
次回メールいたしたいと思いますのでよろしくお願いいたします。
まずは今日はお礼まで