Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12333 / 13645 ツリー ←次へ | 前へ→

【11006】改ページとヘッダーにセルの値 y1389 04/2/23(月) 19:50 質問
【11018】Re:改ページとヘッダーにセルの値 アイエネス 04/2/24(火) 15:36 回答
【11036】Re:改ページとヘッダーにセルの値 y1389 04/2/24(火) 18:41 質問
【11042】Re:改ページとヘッダーにセルの値 アイエネス 04/2/24(火) 20:56 回答
【11044】Re:改ページとヘッダーにセルの値 アイエネス 04/2/24(火) 23:19 発言
【11049】Re:改ページとヘッダーにセルの値 y1389 04/2/25(水) 10:58 質問
【11055】Re:改ページとヘッダーにセルの値 アイエネス 04/2/25(水) 18:08 回答
【11057】Re:改ページとヘッダーにセルの値 y1389 04/2/25(水) 18:56 お礼

【11006】改ページとヘッダーにセルの値
質問  y1389  - 04/2/23(月) 19:50 -

引用なし
パスワード
   こんばんは、VBA初心者のy1389です。
どうしてもわからないもので宜しくお願いします。

コード |氏名 |区分 |金額  |
0001  |太郎 |a-1 |10000
0001  |太郎 |a-1 |20000
0002  |次郎 |b-1 | 1000
0003  |花子 |c-1 | 300
0003  |花子 |c-1 | 500

上記のようなデータがsheetに入力された場合、
コードが変わったら改ページを挿入し、ヘッダーの左側に
氏名を表示したいのですが・・
イメージとしては
1ページ目
 太郎   一覧表      (ヘッダー)
コード |氏名 |区分 |金額  |
0001  |太郎 |a-1 |10000
0001  |太郎 |a-1 |20000
----------------------------------------
2ページ目
 次郎   一覧表      (ヘッダー)
コード |氏名 |区分 |金額  |
0002  |次郎 |b-1 |1000
-----------------------------------------
 花子   一覧表      (ヘッダー)
コード |氏名 |区分 |金額  |
0003  |花子 |a-1 | 300
0003  |花子 |a-1 | 500

宜しくお願いします。

【11018】Re:改ページとヘッダーにセルの値
回答  アイエネス  - 04/2/24(火) 15:36 -

引用なし
パスワード
   こんにちは。アイエネスです。

ご質問の件ですが、コードが変化したら改ページを挿入するマクロを作りました。
が、一つのシート内でページ毎にヘッダーを変えることはできませんでした。
改ページではなく、別シートにデータを移動するのなら可能です。
若しくは、ページ毎に印刷し、印刷する際にヘッダーを変えるとか。
データが多い際は、テストプリントすると無駄紙が大量に出るので、
コードが変わる毎に別シートにデータを移動する方法の方がいいと思われます。
どうしても一つのシートでやりたいと言われるのであれば、別ですが。
元シートから別シートにデータを移し、マクロ処理し、プリントした後に削除すればすむことだと思いますので。
まぁ、とりあえず作ったマクロコードをのせておきます。

Sub test()
Dim seru As Range 'データを比較されるセル
Dim i As Long '現在のデータ行

i = 2 'データの開始行。
Application.ScreenUpdating = False

'以下はA列がコードが入っている列とした場合です。
Set seru = Range("A" & i)
ActiveSheet.PageSetup.PrintTitleRows = Rows(1).Address
For i = 2 To Range("A65536").End(xlUp).Row
   If Range("A" & i).Value <> seru.Value Then
    Rows(i).PageBreak = xlPageBreakManual
    Set seru = Range("A" & i)
  End If
Next i
Application.ScreenUpdating = True
End Sub

未熟なコードですが、きちんと動くと思います。
こちらのテストではきちんと動きましたので。
また、何かあればどうぞ。

【11036】Re:改ページとヘッダーにセルの値
質問  y1389  - 04/2/24(火) 18:41 -

引用なし
パスワード
   アイエネスさん、ありがとうございました。
早速コピーして実行してみたところ、正しく改ページが挿入されました。
コードが変わる毎に別シートにデータを移動する方法とはどう記述すればいいのですか?
申し訳ありませんが、宜しくお願いします。

【11042】Re:改ページとヘッダーにセルの値
回答  アイエネス  - 04/2/24(火) 20:56 -

引用なし
パスワード
   >コードが変わる毎に別シートにデータを移動する方法とはどう記述すればいいのですか?
 遅くなりました。
以下のコードで動作するはずです。

Sub test()
Dim seru As Range 'データを比較されるセル
Dim i As Long '現在のデータ行
Dim presheet As String

i = 2 'データの開始行。

Application.ScreenUpdating = False

'以下はA列がコードが入っている列とした場合です。
Set seru = Range("A2")
ActiveSheet.PageSetup.LeftHeader = Range("B2").Value
Do Until i = Range("A65536").End(xlUp).Row
   If Range("A" & i).Value <> seru.Value Then
    n = Range("A65536").End(xlUp).Row
    presheet = ActiveSheet.Name
    Range("1:1,A" & i & ":A" & n).EntireRow.Copy
    Sheets.Add
    ActiveSheet.Paste
    Sheets(presheet).Range("A" & i, "A" & n).EntireRow.Delete
    ActiveSheet.PageSetup.LeftHeader = Range("B2").Value
    Set seru = Range("A2")
    i = 3
    Else
    i = i + 1
  End If
Loop
Application.ScreenUpdating = True
End Sub

【11044】Re:改ページとヘッダーにセルの値
発言  アイエネス  - 04/2/24(火) 23:19 -

引用なし
パスワード
   間違いがありました。

「Do Until i = Range("A65536").End(xlUp).Row」の行なんですが、「Do Until i > Range("A65536").End(xlUp).Row」です。

「=」だと、最後の1行が違っていた場合に分けられないのです。

【11049】Re:改ページとヘッダーにセルの値
質問  y1389  - 04/2/25(水) 10:58 -

引用なし
パスワード
   ありがとうございます。
さっそく試したところうまくできたのですが、
元のシートデータが消えてしまいます。
元のシートを残す方法はありますか?

【11055】Re:改ページとヘッダーにセルの値
回答  アイエネス  - 04/2/25(水) 18:08 -

引用なし
パスワード
   >さっそく試したところうまくできたのですが、
>元のシートデータが消えてしまいます。
>元のシートを残す方法はありますか?


ActiveSheet.Copy After:=ActiveSheet

をdoループの前に入れてください。

まぁ、手動でシートコピーしてからマクロ実行って手もありますが・・・

【11057】Re:改ページとヘッダーにセルの値
お礼  y1389  - 04/2/25(水) 18:56 -

引用なし
パスワード
   アイエネスさん、今回は大変お世話になり、
ありがとうございました。
今後とも宜しくお願い致します

12333 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free