0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「バカを殴るVBA」 part1 byまんぼばか

Last updated at Posted at 2025-06-29

概要

この資料は「Excel-VBA(プログラム言語)を勉強してみようかな?」とヤル気を起こさせることを目標とした記事です。

まんぼばかが食い扶持仕事(IT系おしごと)での勉強会用に作った資料の焼き直しです。

この記事を読んで得られるもの

・あ、VBA、こんなことができるんだ!という実感。
・汎用的に使えるツール(シート間差分比較ツール)を提供。
・ソースコードの読み方。
・「あ、これなら少し勉強すればわかっかな?」という無責任な自信。

この記事を読んで得られないもの

・すぐに実務で活用できるコーディングの力
 (結局ゴリゴリ手を使って書かないとダメです…)

この記事の想定読者

 会社でランチを食べながら、もやっと「スキルアップしなきゃなぁ…」と、手持ち無沙汰でPC眺めている人。

ポイント

①「VBAでこんなことができる!」という体験
②ソースコードの読み方(環境設定+ノウハウ)
③VBA使いこなしの究極の結論。
④どうしたらツールがつくれるのか?

 この記事で言いたいことを4つのポイントでまとめました。
 以下に詳細を描いてゆきます。

記事の地図

「バカを殴るVBA」関連記事の地図です
https://qiita.com/mambo_ykhm/items/926ebd642c103317d84a

①「VBAでこんなことができる!」という体験

操作できる/ソースコードを読む練習用のVBAツールを作成しました
まんぼばかが作成して実務で使っていたツールです。 
まず動かしてみてください。
個人で勉強に使う限りにおいてはフリーです。

image.png

image.png

二つのシートの同じ場所を比較して、その結果をグラフィカルに表示します。シート範囲を二次元配列へ高速取得し、大量のデータ比較でもストレスなく比較できます。フォーマットが変わらずホンのすこしだけデータが変わっているようなシートの比較に超絶便利だと思います。
(具体例では、機器設定シートを少しだけ変更してあるようなモノの確認とか。)

ツール

 「シート差分高速比較ツール_Ver1.2_20250619.xlsm」

テストデータ

 「Testファイル(高速差分比較ツール).xlsx」

リンク

MD5sum

シート差分高速比較ツール_Ver1.2.zip
07f1d110b7b9a524fbb9927394af0586

MD5sumってのはファイルから算出されるハッシュ値です。
「提供されるファイルが提供者が意図した通りのものだよ」ってのを確認できます。使い方は以下記事を参考にしてください。
(MD5sumを確認しなくてもToolは使えます)

ツールコード詳細解説

コードの解説をのせました。図を多用、専門用語を少なく、なるべく「読み物」として成り立つように書いてみました。さらっと眺めて「へー」とかいってくれると嬉しいかも。

 
「バカを殴るVBA」 part1 ①シート差分高速比較ツールコード詳細解説
https://qiita.com/mambo_ykhm/items/ac1419e767cbf2e16616
 
 

動作機能はシンプルでわかりやすいと思います。
作業によってはこのツールを運用して劇的に作業時間減/正確性向上を果たせます。

修正を依頼した資料(Excel)について、不正確にしか直せない相手に対して
超短時間で突っ返すことができることから「バカを殴るツール(VBA)」と自分で呼んでました。

②ソースコードの読み方(環境設定+ノウハウ)

いくつかの環境設定や事前知識がいります。
(開発しやすい環境/デバッグの仕方等)

別記事を作成したのでそちらを参照

 
「バカを殴るVBA」補助資料 
https://qiita.com/mambo_ykhm/items/285cdbec3e09b32c3574

③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」勉強方法
https://qiita.com/mambo_ykhm/items/a87b38639d0fa82d337a

まとめ

①「VBAでこんなことができる!」という体験をする
  ➡Tool動かしてみて
②ソースコードの読み方(環境設定+ノウハウ)
  ➡運用中のツールを解析してみる。
    (実運用しているツールはノウハウの塊よ)

③VBA使いこなしの究極の結論
  A 二次元配列の高速取得ができること
  B 連想配列の理解
    ➡メモリ上で配列系の操作ができるようになると
     業務系ツール作成では無双できる。

④どうしたらツールがつくれるのか?
  A「設計の視点」を持つことが必要
  B「道具の使い方」のストックをある程度持つことが必要
    ➡ 意識して「どうしたら楽になるか」のストーリを想像
      + 細かくVBAのノウハウをストックしてゆく

以上
(part2に続く)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?