古庄 潤(ふるしょう じゅん)

本業はエンジニア。ICに様々な機械をつなぎ,電流やら電圧を測定する。もちろん,これらの測定器もVBAでコントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロの鬼軍曹!

「先生,ご機嫌ですね?」
「じゃじゃ~ん,どうじゃ?」
「また,魚拓をとったんですか?」
「またとは何じゃ。53.5cm自己記録更新じゃぞ」
「はいはい,魚拓は食べられません。どうせ魚はタバコ屋のミーちゃんにあげたんでしょ?」
「何か問題でも?」
「セクハラドクターを支えているのは誰だと思っているんですか?」
「ん? セクハラをした覚えは無いぞ」
「何を言ってるんですか。こんなピチピチの制服を着せておいて」
「昔は,そうでもなかったと思うが?」
「洗ったら制服が縮んだんです。太ったわけじゃありませんからね」
「この前,体重計の上で悲鳴をあげておったではないか」
「黙らっしゃい! 次の方ど~ぞ~」

今月の相談
「Webページのソースから,画像ファイルの名前だけを取り出すように言われました。テキスト・ファイル・ウィザードでExcelに取り込んでから,不要な部分を消してリストにしようと思ったのですが,ソースの量がとても多くて面倒です。何かうまい方法はありませんか?」

「先生,テキスト・ファイル・ウィザードって何でしたっけ?」
「[ファイルを開く]ダイアログボックスで,開くファイルにテキスト・ファイルを指定したときに表示されるウィザードじゃ。ある程度体裁が整っているファイルなら,これで取り込んで,そのまま表として利用できる」
「おぉ~,それは便利」
「しかし,汎用ツールであるからして,自分の希望通りに取り込みできない場合もある」
「ふむふむ」
「これ,わしのまねをするでない」
「続けてくれたまえ」
「わしのまねを……。区切り文字を指定すれば,それで文字列を分割して,それぞれ独立したセルに取り込むことができる。しかも,列ごとに標準,文字列,日付の3種類にデータを分類できるんじゃ」

図1●テキスト・ファイル・ウィザード(1)
図1●テキスト・ファイル・ウィザード(1)

図2●テキスト・ファイル・ウィザード(2)
図2●テキスト・ファイル・ウィザード(2)

図3●テキスト・ファイル・ウィザード(3)
図3●テキスト・ファイル・ウィザード(3)

「なかなか,便利そうじゃな」
「これ! 読者の皆さんが混乱するではないか」
「い~じゃないですか。私もたまには偉そうにしてみたいんです」
「そういうことは,偉くなってからやりなさい」

「で,今回の依頼は,このウィザードではどうにもならないんですか?」
「そんなことはないんじゃが,ソースの量がかなり多いという相談じゃからなぁ」
「では,どうしましょう?」
「うむ,VBAがほぼVisual Basic(VB)と同等の能力を持っていることは知っておるな?」
「はい,それが何か?」
「VBは,テキスト・ファイルを処理するコマンドを持っておる。そして,VBAにもその能力は移植されておるんじゃ」
「ということは?」
「マクロでテキスト・ファイルを開いて,必要な行だけをセルに転記する」
「なるほど,そうすると処理の対象となるセルがぐっと減ることになりますね」
「そうじゃな。相談者のテキスト(Webページのソースコード)を見ると,画像ファイルのほかにも,表示する文字やタグ,リンクのURLなど,たくさんのステートメントが含まれておる。Excelにテキストを取り込むときに,これらの不要なステートメントを排除すれば作業はずいぶん楽になる」

「どうやって画像ファイルの名前がある行だけを取り出すんですか?」
「ゲール君,マクロを作る前の作業はなんじゃ?」
「法則を見つけることです」
「そうじゃ。法則やルールがなければ,プログラムで処理することは不可能に近い。画像のファイル名を含む行とその他の行との違いを見つければ,労せずしてマクロは導かれる」
「え~っと…あった! 画像ファイルを含む行には,先頭に『img』と『src』の文字列があります」
「うむ,『img』は画像(image)を表示するタグで,『src』はその画像ファイル(パス+ファイル名)をあらわす属性じゃ」
「『img』がザクで,『src』はグフ?」
「そうそう,わしはズコックが一番好きじゃった…って,おい! どちらもHTMLの用語じゃ。VBAで手一杯のゲール君には理解できんでも無理は無いが,興味があれば日経ソフトウエアでも読んでみるんじゃな。時々特集をやっておるから」
「宣伝ですか?」
「たまには,ゴマをすっておかんとな。わしらの将来がかかっておる」
「……」