○第108回目 計算式で参照されている場所に飛ばすことができないか(その2)
続きです。
場所の与え方です。
まずは試験運転です。
セルを2列用意して、シート名と座標を書き込みます。現在のシート名と同じ場合はヌルでいいです。複数行書き込みます。
この場所情報の範囲を選択してから、マクロを実行させることとします。
三つの配列変数を用意します。シート名、座標、それらを結合したものです。
選択範囲の座標を求め(よく出てくる定番のマクロです)、セル内の情報を配列変数に取得します。シート名がヌルの場合は、当該シート名を入れてください。
当該シート名は、= ActiveSheet.Nameとなります。
二つの情報を結合してください。
p_mm0(i) = p_mm1(i) & " --- " & p_mm2(i)
p_mm1(i);シート名 p_mm2(i);座標
そして、UserForm1.Showで、ユーザーフォームマクロに引き渡します。
※ユーザーフォームマクロには変更はありません。
さて、コンボボックスで場所が選択され、こちらのマクロに戻ってきました。
その情報の場所に移動します。これは本当に簡単です。
配列変数の添え字は、p_bですので、それを使って、あっという間です。
'選択先に飛ぶ
Worksheets(p_mm1(p_b)).Select
Range(p_mm2(p_b)).Select
ここまでくると、このセルの値と計算式は、簡単に取得できますね。
値と計算式を配列変数に入れておけば、計算式の内容一覧表を作れることになります。
※ここで面白いことに気がつきました。もっと早く気づいているべきなのかもしれませんが、変数値が当該マクロを終了してもそのまま残っているのです。
パブリック変数だからのようです(今までまったく気がつきませんでした)。
最初は場所の情報のあるセルを選択して実行します。そして、その中から一つ指定して、その場所に移動しました。そこで終了します。
次の違う場所に行きたい、といったときどうなるのでしょうか。データが残っていればそれを使えばいいですよね。
ちょっとした修正(指定しているセルが一行である場合は、情報の取得は行わない)を施しておくと、二回目以降はマクロの実行だけでいいのです。
次は、もっとレベルアップして、シート名、座標を与えるのではなく、直接、計算式から取得するという機能を付加することにチャレンジしてみましょう。
2009年2月22日日曜日
登録:
コメントの投稿 (Atom)

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