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

マクロ素人で途中まで作成したんですがこの後が分かりません。
教えて頂けますでしょうか?

見積書シートから請求書シートに転記したいのですが天気までは出来たんですが、次に転記した時に次の行に転記したいです。
今だと何度も同じところに転記する状態です。
アドバイスよろしくお願い致します。

Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("見積書")
Set ws2 = Worksheets("請求書")

ws2.Range("B16:N33").Value = ws1.Range("B16:N33").Value

MsgBox "請求書へ転記が完了しました。"

End Sub

「VBA別シートの最終行の次行へ転記したい」の質問画像

A 回答 (3件)

duffer_dog です。


同じ見積もり先様への請求書を作成するのに見積書を何度かの作業に分けて入力し、各見積りを先に作成した請求書の下に加えていくということでしょうか?
だとすれば、仮に請求書の書式が見積書と同じとして項目見出しが第15行として合計が書かれている行を(30, 2)とした場合以下のようではいかがでしょうか。
※合計行(30, 2)が異なる場合は変数 e と t の値を変えてください。
-----
Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
'
Set ws1 = Worksheets("見積書")
Set ws2 = Worksheets("請求書")
'
Dim r As Integer ' 処理を開始する見積書の行番号
Dim l As Integer ' 転記する請求書の行番号
Dim e As Integer ' 合計を表示する行番号
Dim t As Integer ' 合計が書かれている列番号
r = 16
' 書式が異なる場合 e と l の値を書式に合わせてください
e = 30 ' 仮に第30行目に「合計」があるとする
t = 2 ' 仮に第2列目に「合計」があるとする
' 請求書の最終行を得る
' 「合計」の書かれている行から上に向かって値のあるセル
l = ws2.Cells(e, t).End(xlUp).Row
l = l + 1
'
Do While ws1.Cells(r, 2) <> "" ' 値が無くなるまで繰り返す
ws2.Range(ws2.Cells(l, 2), ws2.Cells(l, 15)).Value = _
ws1.Range(ws1.Cells(r, 2), ws1.Cells(r, 15)).Value
r = r + 1 ' 次の行へ移るため加算
l = l + 1
Loop
'
MsgBox "請求書へ転記が " & l - 1 & " 行目まで完了しました。"
End Sub
    • good
    • 0
この回答へのお礼

再度アドバイス頂き誠にありがとうございます。
解決致しました。
私の言い方が悪く大変ご面倒をお掛け致しました、今回の頂きましたものをそのまま入力致しましたら希望どおり動作いたしました。
大変助かりました、とても感謝いたします。本当にありがとうございました。

お礼日時:2022/06/02 14:19

1行1行転記処理を行うマクロを組めば全行を転記できます。


品番のタイトル行の次の行を開始行(16)として1行づつ行(r)加算していき、品番。品名の値が空白(<>)になったら処理を終わる、というマクロです。以下見本の書式に従って組んでみました。

Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
'
Set ws1 = Worksheets("見積書")
Set ws2 = Worksheets("請求書")
'
Dim r As Integer    ' 処理を開始する行番号
r = 16
'
Do While ws1.Cells(r, 2) <> ""  ' 値が無くなるまで繰り返す
ws2.Range(ws2.Cells(r, 2), ws2.Cells(r, 15)).Value = _
ws1.Range(ws1.Cells(r, 2), ws1.Cells(r, 15)).Value
r = r + 1        ' 次の行へ移るため加算
Loop
'
MsgBox "請求書へ転記が完了しました。"
End Sub
    • good
    • 0
この回答へのお礼

ご連絡頂きありがとうございます。
とても詳しく教えて頂きそのまま書きもめましたのでとても助かりました。
アドバイス頂きましたもので作成してみましたがうまく次の行に移りませんでした、同じところに何度も転記されてしまいます。転記するたびに前回転記したものの下に転記されていくようにしたかったのですが。
でも本当に教えて頂きありがとうございました。

お礼日時:2022/06/02 09:54

こんにちは



>次に転記した時に次の行に転記したいです。
次に転記する元がどうなっているのか不明なのでセンテンスにはできませんけれど、ws2の最終行が求められれば良いということと解釈しました。

仮にB列には必ず値があるものと仮定できるのなら、
ws2.Cells(Rows.Count, 2).End(xlUp)
で、B列の最終セルを取得できます。
(B列を基準にできない場合は、必ず値のある列を基準にしてください)

例えば、その次の行のN列までのセル範囲であれば、
ws2.Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(, 13)
のような要領で、セル範囲として取得可能です。
    • good
    • 2
この回答へのお礼

教えて頂きありがとうございます。
アドバイス頂きましたことを参考に作成試みてみます。

お礼日時:2022/06/02 09:42

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング