○第157回目 範囲に名前を付ける。その名前を使った処理
印刷関係のマクロはよく使います。なかでも一、二を争うのが、範囲印刷とページ指定印刷です。
このうちの範囲印刷での話し
エクセルでは行列をいろいろと挿入して、表のかたちを修正していきます。最初に最終形ができていなくても、この機能があるので、後で修正がききます。このためやりながら考えていくということができます。
これはいいのですが、範囲印刷で座標で場所のなかで列・行の挿入・削除などがおきると、印刷範囲が狂ってしまい、印刷範囲の座標をもう一度求めなおさなければならなくなります。
あれこれ考えていたのですが、あるとき、ひらめいて、名前を付けていると、その後の列行の挿入・削除でどうなるのかな…。
やってみたところ、名前を付けられた範囲が、列行の挿入削除に伴い変わるのです。
これです。
操作のイメージです。
0.範囲を指定して、そこに名前をつけ、その名前を、その範囲のそばのセルに入れておきます。
・名前があるセルを指定して、範囲印刷をします。
範囲印刷のマクロに若干修正が必要ですが、この機能は、便利です。
別にふたつの機能も考えてみました(これまでの機能を1として加えた)。
1.指定した範囲を、指定したセルに名前として書き込む
2.名前のあるセルを指定して、その範囲を選択する。
3.名前を全部表示させて、その中から選択した場所に飛ぶ。
まずは、1.から
名前をいちいち考えるのは面倒なので、自動的に決めます。PR_先頭座標としました。これなら、ほとんど重複しないでしょう。
どう書くのかというと、これは知っているかいないかだけのことです。
まず選択された範囲の座標を取得します。
Rng = Selection.Address(ReferenceStyle:=xlR1C1)
名前を設定します。
ActiveWorkbook.Names.Add Name:="PR_" & AAA1, RefersToR1C1:="='" & _
shname0 & "'!" & Rng
AAA1には範囲の先頭セルの座標が入っています
shname0 には当該シート名が入っています。
座標は、R1C1形式でなければいけないようでした。
2.名前のあるセルを指定して、その範囲を選択する。
これは簡単です。
bbb = Selection.Value
Range(bbb).Select
3.名前を全部表示させて、その中から選択した場所に飛ぶ。
まずは範囲を取得しなければなりません。どう書くのかというと、これも知っているかいないかだけのことです。
i = 1
For Each MyName In ActiveWorkbook.Names
cell_name1(i) = MyName.Name '定義された名前の名称
cell_name2(i) = MyName 'セル範囲の座標であり、頭に = がついている。シート名+座標
cell_name2(i) = Mid$(cell_name2(i), 2)
cell_name0(i) = cell_name1(i) & "--" & cell_name2(i)
i = i + 1
Next
あとは、インプットボックスにcell_name0(i)を表示し選択するだけです。
選択した場所の名前は、cell_name1(i) となります。
指定した番号の名前に飛ぶのは、2.でやったとおりです。
おまけです。
指定した名前の削除をします。
番号指定は、*をつけることにして飛ぶ場合と区別します。
Range(cell_name1(name_no)).Select
ActiveWorkbook.Names(cell_name1(name_no)).Delete
※入力値から、*をとることを忘れないように。
2010年9月18日土曜日
登録:
コメント (Atom)
