2007年8月9日木曜日

第30回目 大きな表の一部抜粋(その3)

○第30回目 大きな表の一部抜粋(その3)

 さてかなめの処理です。
 使う変数を前回から抜き出してきたので、参照してください。

 見出し関係の数値です
 gyo_m_1=⇒横見出しのはじめの行数
 gyo_m_9=⇒横見出しの最後の行数。プラス+1はデータ部のはじめの行数
 gyo_m_cnt=⇒横見出しの行数
 
 必要とする縦項目の内容=⇒gyo_midashi(50)
 元の表の抜き出す行番号=⇒gyo_no(50)
 必要とする横項目の列記号=⇒retu_kigo_zen(50)
 概略表での横項目の列記号=⇒retu_kigou_go(50)
 必要とする横項目の列番号=⇒retu_no_zen(50)
 概略表での横項目の列番号=⇒retu_no_go(50)
 概略表の行の数(データ部のみ)=⇒gyo_cnt
 概略表の列の数=⇒retu_cnt

 今回の処理の手順は次のようになります。
 1.見出し部の作成(コピー)
 2.データ部の作成
 3.罫線の設定
 
 
 1.見出し部の作成(コピー)
 見出し分は全コピーとしました。そして、1行目からのコピーとしました。1行目から行見出しの始まるまでの情報も必要かなと思っています。
 コピー元のセル範囲を指定して、貼り付け先を指定してコピーです。
 コピー元のセル範囲は、retu_kigou_zen(i)の1からretu_kigou_zen(i)のgyo_m_9となります。
 貼り付け先は該当シートのretu_kigou_go(i)の1となります。
 (シートの選択を忘れずに。)
 コピーの機能をつけて、1からretu_cntまでくりかえします。
 範囲の指定は、列記号を持っているので、Range(retu_kigou_zen(i) & 1 ":"……).selectでいいでしょう。
 もちろん、Range(Cells(1, retu_no_zen(i)), Cells(……)).Select形式でもいいです。
 全コピーは操作マクロの記録でとってください。
 =⇒終了
 
 2.データ部の作成
 データ部は計算式で持ってきます。セルは横見出しと列は同じですが行が異なります。
 計算式は列記号による表記となりますので注意してください。
 また、別のシートのものを使うということも注意です。
 下の例を見てください。
Cells(gyo_m_9 + j, retu_no_go(i)) = "=" & sh01_name & "!" & retu_kigou_zen(i) & gyo_no(j)
 計算式を入れるところは、"cells"で指定します。
シート名の指定は、  sh01_name & "!" となります。
 行を埋めてから次の列へということになりますので、二重のfor文となります。
 上の計算式では、行の繰り返しに"j"を、列の繰り返しに"i"を使っています。
 jは、1からgyo_cntまで、iは、1からretu_cntまで、動かします。
 =⇒終了

 3.罫線の設定
 横見出し部は罫線を含めてコピーしましたので、そのままとします。
 データ部は、周囲の罫線、内部の縦線とします。
 これは範囲を指定して、
Selection.BorderAround LineStyle:=xlContinuous
Selection.Borders(xlInsideVertical).LineStyle = xlContinuous
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
 となります。
 一行目では、周囲の罫線を引きます。
 二行目では、内部の縦線を引きます。
 三行目では、内部の横線を消します。
 データ部の範囲の表記については大丈夫ですよね。
 =⇒終了
 
 ※列記号を列番号に変換する際に、英字の大文字しか考えていなかったので、小文字で指定すると変換されません。
 そこで、指定された列記号に対して次の操作をしてください。
retu_kigou_zen(i) = UCase(retu_kigou_zen(i))
retu_kigou_go(i) = UCase(retu_kigou_go(i))
 Ucaseは大文字にする関数です。元が大文字であってもそのままですので、どちらがはいっているかは気にしなくいいです。

0 件のコメント: