Option Explicit
Public Sub データ転記()
Const folder1 As String = "D:\goo\data" '転記元ブック格納フォルダ
Dim wpath1 As String '転記元ブックパス
Dim wb1 As Workbook '転記元ブック
Dim ws1 As Worksheet '転記元シート
Dim ws2 As Worksheet '転記先シート
'転記元の行、列定義
Dim FrCol1 As Variant '転記元列(6列用)
Dim FrCol2 As Variant '転記元列(3列用)
Dim FrRow1 As Variant '転記元行(FrCol1用)
Dim FrRow2 As Variant '転記元行(FrCol2用)
FrCol1 = Array("H", "Q", "AA", "AJ", "AT", "BC")
FrCol2 = Array("S", "AL", "BE")
FrRow1 = Array(10, 11, 17, 18)
FrRow2 = Array(13, 15, 20, 22)
'転記先の行、列定義
Dim ToCol1 As Variant '転記先列(6列用)
Dim ToCol2 As Variant '転記先列(3列用)
Dim ToRow1 As Variant '転記先行(ToCol1用)
Dim ToRow2 As Variant '転記先行(ToCol2用)
ToCol1 = Array("H", "S", "AD", "AO", "AZ", "BK")
ToCol2 = Array("U", "AQ", "BM")
ToRow1 = Array(12, 13, 24, 25)
ToRow2 = Array(15, 17, 27, 29)
Dim maxp As Long '最大ページ数
Dim pno As Long 'ページ番号
Dim row1 As Long '転記元行番号
Dim row2 As Long '転記先行番号
Dim col1 As String '転記元列名
Dim col2 As String '転記先列名
Dim i As Long
Dim j As Long
Application.ScreenUpdating = False
wpath1 = folder1 & "\" & "転記元.xls"
Set wb1 = Workbooks.Open(wpath1)
Set ws1 = wb1.Worksheets("原本")
Set ws2 = ThisWorkbook.Worksheets("データ転記")
maxp = ws1.PageSetup.Pages.Count
If maxp > 100 Then
MsgBox ("転記元ページ数が100を超えてます")
End If
'転記先のシートを空の1ページ分をコピーして、最大ページ数分作成する
For pno = 2 To maxp
row2 = (pno - 1) * 35 + 1
Call copy_page(ws2.Range("A1:BR35"), ws2.Range("A" & row2))
Next
'転記元から転記先へ1~最大ページ数まで転記する
For pno = 1 To maxp
'6列分のデータ転記
For i = 0 To UBound(FrRow1)
'転記元、転記先の行番号を算出
row1 = (pno - 1) * 23 + FrRow1(i)
row2 = (pno - 1) * 35 + ToRow1(i)
For j = 0 To UBound(FrCol1)
'転記元、転記先の列名を算出
col1 = FrCol1(j)
col2 = ToCol1(j)
'転記先へ転記
ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
Next
Next
'3列分のデータ転記
For i = 0 To UBound(FrRow2)
'転記元、転記先の行番号を算出
row1 = (pno - 1) * 23 + FrRow2(i)
row2 = (pno - 1) * 35 + ToRow2(i)
For j = 0 To UBound(FrCol2)
'転記元、転記先の列名を算出
col1 = FrCol2(j)
col2 = ToCol2(j)
'転記先へ転記
ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
Next
Next
Next
wb1.Close
'改ページを入れる
For pno = 2 To maxp
row2 = (pno - 1) * 35 + 1
ws2.Range("BS" & row2).PageBreak = xlPageBreakManual
Next
'印刷範囲設定
ws2.PageSetup.PrintArea = "$A$1:$BR$" & maxp * 35
Application.ScreenUpdating = True
MsgBox ("完了")
End Sub
'1ページ分のコピー
Private Sub copy_page(ByVal SourceRange As Range, ByVal destinationRange As Range)
SourceRange.Copy
destinationRange.PasteSpecial xlPasteAll
Dim i As Long
With SourceRange
For i = 1 To .Rows.Count
'コピー元の行の高さを取得してコピー先の行の高さを設定
destinationRange.Rows(i).RowHeight = .Rows(i).RowHeight
Next
End With
End Sub