fork download
  1. Option Explicit
  2.  
  3. Public Sub 転記()
  4. Dim ws1 As Worksheet '転記元シート
  5. Dim ws2 As Worksheet '転記先シート
  6. Dim lastRow As Long '転記元最終行
  7. Dim pno As Long '転記元ページ番号
  8. Dim prow As Long '転記元ページ番号対応行番号
  9. Dim max_pno As Long '転記元ページ番号
  10. Dim ino As Long '転記元ページ内番号
  11. Dim row1 As Long '転記元ページ及びページ内番号に対応した行番号
  12. Dim col1 As Long '転記元ページ及びページ内番号に対応した列番号
  13. Dim pno2 As Long '転記先ページ番号
  14. Dim ino2 As Long '転記先ページ内番号
  15. Dim row2 As Long '転記先ページ及びページ内番号に対応した行番号
  16. Dim col2 As Long '転記先ページ及びページ内番号に対応した列番号
  17. max_pno = 0
  18. Set ws1 = Workbooks("下書き.xlsx").Worksheets("Sheet1")
  19. Set ws2 = ThisWorkbook.Worksheets("評価1")
  20. lastRow = ws1.Cells(Rows.Count, "B").End(xlUp).row
  21. '最大ページ番号を探す
  22. For pno = 1 To 999
  23. prow = getRowNo(pno)
  24. If prow > lastRow Then Exit For
  25. If ws1.Cells(prow, "B").Value <> "番号" Then
  26. MsgBox ("転記元 " & pno & "ページ先頭が""番号""でない")
  27. ws1.Activate
  28. ws1.Cells(prow, "B").Select
  29. Exit Sub
  30. End If
  31. max_pno = pno
  32. Next
  33. For pno = 1 To max_pno
  34. For ino = 1 To 4
  35. '転記元のページ番号、ページ内番号から、転記先のページ番号、ページ内番号を取得
  36. Call get_trg_pno_ino(pno, ino, pno2, ino2)
  37. '転記元のページ番号、ページ内番号から、転記元の行番号、列番号を取得
  38. Call get_src_row_col(pno, ino, row1, col1)
  39. '転記先のページ番号、ページ内番号から、転記先の行番号、列番号を取得
  40. Call get_trg_row_col(pno2, ino2, row2, col2)
  41. ws2.Cells(row2, col2 + 2).Value = ws1.Cells(row1, col1 + 2).Value '番号
  42. ws2.Cells(row2, col2 + 6).Value = ws1.Cells(row1, col1 + 6).Value '個別ランク
  43. ws2.Cells(row2 + 1, col2 + 2).Value = ws1.Cells(row1 + 1, col1 + 2).Value '種類
  44. ws2.Cells(row2 + 1, col2 + 6).Value = ws1.Cells(row1 + 1, col1 + 6).Value '今回総評
  45. ws2.Cells(row2 + 2, col2 + 2).Value = ws1.Cells(row1 + 2, col1 + 2).Value '担当者
  46. ws2.Cells(row2 + 2, col2 + 6).Value = ws1.Cells(row1 + 2, col1 + 6).Value '前回総評
  47. ws2.Cells(row2 + 2, col2 + 6).Value = ws1.Cells(row1 + 2, col1 + 6).Value '前回総評
  48. ws2.Cells(row2 + 3, col2).Value = ws1.Cells(row1 + 3, col1).Value '名称不明
  49. ws2.Cells(row2 + 4, col2 + 6).Value = ws1.Cells(row1 + 4, col1 + 6).Value '備考
  50. Next
  51. Next
  52. MsgBox ("完了")
  53. End Sub
  54. '転記元のページ番号から行番号を取得する
  55. Private Function getRowNo(ByVal pno As Long) As Long
  56. getRowNo = (pno - 1) * 23 + 3
  57. End Function
  58. '転記元先のページ番号から行番号を取得する
  59. Private Function getTrgRowNo(ByVal pno2 As Long) As Long
  60. getTrgRowNo = (pno2 - 1) * 23 + 3
  61. End Function
  62. '転記元のページ番号、ページ内番号から転記先のページ番号、ページ内番号を取得する
  63. Private Sub get_trg_pno_ino(ByVal pno As Long, ByVal ino As Long, ByRef pno2 As Long, ByRef ino2 As Long)
  64. Dim seqno As Long
  65. seqno = (pno - 1) * 4 + ino
  66. pno2 = (seqno - 1) \ 6 + 1
  67. ino2 = (seqno - 1) Mod 6 + 1
  68. End Sub
  69. '転記元のページ番号、ページ内番号から転記元の行番号、列番号を取得する
  70. Private Sub get_src_row_col(ByVal pno As Long, ByVal ino As Long, ByRef row1 As Long, ByRef col1 As Long)
  71. row1 = getRowNo(pno)
  72. If ino > 2 Then
  73. row1 = row1 + 10
  74. End If
  75. col1 = 2 + ((ino - 1) Mod 2) * 8
  76. End Sub
  77. '転記先のページ番号、ページ内番号から転記先の行番号、列番号を取得する
  78. Private Sub get_trg_row_col(ByVal pno2 As Long, ByVal ino2 As Long, ByRef row2 As Long, ByRef col2 As Long)
  79. row2 = getTrgRowNo(pno2)
  80. If ino2 > 3 Then
  81. row2 = row2 + 10
  82. End If
  83. col2 = 2 + ((ino2 - 1) Mod 3) * 8
  84. End Sub
  85.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty