[[20090517132548]] 『マクロで行数を毎回決めたい』(そうすけ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで行数を毎回決めたい』(そうすけ)

初めましてよろしくお願い致します。

質問内容ですが、

     A   B C
 1  東京 1 6
 2  千葉 2 7
 3  小計  
 4  (空白)
 5  奈良 2 7
 6  小計  
 7  (空白)
 8  合計
 9  徳島 1 6
 10 香川 2 7
 11 小計  
 12 (空白)
 13 (空白)
 14 岐阜 2 7
 15 小計  
 16 (空白)
 17 合計

 上記の表があります。
 例えば、
 最初の東京〜合計まで、徳島〜合計までというように
 始まりから合計までを毎回20行に固定したい。
 20行以下なら小計と合計の間に行を挿入したいのです。
 20行以上なら2つの空白行を1行のこして20行になるよう削除
 それでも、20行以上なら東京〜空白までを20行に
 奈良〜合計までを20行に
 20行以下なら空白挿入は同じです。

 ただし、空白の行の数は毎回一定ではないんです。
 先頭〜各合計までのデーターは、50pほどになる予定です。

このようなことをするには、どのようなコードを使えば可能でしょうか?

できれば、同じシートを加工したいんですが、
別シートに抽出したから行った方が簡単でしょうか?

ご教授お願い致します。

  


 こんにちは。かみちゃん です。

 > 最初の東京〜合計まで、徳島〜合計までというように
 > 始まりから合計までを毎回20行に固定したい。

 提示されたシートレイアウトは、マクロ実行前のものだと思いますが、マクロ実行後は、どうなったらいいのか
 同様にシートレイアウトで説明していただけませんか?

 > 20行以下なら小計と合計の間に行を挿入したいのです。

 これはなんとなくわかるのですが、

 > 20行以上なら2つの空白行を1行のこして20行になるよう削除

 2つの空白行ということですが、2つ以上の空白という意味ではないのですか?
 つまり連続している空白行をひとつにするということだとは思いますが、ひとつにしたからと言って、
 20行になるとは限りませんよね?

 > 20行以上なら東京〜空白までを20行に
 > 奈良〜合計までを20行に

 これがよくわかりません。
 東京から空白、奈良〜合計なら、必ず20行以内になるということなのでしょうか?

 (かみちゃん)
 2009-05-17 18:47


かみちゃんさんありがとうございます。
 分かりにくい説明で申し訳ありません。

>同様にシートレイアウトで説明していただけませんか?

 実行後ですが、基本は1ページ20行固定です。

     A   B C
 1  東京 1 6
 2  千葉 2 7                   ※1 A1:A3
 3  小計  
 4  (空白)      (a)
 5  奈良 2 7
 6  小計                     ※2 A5:A6
 7  (空白)
 8  (空白)
 9  (空白)            (b)
 10 (空白)
 11 (空白)
 12 (空白)
 13 (空白)
 14 (空白)
 15 (空白)
 16 (空白)
 17 (空白)
 18 (空白)
 19 (空白)
 20  合計        合計までを20行で1ペーシ   ※3 A20
 ---------------------------------------
 21  徳島 1 6
 22 香川 2 7
 23 小計  
 24 (空白)          (a)
 25 (空白)
 26 岐阜 2 7
 27 小計  
 28 (空白)
 29 (空白)
 30 (空白)          (b)
 31 (空白)
 32 (空白)
 33 (空白)
 34 (空白)
 35 (空白)
 36 (空白)
 37 (空白)
 38 (空白)
 39 (空白)
 40 合計
 ---------------------------------------------
 41
 42 続く

 > 20行以下なら小計と合計の間に行を挿入したいのです。
 >これはなんとなくわかるのですが、

 これは、上の実行後のように、小計と合計の間に20行になるまで毎回空白行をいれたいということです。

 > 20行以上なら2つの空白行を1行のこして20行になるよう削除
 >2つの空白行ということですが、2つ以上の空白という意味ではないのですか?
 >つまり連続している空白行をひとつにするということだとは思いますが、ひとつにしたからと言って、
 >20行になるとは限りませんよね?

 小計から次の項目(a)と小計から合計まで(b)の空白行が毎回1行ではなく、2行、3行もあります。
 ですので、合計までを20行にしたいので
 空白行が1行以上あるなら、20行になるまで(a),(b)の空白行を1行は残し削除したい。

 > 20行以上なら東京〜空白までを20行に
 > 奈良〜合計までを20行に
 > これがよくわかりません。
 >東京から空白、奈良〜合計なら、必ず20行以内になるということなのでしょうか?

 本来なら、合計までが20行(※1+(a)+※2+(b)+※3)なんですが、
 ※1の範囲が多いため、※1+(a)で、20行で1ページとし
 ※2+(b)+※3で、1ページとするように条件もつけたい。

 このときも、空白行は1ページ 20行になるように
 それぞれ(a),(b)とも挿入と削除をしたいです。

 わかりにくいかと思いますがよろしくお願い致します。


 こんにちは。かみちゃん です。

 コメントが遅くなり、申し訳ありません。

 > 小計と合計の間に20行になるまで毎回空白行をいれたいということです

 内容をあまり、しっかり検討できていないので、不具合があるかもしれませんが、例示のパターンだと
 以下のようなコードでできると思います。

 Sheet1 という名前のシート を 元データとして、結果もSheet1に出力するようにしています。

 Sub Sample()
   Dim WS1 As Worksheet
   Dim WS2 As Worksheet
   Dim lngRow As Long
   Dim lngMaxRow As Long
   Dim lngRow20 As Long '20行毎の行番号

   Set WS1 = Worksheets("Sheet1")
   Set WS2 = Worksheets("Sheet1")

   lngMaxRow = WS1.Range("A" & WS1.Rows.Count).End(xlUp).Row
   lngRow = 1
   Do While lngRow <= lngMaxRow
     If WS1.Cells(lngRow, "A").Value = "合計" Then
       lngRow20 = (Int(lngRow / 20) + 1) * 20
       WS1.Rows(lngRow).Resize(lngRow20 - lngRow).Insert Shift:=xlDown
       lngMaxRow = lngMaxRow + lngRow20 - lngRow
       lngRow = lngRow20
     End If
     lngRow = lngRow + 1
   Loop
   MsgBox "終了"
 End Sub

 (かみちゃん)
 2009-05-20 21:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.