🔖

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

に公開

この資料は「Excel-VBA(プログラム言語)を勉強してみようかな?」とヤル気を起こさせることを目標とした記事です。
 
 
「バカを殴るVBA」関連記事の地図
https://zenn.dev/mambo_ykhm/articles/f3dca31da309d0

まんぼばかが本業(IT系おしごと)での勉強会用に作った資料の焼き直しです。

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

この記事を読んで得られないもの
・実務で活用できるコーディングの力
 (結局ゴリゴリ手を使って書かないとダメです…)

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

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

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

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

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


テーブル引き合わせツール input
 

テーブル引き合わせツール output

テーブルA(オレンジ)とテーブルB(緑)の情報を引き合わせます。
引き合わせ情報(Key)は赤枠の列です。(列は●で指定できます)
output側でKeyが同じ情報が同行に揃えらえている事が確認できます。

動作はシンプルでわかりやすいと思います。
「テーブル引き合わせ」というから堅苦しそうに感じますが、
「クラス名簿」と「テストの点数順結果」を名前で引き合わせるんだなーくらいの事を想像してもらえればよいです。

単純なんですが、この機能をVBAで実現できないが為に「(全力出して手検索引き合わせ→人海戦術残業過多→日本のDXは遠い…」とポンコツムーブをかましているところが多いかと。

ツール

「テーブル引き合わせツールVer1.0_20250621.xlsm」

リンク

https://drive.google.com/drive/folders/1YrvTawg2OFXOddIcxoq769HY-aha37cF?usp=drive_link

MD5sum

e359172bc2b48905ea754a1849bea131

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

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

「バカを殴るVBA」 part2 テーブル引き合わせツールコード詳細解説
https://zenn.dev/mambo_ykhm/articles/1010bde08e0e78

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

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

「バカを殴るVBA」補助資料
https://zenn.dev/mambo_ykhm/articles/0b17c741b73163

③VBA使いこなしの究極の結論

個人的経験から、Excel-VBAで業務ツールを作る際に「これがゴールじゃね?これ知ってば無双できね?」という機能があります。

A 二次元配列の高速取得ができること。
B 連想配列の理解

の二つです。

A:二次元配列の高速取得
 
→→ part1でやったのでそちらを参照

B 連想配列の理解
 
キー(添え字)に文字列などの数値以外のデータ型も使用できる配列 
・テーブル(表)の引き合わせ
・データの一意性の確認
に強力につかえます。

連想配列の機能を分かりやすく「クラス名簿」と「テストの点数順名簿」を引き合わせる例で考えてみます。

「クラス名簿」を元資料にしてテスト点数の情報を追加したいとします。
「クラス名簿」と「テストの点数順名簿」と二つのテーブルがあるのでこれを名前で引き合わせられたら簡単に実現できそうです。

連想配列を使った引き合わせを考えると、まず「テストの点数順名簿」の名前の列に重複が無いことを確認します。データの一意性を確認といいます。
(同じテストの点数表で同人物がいたらおかしいでしょ?山田一郎:98点 , 山田一郎:37点と複数含まれててたらデータとしておかしいでしょ?)

名前に重複が無いことが確認できたら、「名前」と「名簿の行番号」をセットで登録してゆきます。
最後まで登録が完了すると、「テストの点数順名簿」に対する
「名前」:「行番号」の引き合わせデータが完成します。(これが連想配列)

くる〇たかし君 → 【連想配列】→ 行番号19番だよ  とできます。
これ、つまり連想配列を作ってしまえば「○○君はxx番だからそのデータをテストの点数順名簿を引っ張ってくれば引き合わせできるよ」という事です。

この記事「バカを殴るVBA part2」では連想配列をつかったテーブル引き合わせToolの実例を示しています。
業務改善用Tool作成のヒントになれば幸いです。

④どうしたらツールがつくれるのか?

有用なツールを作るには2つの観点が必要です
A:ツールの設計
そのツールを実現すると「なにが」「どのくらい」
楽になるのか?を見立てる。その見立てがないと
インプット/処理/アウトプットがブレる。

B:道具(機能)のストック
「AとBを組み合わせりゃこの機能できるだろう」という知見
これがないとツール化の想像すらできない。

以下で連想配列を使ったツールを設計~作成~運用した実例をあげてゆきます。

事前情報:
・機器の管理表(Excelファイル)がある。いっぱいある。正が分からない。
・ファイル単位で新しい/古いを判断できない。
   (1ファイル内に正しい情報と正しくない情報が混在している)
・引き合わせキーは共通している(機器シリアル)

どうしたら楽になるか?
どの情報が正しいかわからないなら、関連する情報を全部串刺しにし
示させるだけのツールがよさそう。

(この記事では単純化して2テーブルの引き合わ機能にしてます)

検索情報で串刺しにするイメージ

勉強方法

勉強方法をまとめました。
本記事は「初学者にいきなり運用レベルのツールをぶつける」がテーマです。つまり「よくわかんないものに対してどのように勉強していけばよいか」という事を書きました。

「バカを殴るVBA」勉強方法
 https://zenn.dev/mambo_ykhm/articles/6884663a0ceeae

まとめ

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

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

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

以上

Discussion