Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : Excel 2010)
新ブックにシートを追加してコピー
投稿日時: 18/05/14 13:20:18
投稿者: m024240

困った時はいつもお世話になっています。
 
シート:G、シート:【1-6-1】があり、
シートGからシート【1-6-1】へ関数を用いて転記しています。
 
シートGのA列に”1”をいれて、"1"の入った行を、シート【1-6-1】に
差し込むような形で連続印刷を設定しました。
ファイルでも保存がしたくて、下のコードをいじって、
新規ブックに、シートをどんどん追加して(最大50くらい)
1つのファイルにしたいのですが、どのように改良するとよいでしょうか?
書式・印刷設定をそのままでコピーしたいです。
「 ’印刷する」のところを変えるのだと思いますが・・・。
(コードは一部分となっています)
 
よろしくお願いします。
-------------------------------------------------------------------------------
With Worksheets("G")
        For Each r In .Range("A2", .Range("A" & .Rows.Count).End(xlUp)) '
            If r.Value <> "" Then
                '差込先のセル = 差込元のセル のかたちで指定(※)
                Worksheets("【1-6-1】").Range("H4").Value = r.Offset(0, 2).Value
                Worksheets("【1-6-1】").Range("I4").Value = r.Offset(0, 3).Value
                '印刷する
                Worksheets("【1-6-1】").PrintOut
             End If
        Next r
end with
---------------------------------------------------------------------------------

回答
投稿日時: 18/05/14 15:33:53
投稿者: WinArrow
投稿者のウェブサイトに移動

>1つのファイルにしたいのですが、どのように改良するとよいでしょうか?
 
1つのファイルにする
という意味がよくわかりませんが、
 
シート:【1-6-1】
の内容を、そっくり新しいブックで保存する
ってことでしょうか?
また、印刷もする、ブックも保存するって考えているのですか?

回答
投稿日時: 18/05/14 17:30:11
投稿者: Suzu

確認です
 
 
既存ワークブックファイル
  ワークシート 「G」、「1-6-1」
 標準モジュール 「Module1」
 
 
新規ワークブックに
  既存ワークブックのワークシート「1-6-1」をコピーし
  既存ワークブックのワークシート「G」 の A列が空白以外の値の C列、D列の値を代入
   Gを下方向に検索し、Aが空白以外の値の繰り返し

回答
投稿日時: 18/05/15 12:15:14
投稿者: もこな2

たぶんですが

引用:
誤 シートGからシート【1-6-1】へ関数を用いて転記しています。
正 シートGからシート【1-6-1】へマクロを用いて(セルの値を)転記しています。
ということじゃないでしょうか。
 
その上で、マクロで値の転記とプリントアウトを行っているんだけど、併せてプリントアウトしたシートを丸ごと別ブックにコピーして蓄積管理したいみたいな感じなのでないかと推測します。
 
思うに、データ(レコード)とフォーマット(差し込まれるレイアウト)は別々に管理した方がいいような気がしますけど、お望みのことができないわけではないと思いますので勉強がてら作ってみるのもいいかもですね。
 
踏まえて、やり方はいろいろあると思いますが、たとえば↓みたいな感じは如何ですか?
 
Sub Sample()
    Dim i As Long
    Dim dstWB As Workbook: Set dstWB = Workbooks.Add
    Dim Sh As Worksheet: Set Sh = ThisWorkbook.Worksheets("G")

    With ThisWorkbook.Worksheets("【1-6-1】")
        For i = 2 To Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row
            If .Cells(i, "A").Value <> "" Then
                .Range("H4").Value = Sh.Cells(i, "C").Value
                .Range("I4").Value = Sh.Cells(i, "D").Value

                .PrintOut

                .Copy After:=dstWB.Worksheets(dstWB.Worksheets.Count)
                dstWB.Worksheets(dstWB.Worksheets.Count).Name = i
            End If
        Next i
    End With

    Application.DisplayAlerts = False
    For i = Application.SheetsInNewWorkbook To 1 Step -1
        dstWB.Worksheets(i).Delete
    Next i
    Application.DisplayAlerts = True

    '↓要らないかも(新規ブックがアクティブになってるのが気になる場合用)
    ThisWorkbook.Activate

End Sub

 
見れば解ると思いますが、一応補足。
 
(1)
変数「i」を使い回したかったので、For Each Nextステートメント から For Nextステートメントに変更してます。
 
(2)
ブック間の操作が混ざるので、ブックの修飾を明示的に記述するよう修正。
 
(3)
【1-6-1】シートの操作が多いので、Withステートメントの対象?はこちらにして、「G」シートは変数に格納して使用(記述)するように変更。
 
(4)
別ブックにシートを丸ごとコピーする都合上、シート名は同じになります。
(実際にはExcel君が(1)とかつけてまったく同じにならないように調整してくれますが・・・)
そのままでよければ別に名前を変えなくてもよいとおもいますが、見づらいと思ったのでシート名は対応するデータの行番号を入れるようにしておきました。
 
(5)
新規ブックを作ってからコピーしているので、新規ブック作成直後に作られた(元々あった)シートが邪魔になるかなとおもって、削除するようにしてあります。

トピックに返信