[[20221101202422]] 『sheet1のデータを35行おきに1行ずつ、sheet2[P列]』(まるたん) ページの最後に飛ぶ

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

 

『sheet1のデータを35行おきに1行ずつ、sheet2[P列]に転記する』(まるたん)

はじめまして。VBA初心者です。
ここ最近、業務効率化のためにVBAに取り組み始めましたが、今回どうしても分からなくなってしまったため、お尋ねします。

<前提条件>

・sheet1(wsData) A〜X列、A2から1行ごとに氏名などのデータが入力されている。これが1レコード単位となる。
 データは可変するが、最大200程度(A200まで)。
・sheet2(wsPrint)に設定した印刷シート(A2:M35)あり。この印刷シートは上書き出来ず、書式を下に連続しなければならない。
 例)A2:M35 ⇒ A36:M36 ⇒ A71:M71
・上記の印刷シートに対し、差し込みコードによる連続印刷は出来る。wsPrintの「A1」にDataのレコードが1枚ずつ差し込まれるようになっている(コード1)。
・書式そのものをコピーし、1枚目の書式下へ追加するコードは他サイトを参考に出来た(コード2)。

<要望・問題点>
・コード1ではwsPrint A1に差し込まれるが、下の書式と連続させたいため、A1に差し込まれるのは避けたい。
 印刷に影響のないP列から差し込みたいが、【r.Copy.Range("P1")】とした場合、「実行時エラー1004:コピー領域〜」が発生し、実行できない。
 ⇒ただのレコード単位差し込みであれば、【P1】差し込みは可能。
・以下の例のようにデータの参照先も同時に移動しているので、データをst2 1枚目用:P1〜AM1、2枚目:P36〜AM36のように35ないし36行おきに1行ずつ飛ばしたい。

<問題のシート>
st1=wsData
  A2  B2  C2     X2
1 田中  男 生年月日 …… ●●
2 松田  女 生年月日 …… △△

st2=wsPrint
 1枚目
  P1  Q1  R1     AM1
1 田中 男 生年月日 …… ●●

st2 コピー書式2枚目
  P36  Q36  R36     AM36
2 松田 女 生年月日 ……  △△⇒これが出来ない。

<コード1:差し込み>
Public Function オートフィルター基点() As Range '

    Set オートフィルター基点 = wsData.Range("A1")
End Function

Public Sub 差し込み印刷_指定()

    Dim r As Variant

    With wsData
        If .AutoFilterMode = True Then オートフィルター基点.AutoFilter '
        If .Cells(.Rows.Count, 1).End(xlUp).Row <> 1 Then オートフィルター基点.AutoFilter 1, 1 '

        With オートフィルター基点.CurrentRegion
            For Each r In .Offset(1, 1).Resize(.Rows.Count - 1, Columns.Count - 1).SpecialCells(xlCellTypeVisible).Rows '
                With wsPrint
                    r.Copy .Range("A1")
                    .PrintPreview '
                End With
            Next r
        End With

        If .AutoFilterMode = True Then オートフィルター基点.AutoFilter
    End With
End Sub

<コード2:書式の指定回数コピー>
Sub 書式の指定回数コピー()

    Dim TgRng As Range '
    Dim rgRows As Long
    Dim CopyKaisuu As Long
    Dim cot As Long
        Set TgRng = Range("A1:M35") '
        rgRows = TgRng.Rows.Count
        CopyKaisuu = Application.InputBox("コピーする回数を入力して下さい", Type:=1)
            If (TgRng.Rows.Count + 1) * (CopyKaisuu + 1) < Rows.Count Then
            TgRng.Copy
            Application.ScreenUpdating = False
                For cot = 1 To CopyKaisuu
                    With TgRng.Offset((rgRows + 1) * cot, 0)
                        .PasteSpecial Paste:=xlPasteFormats
                        .PasteSpecial Paste:=xlPasteFormulas
                        .PasteSpecial -Paste:=xlPasteAllMergingConditionalFormats
                    End With
                Next
                Application.CutCopyMode = False
                TgRng(1).Activate
                Application.ScreenUpdating = True
            End If
Set TgRng = Nothing
End Sub

いろんなサイトや掲示板を頼りに、なんとか書式のコピーまではたどり着きましたが、肝心のデータ転記が一向に出来ません。
勉強不足であり、ご質問に上手く答えられないかもしれませんが、どうか、よい方法をご教授ください。
長々と失礼いたしました。
何卒よろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 なにがやりたくて何ができてないのか全然わかりません

 ループ中で貼り付け先を変えればいいんですよね?

            i=0 ' カウンタ
            For Each r In .Offset(1, 1).Resize(.Rows.Count - 1, Columns.Count - 1).SpecialCells(xlCellTypeVisible).Rows 
                With wsPrint
                    r.Copy .Cells(i*36+1,"P") ' ←とかすればいいのでは?
                    .PrintPreview '
                    i=i+1
                End With
            Next r

 あと、かすかに分かる書式のコピーですが、
 これでよくないですか?
 Sub 書式の指定回数コピー()
   Dim TgRng As Range '
   Set TgRng = Range("A1:M36") ' 下に1行多くとる
   CopyKaisuu = Application.InputBox("コピーする回数を入力して下さい", Type:=1)
   With TgRng
      .Copy
      .Resize(.Rows.Count * CopyKaisuu ).PasteSpecial xlPasteAllMergingConditionalFormats
   End With
 End Sub
 CopyKaisuu はフィルタされた行数で自動で求められるような気がしますが
(´・ω・`) 2022/11/02(水) 00:27:44

 個人的な考えですが、
 VBA初学者にとって、コピペのメソッドは、その後の学習で
 混乱しませんか?

 非常に便利なものではありますが、
 VBAにとって重要な、オブジェクトの概念を阻害しているような
 気がするんですよ。

 多くの方は、数式含めセルの値が欲しい訳で、罫線や書式丸ごとは、
 頻繁に必要としないと思います。

 値であれば、
 Range("A1").Value = Range("B1").Value
 のような記述で値を代入できます。
 値を消す場合でも、
 Range("A1").ClearContents
 より、
 Range("A1").Value = ""
 の方が、直感的に理解し易いと思うんですね。

 この辺を理解すれば、その後の学習に控えている
 配列の習得のし易さにも影響すると思うんですよね。

(tkit) 2022/11/02(水) 09:57:40


コメント返信:

[ 一覧(最新更新順) ]


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