2007年8月23日木曜日

第35回目 エクセルのファイルを分析する

○第35回目 エクセルのファイルを分析する

 本当は、こんなだいそれたことはできません、ということでおしまいです。
 それでは面白くないので、話を発展させます。
 
 われわれの業務では、エクセルのシート数がかなり多くなります。
 そして夏休みです。
 この二つのことから連想することは、……

 それは、引継ぎです。
 そのためにエクセルの内容を説明しなければなりません。100%は無理ですが、少なくとも鳥瞰図的なものは必要ではないでしょうか。
 ということで、試行錯誤的にそんなような気にさせるものを作ることに、チャレンジしましょう。これも定式化できないものなので、いいところをとってください。

 シートは何枚あって、シートとシートの関係はどうなっているのか。

 新しいシートを一枚作ります。
 そこに全シートのシート名を一覧表を作ります。
 同じようなグループはまとめ、二重罫線で囲みます。
 見た目アウトライン表記のように、シート名をずらして階層化させます。
 シート名の右側に必要なコメントを書きます。また、図で矢印でつながりを表してもいいですね。
 これは、到底今の力では出来ません。

 それである程度省略してマクロでは、

 1.全シートのシート名を一覧表を作ります。
 2.見た目アウトライン表記のように、シート名をずらして階層化させます。そのためずらす数(ここでは列数とする)を設定します。
 途中で色々な作業が入るので、これは別々のマクロとなります。

 ということだけにします。

 ということでかなり簡単になりました。

 取極めをしておきましょう。
 シート名一覧を作るシートは手動で作りますが、D5からシート名を下に向かって書き込みます。シート番号も必要なので、D列がシート番号、F列がシート名になります。
 (E列はあとで使うので、ずらしています)
 
 メインの処理は次の通りとなります。
 
lr005 = 5: lc004 = 4     '後での修正が楽なように定数は変数化して持つ

Cells(lr005-2,lc004+1) = ActiveWorkbook.Name 'ブック名
  For i = 1 To Sheets.Count 'シートの数だけ繰り返す。グラフを含める
Cells(lr005+i-1,lc004) = i  'シート番号をセルへ記入する
Cells(lr005+i-1,lc004+2) = Sheets(i).Name 'シート名をセルへ記入する
Next

 (注)シート数は、"Sheets.Count"に入っています。
   Sheets.CountのかわりにWorksheets.Countをつかうと、グラフは含まりません。

 これで1.はおしまいですが、さびしいのでリンクを張ってみます。

Cells(lr005+i-1,lc004+2).select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
Sheets(i).Name & "!A1", TextToDisplay:=Sheets(i).Name

を、nextの前に入れてください。


 2.アウトライン表記的に列下げをする。各シート名ごとに、下げる列数を入力します。E列に入れます。これは手動です。
 マクロの中で1単位ごとの移動列数を入れます。
 列下げ数値の範囲を設定してからマクロを動かします。
 列下げ数値がはいっている座標がわからないので、座標の取得から入ります。

 ・座標の取得
AAA = Selection.Address
p1 = InStr(AAA, ":")
AAA1 = Left(AAA, p1 - 1)
AAA9 = Mid(AAA, p1 + 1)
retu1 = Range(AAA1).Column
gyo1 = Range(AAA1).Row

retu9 = Range(AAA9).Column 'retu1と同じはず
gyo9 = Range(AAA9).Row

 ・挿入するセルの基本単位の入力
tan_i = InputBox("挿入するセルの基本単位を入れてください。通常は1 ", , 1)

 ・セルの挿入
For i = gyo1 To gyo9
kaisuu = Cells(i, retu1) * tan_i
If kaisuu <> 0 Then
For j = 1 To kaisuu
Cells(i, retu1 + 1).Select
Selection.Insert Shift:=xlToRight
Next j
End If
Next i

 これも、これでおしまい。簡単すぎましたね。

 これも簡単すぎましたので、おまけです。

 まずはアイデアのみですが、各シートのA1にそのシートの説明を必ずコメントで記入することを指示するのです。そしてこのコメントを取得して、これも表示するというのはどうでしょうか。横に長くなりますね。折り返して表示で行の高さをフリーにしておくと行が高くなってうまくはいるかもしれません。その分縦長になりますけどね。
 また、コメントを作るという面では、コメントをテキストエディタでつくっておき、クリップボード経由で自動的に各シートのA1に貼り付けるというのも考えられます。これは一旦どこかにクリップボードの内容を貼り付けてからでないと出来ません。現時点ではクリップボードの内容を直接変数値に入れるやり方がわかりませんので。
 コメントの貼り付けと列ずらしの処理の前後関係は悩みますね。列ずらしをしてから、コメントを貼り付けるという順番がよろしいようですね。ということは別マクロとなりますね。

 ということで続きは次回へ。

0 件のコメント: