見るだけで増える辞書

LWP | 見るだけで増える辞書

見るだけで増える辞書

ナマズさんの登録確認が、なぜか新規開拓に

Copyright © 2026 LWP 山中 一弘

本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。

記事要約

「登録があるか、見るだけでいいんだけど」。ナマズさんの小さな頼みごとを引き受けたフナさん。ところが、確認するたびに妙なことが起こります。喜ぶ営業、止まる手元。そこへ、会話を聞いたアユさんがやってきます。

舞台は、顧客コードを扱うマクロの動作確認。テスト用の空のDictionaryから始まる、架空の職場の一幕です。Dictionaryは、名前に当たる「キー」と、その中身である「値」を組にして持つ仕組み。今回のコードはXとYです。

1 見るだけのはずでした

フナさんが頼まれたのは、登録の有無を確認すること。ナマズさんは、今日も話が早い。

ナマズさんがX社の登録確認を依頼。フナさんが検証用の空の辞書を確認すると、登録0件が1件になりXにEmptyが入る。営業より早いというナマズさんに、フナさんが喜ぶところではないと返す

図1|「追加はしませんよ」と言った、その直後。

2 確認するほど増えていく

フナさんは、増える場合と増えない場合を調べ始めます。ナマズさんも、解決策を考えてはいるのですが。

同じXを読み直しても件数は1のまま。別のYを読むと2件になり、XとYがともにEmptyで登録される。確認をやめればよいというナマズさんに、それでは仕事も進まないとフナさんが返す

図2|同じ名前なら増えない。別の名前なら増える。フナさんが手掛かりを拾う。

3 「読む」と「あるか」は別でした

「見る前に止めて」という声のする方へ、アユさんがやってきました。話を聞きながら、確認用マクロの一行に目を留めます。

アユさんがItemによる読み取りを指摘する。空の辞書で存在しないXをItemで読むとXが追加され、値はEmpty、Countは0から1になる。別の空の辞書でExistsを使うとFalseを返しCountは0のまま

図3|二つの例は、それぞれ新しい空の辞書で比較。Existsは追加済みのキーを消す操作ではない。

4 増やすのは、営業の仕事

フナさんは新しい辞書で確認をやり直します。ひと安心したナマズさんから、もう一つだけ質問が。

新しい辞書でExistsを使いXが未登録でCount0のままと確認する。空の値が登録されている場合もあるため、値とキーの有無を分ける。増やす方は自分がやるというナマズさんに、本当のお客様をお願いしますとフナさんが笑う

図4|登録の有無を調べる仕事と、お客様を増やす仕事。それぞれの持ち場へ。

まとめ

フナさんの手元が落ち着いたところで、ナマズさんは次の仕事へ。「見るだけ」の頼みごとが来たら、今度はあの一行を思い出せそうです。

今回の仕掛け

Scripting.Dictionaryでは、存在しないキーをItemで読み取ると、そのキーが追加され、値はEmptyになります。有無だけを調べるならExistsを使います。値も必要なら、Existsで存在を確かめた側だけでItemを読みます。

Emptyや0は、登録済みの値としても現れます。値が空、または0というだけで「キーがない」と判定しないことが肝心です。見つからなかった場合は、任意の表示名なら「未登録」と表示し、必須の顧客コードなら処理を止めて確認するなど、そのデータの用途で決めます。

付属サンプルと確認範囲

付属ZIPには、VBAの短い追試例、今回実行したVBScript、17項目の検証ログ、再現手順を収録しています。どちらのコードもテスト用の辞書を作るだけで、顧客データやExcelのセルを書き換えません。

2026年9月9日、Windows Script Host 10.0/VBScript 10.8.16384からScripting.Dictionaryを呼び出して確認しました。キーの追加、同じキーの再読、Exists、登録済みのEmpty・0、欠損時の代替値を含む17項目が合格しています。Excel VBAからの付属マクロ実行は未実施です。

出典メモ

元ネタTK-032「Dictionaryのキーが見つからないとき何を返すか」の本文と2026年9月7日追補から、「読むだけで増える」と「存在と値を分ける」を採用しました。人物の会話と顧客確認の場面は創作で、実在の顧客台帳で起きた事故の報告ではありません。

元ネタにあるTakiLibのdictGetの実装解説やオブジェクト戻り値は、この短編では扱いません。付属例はライブラリを使わずExistsで分岐する独立した説明用コードです。TakiLibの実行検証を行ったものではありません。

参考リンク

公式資料確認日:2026年9月9日。画像は更新されたLWPの人物参照を使い、Codex内蔵画像生成で制作しました。