私は、データベースに大量のデータを整理して登録するオペレーションマネージャーのじゅんぺーと申します。私が務めている会社は、もともと印刷会社だったんですが、時代の変化に合わせてシステム部門を持ち、データベースのマネジメントシステムや自動組版システムを自社開発しちゃったある意味システム会社でもあります。
そのデータベースのマネジメントシステム(以降DBMSと言います)が、このコロナ渦もあってありがたいことにたくさん引き合いを頂いており、お客様の持っている商品情報を何万件、何十万件とExcelに整理して手作業で登録するお仕事をマネジメントするのが私の仕事です。
お客様が既にお持ちの商品情報、最初からきれいに整理されていればそもそも弊社のDBMSを導入したいなんて思いません。大抵は最新の情報がどこにあるかわからない、情報はあるけど分類分けカテゴリ分けができていないから探しにくい、同じ分類の商品なのに登録した人や時期によって内容に差がある、システムの担当者が辞めちゃって何がどうなってるかわからない…というデータを登録する以前の問題を抱えているお客様がほとんどです。なので、そんな状態のデータを分析して、1つずつルールと項目をお客様と決めていき、データ登録に必要なオペレータの人数と期間を算出し、データを登録していきます。
DBMSを導入するにあたり、前述したようにデータを1から手作業で作り直す場合、最初にまとまたデータをDBMSに登録する際は、Excelで一括登録することが多いです。なので、Excel中心に作業を設計するんですが、実際に登録作業を始めてみてわかることも多く、最初に決めたExcelの項目にどんどん項目が追加されていくんです。
そうすると、最初に決めた仕様からExcelが変わるわけですから、DBMSに一括アップロードする際にエラーになっちゃいます。いや、わかってたんです。わかってたんですけど、システムエンジニアのKさんが、DBMSをチャチャっと直してくれると思っていたんです。その甘い考えが、このブログのタイトルの状況につながりました…
金曜日の夜に「週明け月曜からの業務にマクロが絶対必要だ!でも頼める人がいない!」という状況になっちゃいました。いや、ダメだろそんな仕事の仕方、と思われると思いますが、おっしゃる通りです。反省しています。
30代半ばの私、Excelの関数はそこそこ使える自信はあるものの、マクロ作ったことは1度も無い。「ネット検索してちょっと頑張ればなんとかなるんじゃないの?」と思っていた過去の私をぶん殴りたい。「ネット検索してなんとかなる」は正しい。ただし、「ちょっと頑張る」ではなく「死ぬ気で頭使って頑張る」必要がある。(サラリーマンは必ず1回は聞いたことがあるであろう「死ぬ気でやれ、死なないから」ってやつ)
そんな私が、土日に家事&子どもの世話と両立しながら、知識ゼロから19時間で仕事に使うマクロを作り上げた過程を紹介したいと思います。金曜日の夜に絶望しているサラリーマンのお役に立てると嬉しいです。
実際のタイムスケジュールは金→土→日とこんな感じです。順番に説明していきます。
「マクロ」は何かExcelの自動でいろいろできる仕組みで、「VBA」は聞いたことあるけど「マクロ」と同じような意味なんじゃないの?
金曜日の19時、私はこのレベルからスタートしました。
まず考えたことは、「本当にマクロが必要か?」ということ。
余談ですが私は合気道有段者で、稽古をつけてもらっていた師範から合気道の考え方として「合気道はルールが無い。それは何でもありということ。使える武器は何でも使うし、逃げられるにこしたことはない。逃げられず、武器もなく、素手で相手を制するしかない状況で、初めて使うものだ」と教わりました。
マクロも同じです。知識ゼロから土日で仕上げようだなんて、避けるにこしたことはありません。どう考えてもマクロを使わないといけない、と結論付けてから、次のアクションに移りました。
まずは用語を正しく理解することからです。詳細はググっていただくとして、簡単に言うと以下の理解をしました。
「マクロ」は「VBA」というプログラミング言語が無くても、Excelの機能で作れちゃう。
作れちゃうけど、「マクロ」の中身は「VBA」で書かれていることは同じ。ということです。「VBA」は「マクロ」の部品みたいなものです。ここめちゃ大事です。
参考にしたサイト:https://note.com/waenavi/n/n4e6a0f116818
なぜか。自分の仕事にどんぴしゃでそのまま使えるマクロは皆無だから、ネットで拾った「マクロ」を自分の仕事に合う用に手直しする必要がある。「マクロ」は「VBA」という部品で作られているから、自分の仕事にどんぴしゃでそのまま使える部品を探してくる必要がある。
ググる時に、今自分は「マクロ」を検索しているのか、「VBA」の部品を検索しているのか、それをまず抑えておく必要があります。
私は20代半ばのころにギターをやりたいと思って、Youtubeの動画で覚えた経験もあり、今回も迷うことなくYoutubeの動画検索から入りました。(ここでの検索は最初の第1歩なので、キーワードとして「マクロ」も「VBA」も両方使って検索しました)
「VBA マクロ 初心者」とかで検索すれば、わんさか動画が出てきます。
余談ですが、最近、ワイヤレスイヤフォンとか、バックパックとか、何かプロダクトを買おうと思ったらもっぱら動画を検索しません?普通にググっても「メンズバックパックおすすブランド20選!」みたいな全然選定できてないアフェリエイトサイトばっかりで結構嫌になりますよね。そんな時に動画を検索すると、「私はこれが好き!」と一点集中の動画が結構でてきて結構参考になりますよね。比較の動画があっても、数がかなり絞られていてわかりやすい動画が多い気がします。
私が選んでマクロを完成させる土台となった動画を先に紹介しておきます。こちらです。
↓
2021年ExcelVBA・マクロ・初心者入門講座【完全版】
https://www.youtube.com/watch?v=WCrOcq08bwY&t=0s
選んだポイントは以下。
この動画選びで2時間くらい使いました。ここでミスると勉強の時間と情熱を無駄にしてしまうので。人によってはしゃべり方の雰囲気やスピードで合う合わないあると思いますので、この動画選びを失敗しなければ、半分成功と言ってもいいと思います。ちなみにここまでが金曜日に使った3時間です。
土曜日。朝9時に起きて、とにかく動画に集中して、言われた通りに作ってみました。数秒ごとに動画を止めて、同じようにできているか細部を確認しながら進めました。正直これだけで土曜日を使ってしましました。(家事育児の時間もあったので、だいたい8時間くらいかと)
ポイントは、動画のマクロを模倣して同じものを1つ作りきることです。完璧に理解した状態で。だいたい完璧に理解した!と思っていて8割くらいの理解になるので、死ぬ気で完璧と思えるまで繰り返しです。動画が2時間ないくらいだから、3時間くらいで作れるかなーとか思ってましたが、無理でした。作りきるまで仕事で使うマクロのことは一切忘れることがポイントです。
1つずつ、部品を検索し、交換していった
日曜日。ちょっと寝坊して10時くらいからPCに向かいました。
この日は、実際に仕事で使うために、昨日動画通りに作ったマクロからどこをどう手直しする必要があるかを考え、実行していく必要があります。
ポイントは、いきなりVBAを検索してつぎはぎ修正しないこと。まずは、仕事で使うマクロに必要な機能と、処理の流れを紙に手書きで書きます。これは、学生時代や本で読んだりして、何となく知っていた知識ですが、まぁ、設計図を書きましょうって話ですね。
設計図があれば、まずはどの部品が必要かはっきりわかります。検索に使うキーワードもシャープになり、必要なVBAの部品に辿り着きやすくなります。
昨日、動画を完璧に理解して作りきったおかげで、検索して拾ってくる部品の意味をある程度理解することができているのがポイントです。
例えば「VBA ファイル名 取得」と検索して、以下の部品を使おうと思ったとします。
Dim fso As FileSystemObject
Set fso = New FileSystemObjectDim s As String
s = fso.GetFileName("D:\Tips.txt") ' ファイル名と拡張子
Debug.Print(s) ' Tips.txts = fso.GetBaseName("D:\Tips.txt") ' ファイル名のみ
Debug.Print(s) ' Tipss = fso.GetExtensionName("D:\Tips.txt") ' 拡張子のみ
Debug.Print(s) ' txtSet fso = Nothing
私の仕事ではファイル名だけあればいいので、
s = fso.GetBaseName("D:\Tips.txt") ' ファイル名のみ
この部分だけ拝借すればいい…わけではありません。
「s」や「fso」という変数を最初に定義しているから、この部分が成立するということが、動画のマクロを作りきっていることで瞬時に理解できるようになっています。本当です。
このように、昨日の動画を完璧にやったことで、何をどういうキーワードで検索すれば良いか、流用できる部分がどこかがわかるようになります。昨日動画に集中したことが、本当に効果が大きかったと思います。
こうして、日曜日の深夜まで、以下のループをひたすら続けました。
必要なVBAの部品がヒットしそうなキーワードでググる
↓
良さそうなページを探す
↓
VBAをコピペして手直し
↓
実行
↓
デバッグ
↓
原因を考える
↓
(最初に戻る)
ポイントは、あきらめないこと。超精神根性論っぽいですが、肝となる考え方です。
だって、VBAはプログラミング言語です。プログラミング言語はロジックが通っていれば100%正常に動きます。動かないということは、自分が悪いんです。絶対に原因が自分の数十分前のコピペや手直しにあると断言できるのです。
だいたい原因は、VBAを短くスマートにした方がいいと思い込んで、甘い考えで上級者向けのVBAの部品を流用して整合性が合わなくなることが多いです。
例えば、特定の列から値の入っている右端の列まで選択したい時に、楽してそれっぽいVBAの部品を1回のコピペで進めちゃうとか。原因がわからなかったら、面倒でも選択したい列を全部指定して先に進めるべき。そして全部動くようになってから、列の選択をより短いVBAの部品でスマートに構成できるように直す。それを面倒くさがらずにやることが大事です。
こうして日曜日も8時間程四苦八苦し、何とか仕事で使えるマクロを完成させることができました。
私もこの土日で作ったマクロが、完璧なものだとは思っていません。無駄な部分も多いだろうし、処理に時間がかかるような構成にもなっていると思います。
ただ、月曜から仕事で実際に使うことができるレベルに仕上げることは、できました。絶対にできると思って、あきらめなかったから。
そうやって、実際に仕事で使っていく中で、いろいろなバグや不都合が見つかって、また「こう直したい」という思いが出てきて、それを実現するためにググってコピペして…これらを時間を決めてやっていきます。
そうすると、いつの間にか「あ、これはマクロ作った方が早いな。4時間かけて作るのと、このまま作業続けるのとどっちが費用対効果あるだろうか」という思考ができるようになり、自然とマクロのスキルが上がっていくものだと実感しています。私は、最初に作ったマクロをベースにして、3つ程、仕事で必要な違うマクロを作ることができてます。
最後に、19時間で知識ゼロから仕事で使うマクロを作ることができたポイントをまとめておきます。
一度経験してしまえば、以降は5.と6.だけでどんどん展開できるので、かけた時間に対して得られるメリットが大きくなっていきます。
肝心の作ったマクロの設計図や中身のVBAも見せずに、19時間とか言われても信用できない、と思う方もいらっしゃるかもしれません。しかし、仕事の仕方も種類も変化のスピードが速いこの時代、大事なことは必要でクリティカルな情報をいかに早く手に入れるかです。この記事で、その考え方が少しでも伝わってくれればうれしいです。もっとわかりやすくて役に立つ動画が、既にYoutubeに上がっているかもしれません。
以上