Option Explicit
Public Sub 転記()
Dim ws1 As Worksheet '転記元シート
Dim ws2 As Worksheet '転記先シート
Dim lastRow As Long '転記元最終行
Dim pno As Long '転記元ページ番号
Dim prow As Long '転記元ページ番号対応行番号
Dim max_pno As Long '転記元ページ番号
Dim ino As Long '転記元ページ内番号
Dim row1 As Long '転記元ページ及びページ内番号に対応した行番号
Dim col1 As Long '転記元ページ及びページ内番号に対応した列番号
Dim pno2 As Long '転記先ページ番号
Dim ino2 As Long '転記先ページ内番号
Dim row2 As Long '転記先ページ及びページ内番号に対応した行番号
Dim col2 As Long '転記先ページ及びページ内番号に対応した列番号
max_pno = 0
Set ws1 = Workbooks("下書き.xlsx").Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("評価1")
lastRow = ws1.Cells(Rows.Count, "B").End(xlUp).row
'最大ページ番号を探す
For pno = 1 To 999
prow = getRowNo(pno)
If prow > lastRow Then Exit For
If ws1.Cells(prow, "B").Value <> "番号" Then
MsgBox ("転記元 " & pno & "ページ先頭が""番号""でない")
ws1.Activate
ws1.Cells(prow, "B").Select
Exit Sub
End If
max_pno = pno
Next
For pno = 1 To max_pno
For ino = 1 To 4
'転記元のページ番号、ページ内番号から、転記先のページ番号、ページ内番号を取得
Call get_trg_pno_ino(pno, ino, pno2, ino2)
'転記元のページ番号、ページ内番号から、転記元の行番号、列番号を取得
Call get_src_row_col(pno, ino, row1, col1)
'転記先のページ番号、ページ内番号から、転記先の行番号、列番号を取得
Call get_trg_row_col(pno2, ino2, row2, col2)
ws2.Cells(row2, col2 + 2).Value = ws1.Cells(row1, col1 + 2).Value '番号
ws2.Cells(row2, col2 + 6).Value = ws1.Cells(row1, col1 + 6).Value '個別ランク
ws2.Cells(row2 + 1, col2 + 2).Value = ws1.Cells(row1 + 1, col1 + 2).Value '種類
ws2.Cells(row2 + 1, col2 + 6).Value = ws1.Cells(row1 + 1, col1 + 6).Value '今回総評
ws2.Cells(row2 + 2, col2 + 2).Value = ws1.Cells(row1 + 2, col1 + 2).Value '担当者
ws2.Cells(row2 + 2, col2 + 6).Value = ws1.Cells(row1 + 2, col1 + 6).Value '前回総評
ws2.Cells(row2 + 2, col2 + 6).Value = ws1.Cells(row1 + 2, col1 + 6).Value '前回総評
ws2.Cells(row2 + 3, col2).Value = ws1.Cells(row1 + 3, col1).Value '名称不明
ws2.Cells(row2 + 4, col2 + 6).Value = ws1.Cells(row1 + 4, col1 + 6).Value '備考
Next
Next
MsgBox ("完了")
End Sub
'転記元のページ番号から行番号を取得する
Private Function getRowNo(ByVal pno As Long) As Long
getRowNo = (pno - 1) * 23 + 3
End Function
'転記元先のページ番号から行番号を取得する
Private Function getTrgRowNo(ByVal pno2 As Long) As Long
getTrgRowNo = (pno2 - 1) * 23 + 3
End Function
'転記元のページ番号、ページ内番号から転記先のページ番号、ページ内番号を取得する
Private Sub get_trg_pno_ino(ByVal pno As Long, ByVal ino As Long, ByRef pno2 As Long, ByRef ino2 As Long)
Dim seqno As Long
seqno = (pno - 1) * 4 + ino
pno2 = (seqno - 1) \ 6 + 1
ino2 = (seqno - 1) Mod 6 + 1
End Sub
'転記元のページ番号、ページ内番号から転記元の行番号、列番号を取得する
Private Sub get_src_row_col(ByVal pno As Long, ByVal ino As Long, ByRef row1 As Long, ByRef col1 As Long)
row1 = getRowNo(pno)
If ino > 2 Then
row1 = row1 + 10
End If
col1 = 2 + ((ino - 1) Mod 2) * 8
End Sub
'転記先のページ番号、ページ内番号から転記先の行番号、列番号を取得する
Private Sub get_trg_row_col(ByVal pno2 As Long, ByVal ino2 As Long, ByRef row2 As Long, ByRef col2 As Long)
row2 = getTrgRowNo(pno2)
If ino2 > 3 Then
row2 = row2 + 10
End If
col2 = 2 + ((ino2 - 1) Mod 3) * 8
End Sub