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

「♪~」
「何ですか、先生。その調子っぱずれの歌は」
「ゲール君、これは調子が外れているわけではない。和声(ハーモニー)のパートを練習しておるんじゃ」
「和声?」
「そうじゃ。小学校とか中学校で音楽の時間にやったじゃろうが」
「あったような・・・なかったような・・・で、何でそんな練習をしているんですか?」
「うむ、今度の日曜日に、煙草屋のミーちゃんとカラオケに行くことになってな。そこで合唱しようと」
「え?合唱?カラオケで合唱ですか?」
「そうじゃが、何か問題でも?」
「いえ・・・歌の好みは人それぞれですから」
「では、そういうことで」
「先生、どこに行くんですか?」
「もちろん、カラオケの練習に」
「遊びは仕事をしてからです。お待ちの患者さん、ど~ぞ~」
「やっぱり?」

今月の相談
 レポート用のファイルを使い回ししています。テキストボックスに信号名を入れて、オシロスコープの画像ファイルに張り付けているのですが、測定するICによって、信号名はそれぞれです。信号名が違う場合それを全部手作業で変更していますが、マクロで処理できれば、作業時間がかなり短縮できます。「REPORT.xls」の“CLEAR”を“CLR”に変更したいのですが、魔法の薬はないでしょうか?
図1●テキストボックスだらけのワークシート
図1●テキストボックスだらけのワークシート
[画像のクリックで拡大表示]

「先生、こいつは、努力というものを知りませんね」
「なんじゃ?藪からスティックに」
「丸投げですよ。丸投げ。マクロを作ろうとした気配もありません。すべて丸投げです。あたしだって、わからないなりに作ろうとはしてみますよ。いつも完成しないけど」
「そうじゃな。努力は大事かもしれん。じゃ!そういうことで」
「どこに行くんですか?先生!」
「え?ゲール君が気に食わんようじゃから、依頼はキャンセルになるかと思って、カラオケに・・・」
「駄目です。丸投げは気に入りませんが、患者さんは患者さんです」
「あら、そうなの?」
「そうです。ところで、テキストボックスって?」
「ゲール君。これまで、テキストボックスはかなりの頻度で登場したと思うがのぅ?」
「えぇ、ユーザーフォーム上のテキストボックスなら。しかし、画像ファイルの上に張り付けるテキストボックスって、何者ですか?」
「あぁ、そうか、なるほど。画像ファイルに張り付けるテキストボックスというのは、ちと語弊があるな。正しくは、ワークシート上に配置するテキストボックスではないかな?」
「あぁ、ワークシートの上で文字を入力するシェイプの事ですか」
「そうじゃ、それの事じゃろう。まぁ、テキストボックスと言っても、文字を入力するためのオブジェクトではない。どちらかと言えばラベルに近いオブジェクトなんじゃが、テキストボックスと定義されておるから、そう呼ばねば仕方ない。しかも呼び出しにはTextFrameプロパティを使うんじゃ。何ともややこしい」
「え?名前がテキストボックスなのに、TextFrameプロパティ?」
「であるね~」
「統一感の無いオブジェクト」
「ごもっとも」
「で?できるんですか?」
「え?」
「マクロは作れるのかと訊いておる」
「これは、これは、姫様。それがしにお任せくだされ。見事解決してご覧にいれましょう」
「期待しておるぞ。して、どのように?」
「TextFrameプロパティとCharactersメソッド、それとTypeプロパティを使いまする」
「ほほぅ」
「件のテキストボックスは、Shapeオブジェクトですので、Shapesコレクションのメンバーであります。これのTypeプロパティの値を調べれば、どのような種類のシェイプなのかがわかります。Typeプロパティの値が17の場合はテキストボックスですので、このオブジェクトのテキストをCharacters メソッドで取り出して、"CLEAR"だった場合は、"CLR"に変更します」
「うむ、ようわからんが、やって見せぃ」
「はっ!ちちんぷいぷいの・・・えい!」