Sub TEST1()
With Sheets("台帳").Cells(Rows.Count, "A").End(xlUp)
.Offset(1, 0).Resize(3) = Sheets("請求書").Range("A2").Value '取引先
.Offset(1, 1).Resize(3) = Sheets("請求書").Range("A10:A12").Value '品目
.Offset(1, 2).Resize(3) = Sheets("請求書").Range("D10:D12").Value '単価
.Offset(1, 3).Resize(3) = Sheets("請求書").Range("E10:E12").Value '数量
End With
End Sub
次の1つの請求書のデータを台帳に転記します。
1つの請求書を台帳に転記する
次の台帳に転記します。
実行すると、請求書のデータを台帳に転記できます。
台帳に転記できた
請求書のデータを台帳に転記できました。
複数の請求書を台帳に自動転記
次は、複数の請求書を台帳に自動転記するVBAコードを作成します。
Sub TEST2()
'複数の請求書をループ
For i = 1 To 3
With Sheets("台帳").Cells(Rows.Count, "A").End(xlUp)
.Offset(1, 0).Resize(3) = Sheets(i).Range("A2").Value '取引先
.Offset(1, 1).Resize(3) = Sheets(i).Range("A10:A12").Value '品目
.Offset(1, 2).Resize(3) = Sheets(i).Range("D10:D12").Value '単価
.Offset(1, 3).Resize(3) = Sheets(i).Range("E10:E12").Value '数量
End With
Next
End Sub
複数の請求書を台帳に転記します。
複数の請求書を台帳に転記する
1つ目の請求書です。
2つ目の請求書です。
3つ目の請求書です。
実行すると、複数の請求のデータを、台帳に転記できます。
台帳に転記できた
複数の請求のデータを、台帳に転記できました。
ただ、少し問題があって、請求書の一部にデータが無い場合は、空白行ができちゃいます。
請求書の一部のデータを削除して、実行してみます。
請求書の一部にデータが無い場合
1つ目の請求書です。
2つ目の請求書です。
3つ目の請求書です。
実行すると、空白行ができてしまいます。
空白行ができちゃう
空白行ができてしまいました。
空白データを削除する
請求書のデータを転記して、空白データを削除するVBAコードを追加します。
「SpecialCells」を使って、空白データの行を一括で削除します。
Sub TEST3()
'複数の請求書をループ
For i = 1 To 3
With Sheets("台帳").Cells(Rows.Count, "A").End(xlUp)
.Offset(1, 0).Resize(3) = Sheets(i).Range("A2").Value '取引先
.Offset(1, 1).Resize(3) = Sheets(i).Range("A10:A12").Value '品目
.Offset(1, 2).Resize(3) = Sheets(i).Range("D10:D12").Value '単価
.Offset(1, 3).Resize(3) = Sheets(i).Range("E10:E12").Value '数量
End With
Next
'空白行を削除
Sheets("台帳").Range("A1").CurrentRegion.Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
複数の請求書データを、台帳に転記して、空白行を削除できます。
空白データを削除できる
複数の請求書データを、台帳に転記して、空白行を削除できました。
ただ、このままでは問題があって、空白行がない場合は、エラーとなってしまいます。
空白行がない場合で、実行してみます。
空白行がない場合にエラー
空白行がない場合にエラーとなってしまいました。
エラーを回避して空白データを削除
空白行を削除する場合は、エラーを回避するために、空白データがある場合に削除をします。
「COUNTABLANKS」を使って、空白行があるかを判定して、空白行を削除します。
Sub TEST4()
'複数の請求書をループ
For i = 1 To 3
With Sheets("台帳").Cells(Rows.Count, "A").End(xlUp)
.Offset(1, 0).Resize(3) = Sheets(i).Range("A2").Value '取引先
.Offset(1, 1).Resize(3) = Sheets(i).Range("A10:A12").Value '品目
.Offset(1, 2).Resize(3) = Sheets(i).Range("D10:D12").Value '単価
.Offset(1, 3).Resize(3) = Sheets(i).Range("E10:E12").Value '数量
End With
Next
'空白行がある場合
If WorksheetFunction.CountBlank(Sheets("台帳").Range("A1").CurrentRegion.Columns(2)) > 0 Then
'空白行を削除
Sheets("台帳").Range("A1").CurrentRegion.Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End If
End Sub