お世話になります。
VBAについて相談させて下さい(EXCEL2013)
SHEET1 データのリスト(1行目が項目、2行目からデータでA列の最終行まで20行ごとにSHEET2にコピーしたい)
SHEET2 請求書のフォーム(6行目が項目、内容をコピーできるのはA7~D26の20行まで)
SHEET1には商品や数量、金額のデータが記載してあります。
ここで困っているのが、SHEET2の請求書フォームは品目を書けるのが20行までしかなく、
SHEET1のデータは10~100ぐらいあります。
そこで転記する際に20個記載したら請求書シートをコピーして続き(21個目から)を書くということはできますでしょうか。
請求書1枚目→SHEET1の2~21行目までを貼付け
請求書2枚目→SHEET1の22~41行目までを貼付け
請求書3枚目→SHEET1の42~61行目までを貼付け
複数の会社に作成しているため手間がかかって困ってます。
どうかアドバイスよろしくお願いします。
Sub MACRO()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim i As Long, n As Long
Dim k As Long
Dim LastRow As Long
Set sh1 = Sheets("データ")
Set sh2 = Sheets("請求書")
n = 7 '7行目~27行目まで貼り付けたい
With sh2
LastRow = sh1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
.Cells(n, 1).Value = sh1.Cells(i, 3).Value
.Cells(n, 2).Value = sh1.Cells(i, 1).Value
.Cells(n, 3).Value = sh1.Cells(i, 7).Value
.Cells(n, 4).Value = sh1.Cells(i, 8).Value
n = n + 1
Next ’※27行目まで貼り付けたら次のシートに記載したい
End With
End Sub
No.2
- 回答日時:
VBAは使う必要ないと思います。
自分なら、請求書作成用のファイルを作ります。SHEET2の請求書のフォームにSHEET1を読み取れるようにしたものです。
一度それを作っておけば、次回からはSHEET1にデータを貼り付けるだけで、SHEET2は完成します。
◆やりかた(●は内容を書いたものなので、具体的な作業はありません)
●請求書1枚目→SHEET1の2~21行目までを貼付け
SHEET2のA7セル『=SHEET1!C2』と入力
SHEET2のB7セル『=SHEET1!A2』と入力
SHEET2のC7セル『=SHEET1!G2』と入力
SHEET2のD7セル『=SHEET1!H2』と入力
上記4セルをコピーして、下方向に26行目まで貼り付けます。
●請求書2枚目→SHEET1の22~41行目までを貼付け
SHEET2のA?セル(2枚目の7行目)『=SHEET1!C22』
SHEET2のB?セル(2枚目の7行目)『=SHEET1!A22』
SHEET2のC?セル(2枚目の7行目)『=SHEET1!G22』
SHEET2のD?セル(2枚目の7行目)『=SHEET1!H22』
上記4セルをコピーして、下方向に20行分貼り付けます。
●請求書3枚目→SHEET1の42~61行目までを貼付け
SHEET2のA?セル(3枚目の7行目)『=SHEET1!C42』
SHEET2のB?セル(3枚目の7行目)『=SHEET1!A42』
SHEET2のC?セル(3枚目の7行目)『=SHEET1!G42』
SHEET2のD?セル(3枚目の7行目)『=SHEET1!H42』
上記4セルをコピーして、下方向に20行分貼り付けます。
No.3ベストアンサー
- 回答日時:
こんばんは!
>20個記載したら請求書シートをコピーして続き・・・
というコトは元データによってシート数が増えていく!というコトでしょうか?
別案です。
「請求書」シートを使いまわししてはどうでしょうか?
やり方としては、「請求書」シートの26行目までが埋まった段階で
一旦印刷 → 20のデータを消去 → 21番目以降のデータを表示 → 26行目まで埋まれば印刷・・・
といった繰り返しの方法です。
一例です。標準モジュールにしてください。
Sub Sample1()
Dim i As Long, k As Long, cnt As Long
Dim wS As Worksheet, myAry
Set wS = Worksheets("請求書")
myAry = Array(3, 1, 7, 8)
wS.Range("A7,D26").ClearContents
With Worksheets("データ")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
cnt = cnt + 1
For k = 0 To UBound(myAry)
wS.Cells(cnt + 6, k + 1) = .Cells(i, myAry(k))
Next k
If cnt = 20 Then
wS.PrintPreview '//★//
wS.Range("A7:D26").ClearContents
cnt = 0
End If
Next i
'//▼ピッタリ20行で収まらなかった場合の処理//
If cnt Mod 20 > 0 Then
wS.PrintPreview '//★//
End If
End With
End Sub
※ 印刷プレビューでやめていますが、すぐに印刷したい場合は「★」の行(2か所)の
>wS.PrintPreview
を
>wS.PrintOut
にしてください。
※ 個人的には一旦印刷プレビューで確認 → 手動で印刷
とした方が良いような気がします。m(_ _)m
No.4
- 回答日時:
こんにちは
>請求書1枚目→SHEET1の2~21行目までを貼付け
>請求書2枚目→SHEET1の22~41行目までを貼付け
>請求書3枚目→SHEET1の42~61行目までを貼付け
右側の「SEET1」というのは「SEET2]の間違えとして、2~21行目、22~41行目、42~61行目と空きなく連続しているので、「ページがどうの」と考える必要もないように思えます。
要は、ループなどと考えずとも、コピー元(SEET1?)の2行目以降(最終行まで)をコピー先(SEET2?)の2行目以降にペーストするだけで良いのではないでしょうか?
一方で、
>’※27行目まで貼り付けたら次のシートに記載したい
27行という数字がどこからきているのか、よくわかりませんね。
などの不明点はありますが、イメージとして。以下のような処理で済んでしまいそうな気がします。
(セル範囲でまとめて処理する方が簡単です。処理はコピペでも良いものと仮定)
Set sourceRange = shi.Cells(2, 1).Resize(LastRow - 1)
sourceRange.Offset(, 2).Copy Destination:= sh2.Cells(2, 1)
sourceRange.Copy Destination:= sh2.Cells(2, 2)
sourceRange.Offset(, 6).Copy Destination:= sh2.Cells(2, 3)
sourceRange.Offset(, 7).Copy Destination:= sh2.Cells(2, 4)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Aというブックの1というシート...
-
Excelの「0」だけ非表示、小数...
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
日付が未入力の際はゼロか、空...
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
エクセルで1月0日と表示される!!
-
ExcelでTODAY関数を更新させな...
-
シートAで横に並んだ項目→シー...
-
シート参照で変数を使いたい(EX...
-
エクセルのセルに、マウスで選...
-
エクセルで、勤務表から 日付...
-
Excelシートの保護時にデータの...
-
エクセルのシート間で連続した...
-
(Excel)あるセルに文字を入力...
-
VBAで、セル(Range)のオブジ...
-
エクセルVBA テキストボックス
-
エクセルのルビがついたセルを...
-
エクセルの参照先が固定されて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報