fork download
  1. Option Explicit
  2. Public Sub データ転記()
  3. Const folder1 As String = "D:\goo\data" '転記元ブック格納フォルダ
  4. Dim wpath1 As String '転記元ブックパス
  5. Dim wb1 As Workbook '転記元ブック
  6. Dim ws1 As Worksheet '転記元シート
  7. Dim ws2 As Worksheet '転記先シート
  8. '転記元の行、列定義
  9. Dim FrCol1 As Variant '転記元列(6列用)
  10. Dim FrCol2 As Variant '転記元列(3列用)
  11. Dim FrRow1 As Variant '転記元行(FrCol1用)
  12. Dim FrRow2 As Variant '転記元行(FrCol2用)
  13. FrCol1 = Array("H", "Q", "AA", "AJ", "AT", "BC")
  14. FrCol2 = Array("S", "AL", "BE")
  15. FrRow1 = Array(10, 11, 17, 18)
  16. FrRow2 = Array(13, 15, 20, 22)
  17. '転記先の行、列定義
  18. Dim ToCol1 As Variant '転記先列(6列用)
  19. Dim ToCol2 As Variant '転記先列(3列用)
  20. Dim ToRow1 As Variant '転記先行(ToCol1用)
  21. Dim ToRow2 As Variant '転記先行(ToCol2用)
  22. ToCol1 = Array("H", "S", "AD", "AO", "AZ", "BK")
  23. ToCol2 = Array("U", "AQ", "BM")
  24. ToRow1 = Array(12, 13, 24, 25)
  25. ToRow2 = Array(15, 17, 27, 29)
  26.  
  27. Dim maxp As Long '最大ページ数
  28. Dim pno As Long 'ページ番号
  29. Dim row1 As Long '転記元行番号
  30. Dim row2 As Long '転記先行番号
  31. Dim col1 As String '転記元列名
  32. Dim col2 As String '転記先列名
  33. Dim i As Long
  34. Dim j As Long
  35.  
  36. Application.ScreenUpdating = False
  37. wpath1 = folder1 & "\" & "転記元.xls"
  38. Set wb1 = Workbooks.Open(wpath1)
  39. Set ws1 = wb1.Worksheets("原本")
  40. Set ws2 = ThisWorkbook.Worksheets("データ転記")
  41.  
  42. maxp = ws1.PageSetup.Pages.Count
  43. If maxp > 100 Then
  44. MsgBox ("転記元ページ数が100を超えてます")
  45. Exit Sub
  46. End If
  47.  
  48. '転記先のシートを空の1ページ分をコピーして、最大ページ数分作成する
  49. For pno = 2 To maxp
  50. row2 = (pno - 1) * 35 + 1
  51. Call copy_page(ws2.Range("A1:BR35"), ws2.Range("A" & row2))
  52. Next
  53. '転記元から転記先へ1~最大ページ数まで転記する
  54. For pno = 1 To maxp
  55. '6列分のデータ転記
  56. For i = 0 To UBound(FrRow1)
  57. '転記元、転記先の行番号を算出
  58. row1 = (pno - 1) * 23 + FrRow1(i)
  59. row2 = (pno - 1) * 35 + ToRow1(i)
  60. For j = 0 To UBound(FrCol1)
  61. '転記元、転記先の列名を算出
  62. col1 = FrCol1(j)
  63. col2 = ToCol1(j)
  64. '転記先へ転記
  65. ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
  66. Next
  67. Next
  68. '3列分のデータ転記
  69. For i = 0 To UBound(FrRow2)
  70. '転記元、転記先の行番号を算出
  71. row1 = (pno - 1) * 23 + FrRow2(i)
  72. row2 = (pno - 1) * 35 + ToRow2(i)
  73. For j = 0 To UBound(FrCol2)
  74. '転記元、転記先の列名を算出
  75. col1 = FrCol2(j)
  76. col2 = ToCol2(j)
  77. '転記先へ転記
  78. ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
  79. Next
  80. Next
  81. Next
  82. wb1.Close
  83. '改ページを入れる
  84. For pno = 2 To maxp
  85. row2 = (pno - 1) * 35 + 1
  86. ws2.Range("BS" & row2).PageBreak = xlPageBreakManual
  87. Next
  88. '印刷範囲設定
  89. ws2.PageSetup.PrintArea = "$A$1:$BR$" & maxp * 35
  90. Application.ScreenUpdating = True
  91. MsgBox ("完了")
  92. End Sub
  93. '1ページ分のコピー
  94. Private Sub copy_page(ByVal SourceRange As Range, ByVal destinationRange As Range)
  95. SourceRange.Copy
  96. destinationRange.PasteSpecial xlPasteAll
  97. Dim i As Long
  98. With SourceRange
  99. For i = 1 To .Rows.Count
  100. 'コピー元の行の高さを取得してコピー先の行の高さを設定
  101. destinationRange.Rows(i).RowHeight = .Rows(i).RowHeight
  102. Next
  103. End With
  104. End Sub
  105.  
  106.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty