○第129回目 計算式の分析での追加テクニック
いろいろと作業を行っていますと、当然想定外のことが起こって、マクロの修正を余儀なくされます。その中で、紹介しておくべきことがありました。
それは、セル群に名前をつけていて、その名前を使って計算式を記述しているという場合の処理です。
あるシートのある列(T列とします)全体を、qqqという名前で定義しています。
そして計算式は、
=qqq*12 と記述しています。
あれおかしいですね。計算式は一つのセルなのに、qqqはセル群ですね。どこをもってくるのでしょうか?
この場合は、計算式が入るセルの行数と同じ行のものが持ってこられます。
計算式のセルがB20であれば、T20*12という計算結果となります。lookup関数のような結果となります。すると、このような計算式の記述のほうが、簡潔でかつ、わかりやすくなりますね。
※名前をつけたセルを使うという例は、自分としてはあまりないので、多くのケースを網羅しているとはいえませんということを最初に断っておきます。
続けますと、そのように計算式を入れたところ、後で計算式を見てみると、なんと前にブック名がくっついているのです。
=book12!qqq*12
さて、テーマは、book12!qqqという場所にどう飛んでいったらいいのかということです。
答えは単純で、
Range("qqq").select です。
これで、該当するシートのT列が選択されます。
まずは、簡単ですね…、と思いきやこの処理が出来ずにエラーになる場合があるのです。100%正しい理由はわかりません。
・シートが違っている時に起きる。
・名前がつけられたすべてのセル群についてエラーになるのではない。
解明できなかったので、同じシートであれば、飛んでいける点を採用しました。その名前があるシートを見つけ、そこで飛べばいいのではないかということです。
エラーレジーム機能(エラーが生じた場合、次の行に飛びそこから実行)を使って、一番目のシートから試してみるのです、エラーであれば次のシートで試す。エラーでなければそこが正解。
コーディングでのポイントは次のとおりです。
On Error GoTo ErrorTrap
For k = 1 To ii_max9 '名前付きセルのあるシートを探す
Sheets(k).Select
errflag = 10
Range(p_xy_A1(i)).Select
If errflag <> 109 Then Exit For
Next
aaa4 = Selection.Address
gyo22 = Selection.Row
retu22 = Selection.Column
ErrorTrap:
errflag = errflag * 10 + 9
Resume Next
次は行数の把握です。
これは、前にもいったとおり、計算式のあるセルの行にします。
問題は、一つのセルに名前がついていた場合です。この場合は、行を求めるということは不要となりますね。
複数セルに名前がついている場合は、
Cells(計算式のあるセルの行,retu22)を使ってコーディングをします。
以上のことを盛り込むことで、名前がつけれたセル群に対する処理は可能となります。
※名前がついた場所へのジャンプ処理でのマクロ。参考まで。
Application.Goto Reference:="qqq"
※内容整理のためにしばらく休みます(2ヶ月ほど)。

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