今回のサンプルは、Excel2002 / Excel2003 / Excel2010で動作を確認しました。

「秋深し 隣は何を する人ぞ」
「ブブ~」
「え?」
「先生、正しくは、秋深き 隣は何を する人ぞ です」
「ええ~!?」
「中途半端な知識は墓穴を掘りますよ」
「申し訳ない。しかし、どうしてゲール君は、芭蕉の句を知っているんだ?」
「学校で習った時に、変わった句だなと思って印象に残ったんです」
「ほほぉ、ゲール君でもそんなことがあるのかね?」
「当然です」
「他に何か印象に残った句はあるかね?」
「柿食へば 鐘が鳴るなり 法隆寺」
「正岡子規ですな」
「さじなめて 童たのしも 夏氷」
「山口誓子」
「目には青葉 山ほととぎす 初がつを」
「山口素堂・・・なるほど。そう言うことか」
「何ですか?先生」
「天高く馬肥ゆる秋ってことじゃ」
「はぁ?」
「食べ物が出てくる句ばかりじゃ」
「ぐっ!・・・もう、知りません!お待ちの患者さん、ど~ぞ~」
「ありゃ」

今月の相談
 発送伝票にシリアルナンバーを付与しようと思いマクロを組んだのですが、ただの連番では桁が増えていきます。桁が増えると色々と不都合がありまして・・・何か、いい知恵はないでしょうか?
図1●シリアルナンバーを作るフォーム 1桁
図1●シリアルナンバーを作るフォーム 1桁
図2●シリアルナンバーを作るフォーム 2桁
図2●シリアルナンバーを作るフォーム 2桁
図3●シリアルナンバーを作るフォーム 3桁
図3●シリアルナンバーを作るフォーム 3桁

「先生、数字の桁が増えるのは当然のことです。何を言ってるんでしょうねぇ。まったく」
「そうじゃな。数値としては桁が増えるのは当然のことである」
「でしょ?」
「しかし、それは人間の理解力を持ってしてじゃ。機械はそういうわけにいかん」
「はぁ?」
「例えば“abc56128”という文字列があったとしよう。この文字列から数字を取り出すには、どうしたらいいかな?」
「簡単ですよ。Right関数を使って、右から5文字切り出せばOKです」
「そうじゃな。では、“abc476”の場合は?」
「Right関数を使って、右から3文字切り出せばOKです」
「そうじゃな。では、もし、この二つの文字列が混在するとしたら、どんなコードを書くかな?」
「え?」
「アルファベットと数字が混在する文字列で、数字だけを取り出すコード。しかも数字の桁数がばらばらだとしたら?」
「ん~、ん~、文字の数だけ繰り返すループを作って、一文字ずつMid関数で切り出して、その1文字のASCIIコードが48~57の場合は数字ですから、変数に文字列結合して、それ以外の場合は文字列結合しなようにコードを書けば、取り出せます」
「うむ、数字のキャラクターには全角の文字もあるぞ」
「げ!」

「ゲール君のいうように、対処できないことはない。しかし、ちょいと面倒なコードを書かなければならない。それでも、この文字列を扱うのが一度だけなら、許容範囲だとしても、5カ所、10カ所と、色んなプロシジャの中で、この文字列を扱うとしたら?」
「パブリック変数にします」
「まぁ、それも一つの解決策ではあるな」
「でしょ?」
「しかしじゃな。桁数を固定しておけば、色々と面倒なことが起きなくて済む」
「まぁ・・・それは・・・」
「そしてじゃ」
「はい」
「そのシリアルナンバーの中に日付を入れておけば、そのシリアルナンバーを見るだけで、いつの伝票かわかる」
「おぉ!それは便利かもしれません」
「日付+続き番号で、シリアルナンバーとする」
「おぉ!」
「しかし、続き番号のところは、結局のところプログラムで文字数を合わせなければならん」
「ぐへっ」
「まぁ、それくらいは仕方ない」
「はい、そこのところは妥協しましょう」
「では、ちちんぷいぷいの~~~~~えい!」