○第109回目 計算式で参照されている場所に飛ばすことができないか(その3)
計算式から場所の情報をどうやってとるか。
考え方は、特殊記号、特殊文字を区切り記号とみなして、分解していくというものです。
簡単な例では、=a3+b3という計算式があれば、特殊記号=と+で、計算式からa3とb3を取り出すことができます。
次の式などはどうでしょうか。
=ROUND(AA91*LOOKUP($B91,シート01!$Z$7:$Z$112,シート01!$AA$7:$AA$112),2)
=IF(S10<>0,ROUND(V74*(0.5)*12*LOOKUP(INT(0.5),シート01!$AU$7:$AU$110,シート01!$AX$7:$AX$110)/1000,1),0)
規則性があって、何とか抜き出せそうな感じがしますね。
そういえば、昔、似たようなものをやったことがありますね。
エクセルマクロから、変数名を抜き出すというものでした。
あれは、第何回だったでしょうか。
ちょっとこのブログファイルをQXマクロの検索語を含むレコードの抜き出しで見てみましょうか。検索語としては、"変数名"としました。
第43回目 ちょっと寄道の2
第42回目 エクセルのファイルを分析する(その5:ちょっと寄道)
でした。
変換表を使って、じゃまものを削除または半角スペースに変換してみたところ、次のとおりとなりました。
AA91 $B91 シート01!$Z$7:$Z$112 シート01!$AA$7:$AA$112 2
S10 0 V74 0.5 12 0.5 シート01!$AU$7:$AU$110 シート01!$AX$7:$AX$110 1000 1 0
この後、半角スペースをひとつの","にかえるとそれらしくなりますね。
,AA91,$B91,シート01!$Z$7:$Z$112,シート01!$AA$7:$AA$112,2,
,S10,0,V74,0.5,12,0.5,シート01!$AU$7:$AU$110,シート01!$AX$7:$AX$110,1000,1,0,
ここからはQXマクロで処理することにします。
シート名がついたものは、シート名(TAB)座標、シート名がないものは(TAB)座標とします。一場所一行とします。
このやり方の場合は、QXエディタとエクセルの間を何回もいききしますので、操作がかったるくなりますね。
それほど大量なものではないので、あちこちいかないで、エクセルマクロでやるべきでしょうね。そんなには難しいマクロではありませんからね。
流れはこんな感じでしょう。
1.(処理したいセルにカーソルを置いて実行)セルの計算式を取得
2.計算式から、いらない文字列を削除したりして、場所情報をカンマで区切ったものを作る。あわせて、計算式の座標を取得しておく。
3.一つ一つの場所情報をシート名、座標にわけ、配列変数に格納。当該シートの場合は、場所情報にはシート名はないので、当該シート名をつける。
4.コンボボックスに場所情報をセットする。
移動と終了のボタンをつける。
5.場所が選択され移動のボタンが押されたら、当該場所に移動する。これを繰り返す。
6.終了のボタンが押されたら終了とする。
これで構想が出来上がりました。
2009年3月1日日曜日
登録:
コメントの投稿 (Atom)

0 件のコメント:
コメントを投稿