プロが教えるわが家の防犯対策術!

VBA初心者です。仕事で請求書の詳細をVBAにて作成したく独学で調べておりますが行き詰ってしまったのでお力を借りたく質問させて頂きます。

やりたいこと、現状を簡潔に書かせて頂きます。

≪やりたいこと≫
データ元からの貼付を請求書(詳細)の小計1の行(17行~45行)がいっぱいになった時、シートをコピーして再度17行目からデータを貼付

≪現状≫
①データ元からのデータ貼付(※45行を超えてもそのまま46~貼付してしまう)
②シートをコピー(コピーはできましたが17~45行を一度リセットが出来ていない)

下記、作成したVBAを記載します。
ご教授頂けたらと思います。宜しくお願い致します。

-------------------
Sub 請求書詳細作成() '請求書詳細作成ボタン

'シートの指定
Dim wb1, wb2 As Workbook
Dim sh1, sh2 As Worksheet
Dim Cnt As Integer
Dim MaxRow As Integer

Set wb1 = Workbooks.Open(ThisWorkbook.Path & "\請求書(詳細).xlsx ")
Set wb2 = Workbooks("日計データ(合算).xlsm")
Set sh1 = wb1.Worksheets("詳細")
Set sh2 = wb2.Worksheets("日計(合算)")



MaxRow = sh2.Cells(6, 1).End(xlDown).Row
Cnt = 17

For i = 6 To MaxRow
If sh2.Cells(i, 1).Value = sh2.Cells(6, 12).Value Then

Range(sh1.Cells(Cnt, 2), sh1.Cells(Cnt, 7)).Value _
= Range(sh2.Cells(i, 4), sh2.Cells(i, 9)).Value

Cnt = Cnt + 1

sh1.Cells(13, 4).Value = sh2.Cells(i, 2).Value '案件名
sh1.Cells(6, 2).Value = sh2.Cells(i, 3).Value  '取引先名

End If
Next

sh1.Cells(13, 2).Value = sh2.Cells(6, 12).Value '案件コード
sh1.Cells(13, 6).Value = sh2.Cells(2, 7).Value '期間スタート
sh1.Cells(13, 8).Value = sh2.Cells(2, 9).Value '期間終了
sh1.Activate

'シートのコピー(一番後ろへ)
sh1.Copy After:=Worksheets(Worksheets.Count)

End Sub

質問者からの補足コメント

  • データ元と請求書の画像上げておきますので参照頂けたらと思います
    まずはデータ元です

    「VBA 貼付先範囲(行)がいっぱいのとき」の補足画像1
      補足日時:2020/02/13 11:37
  • 請求書の画像です

    「VBA 貼付先範囲(行)がいっぱいのとき」の補足画像2
      補足日時:2020/02/13 11:46

A 回答 (1件)

こんにちは!



細かい検証はしていませんが・・・

>いっぱいになった時、シートをコピーして再度17行目から・・・
というコトなので、

>End If
の次に(Nextの前に)

 If cnt = 45 Then '//←45行目まで埋まったら・・・//
   Worksheets.Add after:=Worksheets(Worksheets.Count)
   sh1.Cells.Copy Worksheets(Worksheets.Count).Range("A1")
    Range(sh1.Cells(17, "B"), sh1.Cells(45, "G")).ClearContents '//17行目~45行目データを消去//
    cnt = 17
 End If

を追加してみてはどうでしょうか?

※ 最初に記載したように未検証なので
お望み通りにならなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとう

お礼が遅くなりました・・汗
さっそく試してみます!!ご親切にありがとうございます。上手く作動しましたらベストアンサーさせて頂きます★

お礼日時:2020/02/14 08:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!