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. End If
  46.  
  47. '転記先のシートを空の1ページ分をコピーして、最大ページ数分作成する
  48. For pno = 2 To maxp
  49. row2 = (pno - 1) * 35 + 1
  50. Call copy_page(ws2.Range("A1:BR35"), ws2.Range("A" & row2))
  51. Next
  52. '転記元から転記先へ1~最大ページ数まで転記する
  53. For pno = 1 To maxp
  54. '6列分のデータ転記
  55. For i = 0 To UBound(FrRow1)
  56. '転記元、転記先の行番号を算出
  57. row1 = (pno - 1) * 23 + FrRow1(i)
  58. row2 = (pno - 1) * 35 + ToRow1(i)
  59. For j = 0 To UBound(FrCol1)
  60. '転記元、転記先の列名を算出
  61. col1 = FrCol1(j)
  62. col2 = ToCol1(j)
  63. '転記先へ転記
  64. ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
  65. Next
  66. Next
  67. '3列分のデータ転記
  68. For i = 0 To UBound(FrRow2)
  69. '転記元、転記先の行番号を算出
  70. row1 = (pno - 1) * 23 + FrRow2(i)
  71. row2 = (pno - 1) * 35 + ToRow2(i)
  72. For j = 0 To UBound(FrCol2)
  73. '転記元、転記先の列名を算出
  74. col1 = FrCol2(j)
  75. col2 = ToCol2(j)
  76. '転記先へ転記
  77. ws2.Cells(row2, col2).Value = ws1.Cells(row1, col1).Value
  78. Next
  79. Next
  80. Next
  81. wb1.Close
  82. '改ページを入れる
  83. For pno = 2 To maxp
  84. row2 = (pno - 1) * 35 + 1
  85. ws2.Range("BS" & row2).PageBreak = xlPageBreakManual
  86. Next
  87. '印刷範囲設定
  88. ws2.PageSetup.PrintArea = "$A$1:$BR$" & maxp * 35
  89. Application.ScreenUpdating = True
  90. MsgBox ("完了")
  91. End Sub
  92. '1ページ分のコピー
  93. Private Sub copy_page(ByVal SourceRange As Range, ByVal destinationRange As Range)
  94. SourceRange.Copy
  95. destinationRange.PasteSpecial xlPasteAll
  96. Dim i As Long
  97. With SourceRange
  98. For i = 1 To .Rows.Count
  99. 'コピー元の行の高さを取得してコピー先の行の高さを設定
  100. destinationRange.Rows(i).RowHeight = .Rows(i).RowHeight
  101. Next
  102. End With
  103. End Sub
  104.  
  105.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty