「バカを殴るVBA」 part1 byまんぼばか
概要
この資料は「Excel-VBA(プログラム言語)を勉強してみようかな?」とヤル気を起こさせることを目標とした記事です。
まんぼばかが食い扶持仕事(IT系おしごと)での勉強会用に作った資料の焼き直しです。
この記事を読んで得られるもの
・あ、VBA、こんなことができるんだ!という実感。
・汎用的に使えるツール(シート間差分比較ツール)を提供。
・ソースコードの読み方。
・「あ、これなら少し勉強すればわかっかな?」という無責任な自信。
この記事を読んで得られないもの
・すぐに実務で活用できるコーディングの力
(結局ゴリゴリ手を使って書かないとダメです…)
この記事の想定読者
会社でランチを食べながら、もやっと「スキルアップしなきゃなぁ…」と、手持ち無沙汰でPC眺めている人。
ポイント
①「VBAでこんなことができる!」という体験
②ソースコードの読み方(環境設定+ノウハウ)
③VBA使いこなしの究極の結論。
④どうしたらツールがつくれるのか?
この記事で言いたいことを4つのポイントでまとめました。
以下に詳細を描いてゆきます。
記事の地図
「バカを殴るVBA」関連記事の地図です
①「VBAでこんなことができる!」という体験
操作できる/ソースコードを読む練習用のVBAツールを作成しました
まんぼばかが作成して実務で使っていたツールです。
まず動かしてみてください。
個人で勉強に使う限りにおいてはフリーです。
ツール
「シート差分高速比較ツール_Ver1.2_20250619.xlsm」
テストデータ
「Testファイル(高速差分比較ツール).xlsx」
リンク
#MD5sum
シート差分高速比較ツール_Ver1.2.zip
07f1d110b7b9a524fbb9927394af0586
MD5sumってのはファイルから算出されるハッシュ値です。
「提供されるファイルが提供者が意図した通りのものだよ」ってのを確認できます。使い方は以下記事を参考にしてください。
(MD5sumを確認しなくてもToolは使えます)
ツールコード詳細解説
コードの解説をのせました。図を多用、専門用語を少なく、なるべく「読み物」として成り立つように書いてみました。さらっと眺めて「へー」とかいってくれると嬉しいかも。
「バカを殴るVBA」 part1 ①シート差分高速比較ツールコード詳細解説
https://zenn.dev/mambo_ykhm/articles/3f82353ccc10bc
動作機能はシンプルでわかりやすいと思います。
作業によってはこのツールを運用して劇的に作業時間減/正確性向上を果たせます。
修正を依頼した資料(Excel)について、不正確にしか直せない相手に対して
超短時間で突っ返すことができることから「バカを殴るツール(VBA)」と自分で呼んでました。
②ソースコードの読み方(環境設定+ノウハウ)
いくつかの環境設定や事前知識がいります。
(開発しやすい環境/デバッグの仕方等)
別記事を作成したのでそちらを参照
「バカを殴るVBA」補助資料
③VBA使いこなしの究極の結論。
個人的経験から、Excel-VBAで業務ツールを作る際に「これがゴールじゃね?これ知ってば無双できね?」という機能があります。
A 二次元配列の高速取得ができること。
B 連想配列の理解
の二つです。
A:二次元配列の高速取得
➡配列というのはプログラム上でのデータの入れ物。
二次元というのは2つの方向と思ってください。
学校の下駄箱みたいなもんだなのイメージでまずはOK。
これを高速で作るコードを提供ツールに含めています。
指定範囲を一行のコードでVBA内のメモリに格納できる。
(数万個規模のセルでも一瞬)
処理高速化のコツは「データをメモリ上で操作する」ことです。
※この部分をステップ実行+ローカルウインドウ確認
+口頭説明しています。この記事では各々確認してください。
ここの凄さを体感してもらうことが本記事の一番の目的です。
B 連想配列の理解
➡ キー(添え字)に文字列などの数値以外のデータ型も使用できる配列
・テーブル(表)の引き合わせ
・データの一意性確認
に強力につかえます。
連想配列は次回のpart2で解説します。
画像
④どうしたらツールがつくれるのか?
有用なツールを作るには2つの観点が必要です
A:ツールの設計
そのツールを実現すると「なにが」「どのくらい」
楽になるのか?を見立てる。その見立てがないと
インプット/処理/アウトプットがブレる。
B:道具(機能)のストック
「AとBを組み合わせりゃこの機能できるだろう」という知見
これがないとツール化の想像すらできない。
以下でツールを設計~作成~運用した実例をあげてゆきます。
「A:ツールの設計」の実例と思ってください。
事前情報:業務の情報
・無線基地局のSEをしていた
・無線基地局を設定(新設+調整)するチーム
・無線基地局の中身は組み込みLinux
・頻繁に基地局構築/設定変更を実施
(全数:16000局程度
毎週ガンガン新設 or 設定変更あり)
・自分は無線基地局の設定ファイルの作成を担当
・設定ファイル作成の専門システム【X】は有、
基地局情報シート(.xlsx)【Y】がインプット
・専門システム【X】の動作が遅い
・基地局情報シート【Y】の精度が
非常に悪い(手動で修正してる。再修正のリレー多数)
どうしたら楽になるか?
案1:【X】システム改修
➡ 担当外 & バカでかいのですぐに直せない 。却下
案2:基地局情報シート【Y】の精度を上げる
➡ 文章(メール)で指摘。効果薄い。 これが現状。辛い…
案3:基地局情報シート【Y】のチェックを高速でできたら?
➡こちらの頑張り(Tool作る)で改善できそう。
基地局情報シート【Y】の不備指摘を”秒”で返答したら
カッコよくね?カッコいい!
バカ殴ろうぜ!
案3を揉む
基地局情報シート【Y】のチェック機能つくるか!
↓
ではチェック、何をすべぇ…?
↓
(悩みに悩む…)
↓
「…”絵”で差分みれたら直観的じゃね?
差分判定結果を方眼紙みたにしたらよいかも?」
で、出力結果も「-/0/1」の三種でよくね?
([-] ➡ 両方空白セル/ [0] ➡ 値あるけど同値 / [1] ➡ 値あって異値)
[1]があるかを高速で示めせたら良いだけじゃね?
↓
「シート差分高速比較ツール」を作成!
↓
基地局情報シート【Y】の確認時間爆速!!!
結果(数値的結果)
Tool作成前:45分
【X】に取り込んで待つ(長い)~不備あるエラーメッセージ~
不備点をまとめて「修正してね」メール作成・送信
Tool作成前:2分
ツールで差分個所を把握+差分個所もテキストで出力。
貼り付けてメール返信
↓
22.5倍の高速化+ストレス激減を実現
結果は明確にしておいた方がよいです。
可能であれば数値で結果を。
数値が無理なら「正確性向上」「作業員のストレス低減」とか。
(ツール見せただけでは、偉い人は分からんのですよ…)
勉強方法
勉強方法をまとめました。
本記事は「初学者にいきなり運用レベルのツールをぶつける」がテーマです。つまり「よくわかんないものに対してどのように勉強していけばよいか」という事を書きました。
「バカを殴るVBA」勉強方法
まとめ
①「VBAでこんなことができる!」という体験をする
➡Tool動かしてみて
②ソースコードの読み方(環境設定+ノウハウ)
➡運用中のツールを解析してみる。
(実運用しているツールはノウハウの塊よ)
③VBA使いこなしの究極の結論
A 二次元配列の高速取得ができること
B 連想配列の理解
➡メモリ上で配列系の操作ができるようになると
業務系ツール作成では無双できる。
④どうしたらツールがつくれるのか?
A「設計の視点」を持つことが必要
B「道具の使い方」のストックをある程度持つことが必要
➡ 意識して「どうしたら楽になるか」のストーリを想像
+ 細かくVBAのノウハウをストックしてゆく
以上
(part2に続く
Discussion