2008年1月5日土曜日

第72回目 図形編(その10) 図形にかかる補助機能の番外と思いましたが…

○第72回目 図形編(その10) 図形にかかる補助機能の番外と思いましたが…


 第72回目は、"図形にかかる補助機能の番外"でもやろうかと思っていましたが、図形のテーマでの話が長くなってしまったので、その他機能の紹介はこれで打ち切りにします。
 今回は、じゃあどんな事例に活用できるのかということをまとめてみます。
【一般的な手順】《 》内はマクロ
 1.テキストをセルに書き込む。
 2.テキストの範囲を指定して図を作成。《図形の複数一括作成》
  図形の種類が異なる場合は複数にわけで作成します。
 3.テキストを取得しセルに書き込みます。《図形のテキストの取得_書き込み》
  位置を記入する場所を確保されます。"図形関係のパラメータ設置エリア"を作ってそこで管理するといいです。
 4.図のテキストに図番号を追加する。《図形のテキストに図形の番号を追加_削除》
 5.位置を決める。A1座標で与えますので、"位置決めのツール"を使ってもいいし、適当に決めてもいいです。数が多いときは"位置決めツール"がいいと思います。図形の移動_場所を指定する》
 7.関連する図形をコネクタで結ぶ。その後で3.も行ないます《図形をコネクタで結ぶ》
 8.サイズの変更、図形に色を塗る。《図形のサイズの変更》《図形_色の選択》
 9.図を追加する。2.で出来ます。その後で3.も行ないます
 10.不要な図を削除する。その後で3.も行ないます《図形の削除》
 (注)図番号とは、図の上下の位置関係を表したものだったんです。番号を大きなものを小さなものに重ねると、小さい番号の図が隠れてしまいます。図番号とは、重ねた時の上下の位置関係を示すものです。したがって、図形の順序(最背面へなど)を変えてしまいますと図番号が変わってきてしまいます。4.を二回動かして、図形番号の表示を更新してください。また、"図形関係のパラメータ設置エリア"などのテキストをクリアして、3.も合わせて行ってください。

 参考に、現時点におけるメインのマクロからの枝分けを載せておきます。
 '処理区分の入力。
  kubun = InputBox("処理区分を入れてください。" & vbCrLf & _
  "1=⇒図形の複数一括作成" & vbCrLf & _
  "2=⇒図形のテキストの取得_書き込み" & vbCrLf & _
  "3=⇒図形のテキストの修正" & vbCrLf & _
  "4=⇒図形をコネクタで結ぶ" & vbCrLf & _
  "5=⇒図形の移動_整列もどき" & vbCrLf & _
  "6=⇒図形のサイズの変更" & vbCrLf & _
  "7=⇒図形の移動_場所を指定する" & vbCrLf & _
  "8=⇒指定した一つの図形の移動" & vbCrLf & _
  "9=⇒図形のテキストに図形の番号を追加_削除" & vbCrLf & _
  "10=⇒図形の削除" & vbCrLf & _
  "11=⇒コネクタの削除" & vbCrLf & _
  "12=⇒ライン_コネクタの修飾" & vbCrLf & _   '太さ、矢印の向き
  "13=⇒色の選択" & vbCrLf & _
  "14=⇒図形の順序" & vbCrLf & _
  "15=⇒図形の外枠の設定_消去" & vbCrLf & _
  " " & vbCrLf _
  , xpos:=2000, ypos:=3000, Default:=1)

 上のサブルーチン一覧(作成例なので11個に限定した)を、このシステムを使って図で表してみました。また、全体を"図形の作成"として囲みました。全体としての縦長の一つの島の上に、11個のサブの図形がのっかっているというイメージです。色づけもしました。

 テキストは正味のものとして用意されている段階から行なうと、時間的には、どうでしょうか…。
 今までのマウス主体のやり方と比べると、4分の1以下の時間でできたような気がします。その理由は、11個のサブの図形が一括して処理できるので、1個1個の処理とか、全体を指定しての処理とかが早くできるからです。
 ここでいうサブの数が多ければ多いほど差が大きくなっていくでしょう。
 あと大切なことは、疲れないということです。
 なお、"8.サイズの変更"については、見当がつかない場合とか微妙な場合などは手作業のほうがいいと思いました(1回手作業で行いました)。

 ※前回問題提起した、ActiveSheet..Shapes.Range(Array(1, 2, 3)) …にかかる記述の冗長性の問題については、解決しました。論理的な文一つで記述することが出来ました。その前に若干のおまじないはしましたが…。
 前回問題を提起したところ、アイデアがひらめきました。違う感覚で見てみるのも大切ですね。
'整列対象の図形の設定
  ActiveSheet.Shapes.Range(Array( _
  nn(0), nn(1), nn(2), nn(3), nn(4), nn(5), nn(6), nn(7), nn(8), nn(9) _
  , nn(10), nn(11), nn(12), nn(13), nn(14), nn(15), nn(16), nn(17), nn(18), nn(19) _
  , nn(20), nn(21), nn(22), nn(23), nn(24), nn(25), nn(26), nn(27), nn(28), nn(29) _
 《中略》
  , nn(80), nn(81), nn(82), nn(83), nn(84), nn(85), nn(86), nn(87), nn(88), nn(89) _
  , nn(90), nn(91), nn(92), nn(93), nn(94), nn(95), nn(96), nn(97), nn(98), nn(99) _
  )).Select
 100個まで可能としました。論理的には一文です。
 そして、おまじないとは、
 z_no = no9 - no1 + 1
 j = no1
 For i = 0 To ll099
  nn(i) = j + (i Mod z_no)
 Next i
 nn(i) に処理対象となる図形番号を、繰り返し入れていくのです。
 (この方法でも問題があることが後ほどわかりました。十分にデバックをしていませんでした)

0 件のコメント: