Option Explicit
Dim sh1 As Worksheet 'バラシシート
Dim sh2 As Worksheet '短冊シート
Public Sub 短冊シート設定5()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim max_box As Long
Dim i As Long
Dim wrow As Long
Dim boxNo As Long
Dim seqNo As Long
Dim box_row As Long
Dim box_col As Long
Dim pv As String
Dim y As Long
Set sh1 = Worksheets("バラシ")
Set sh2 = Worksheets("短冊")
maxrow1 = sh1.Cells(Rows.count, "S").End(xlUp).row 'S列の最大行取得
If maxrow1 < 2 Then Exit Sub
maxrow2 = sh2.Cells(Rows.count, "A").End(xlUp).row 'A列の最大行取得
If (maxrow2 + 1) Mod 7 <> 0 Then
MsgBox ("マス番号の行が不正")
Exit Sub
End If
max_box = ((maxrow2 + 1) \ 7) * 3
'短冊シートのマスをクリア
For i = 1 To max_box
Call clear_box(i)
Next
'バラシシートを処理
boxNo = 1
seqNo = 0
pv = ""
For wrow = 2 To maxrow1
If sh1.Cells(wrow, "S").Value = "" Then
If seqNo > 0 Then
boxNo = boxNo + 2
seqNo = 0
pv = ""
End If
Else
'日付の設定
If seqNo = 0 Then
Call get_pos_in_box(boxNo, 1, box_row, box_col)
sh2.Cells(box_row + 1, box_col).NumberFormatLocal = "@"
sh2.Cells(box_row + 1, box_col).Value = sh1.Cells(wrow, "A").Value
sh2.Cells(box_row + 1, box_col).Font.Color = -16776961
End If
seqNo = seqNo + 1
If (seqNo Mod 4) <> 1 And pv <> sh1.Cells(wrow, "S").Value Then
y = (seqNo - 1) \ 4
seqNo = (y + 1) * 4 + 1
End If
If seqNo > 24 Then
boxNo = boxNo + 1
seqNo = 1
End If
'マス番号とマス内番号に対応する位置を取得
Call get_pos_in_box(boxNo, seqNo, box_row, box_col)
'該当位置へS列データを設定
sh2.Cells(box_row, box_col).Value = sh1.Cells(wrow, "S").Value
sh2.Cells(box_row, box_col).Interior.Color = sh1.Cells(wrow, "S").Interior.Color
pv = sh1.Cells(wrow, "S").Value
End If
Next
MsgBox ("完了")
End Sub
'指定マスクリア
Private Sub clear_box(ByVal box_no As Long)
Dim box_row As Long
Dim box_col As Long
Dim i As Long
For i = 1 To 24
Call get_pos_in_box(box_no, i, box_row, box_col)
sh2.Cells(box_row, box_col).ClearContents
sh2.Cells(box_row, box_col).Interior.Pattern = xlNone
Next
'日付クリア
Call get_pos_in_box(box_no, 1, box_row, box_col)
sh2.Cells(box_row + 1, box_col).ClearContents
sh2.Cells(box_row + 1, box_col).NumberFormatLocal = "G/標準"
sh2.Cells(box_row + 1, box_col).Font.ColorIndex = xlAutomatic
End Sub
'指定マス内の指定位置取得
Private Sub get_pos_in_box(ByVal box_no As Long, ByVal seq_no As Long, ByRef box_row As Long, ByRef box_col As Long)
Dim x1 As Long 'box_noに対応する列ブロックインデックス
'box_no=1,4,7 =>0
'box_no=2,5,8 =>1
'box_no=3,6,9 =>2
Dim x2 As Long 'seq_noに対応する列ブロック内インデックス
'seq_no=1,5,9 =>3
'box_no=2,6,10 =>2
'box_no=3,7,11 =>1
'box_no=4,8,12 =>0
Dim y1 As Long 'box_noに対応する行ブロックインデックス
'box_no=1~3 =>0
'box_no=4~6 =>1
'box_no=7~10 =>2
Dim y2 As Long 'seq_noに対応する行ブロック内インデックス
'seq_no=1~4 =>5
'seq_no=5~8 =>4
'seq_no=9~12 =>3
'seq_no=13~16 =>2
'seq_no=17~20 =>1
'seq_no=21~24 =>0
y1 = (box_no - 1) \ 3 'y1はbox_noから1を引いた結果を3で割った値(余りは切り捨て)
y2 = 5 - ((seq_no - 1) \ 4) 'y2は5-(seq_noから1を引いた結果を4で割った値(余りは切り捨て))・・・ここを変更
box_row = y1 * 7 + 1 + y2 '指定マスの行はy1を7倍して、1加算し、更にy2を加算した値
x1 = (box_no - 1) Mod 3 'x1はbox_noから1を引いた結果を3で割った余り
x2 = 3 - ((seq_no - 1) Mod 4) 'x2は3-(seq_noから1を引いた結果を4で割った余り)・・・・ここを変更
box_col = x1 * 5 + 2 + x2 '指定マスの列はx1を5倍して、2加算し、更にx2を加算した値
End Sub
T3B0aW9uIEV4cGxpY2l0CgpEaW0gc2gxIEFzIFdvcmtzaGVldCAgICAn44OQ44Op44K344K344O844OICkRpbSBzaDIgQXMgV29ya3NoZWV0ICAgICfnn63lhorjgrfjg7zjg4gKUHVibGljIFN1YiDnn63lhorjgrfjg7zjg4joqK3lrpo1KCkKICAgIERpbSBtYXhyb3cxIEFzIExvbmcKICAgIERpbSBtYXhyb3cyIEFzIExvbmcKICAgIERpbSBtYXhfYm94IEFzIExvbmcKICAgIERpbSBpIEFzIExvbmcKICAgIERpbSB3cm93IEFzIExvbmcKICAgIERpbSBib3hObyBBcyBMb25nCiAgICBEaW0gc2VxTm8gQXMgTG9uZwogICAgRGltIGJveF9yb3cgQXMgTG9uZwogICAgRGltIGJveF9jb2wgQXMgTG9uZwogICAgRGltIHB2IEFzIFN0cmluZwogICAgRGltIHkgQXMgTG9uZwogICAgU2V0IHNoMSA9IFdvcmtzaGVldHMoIuODkOODqeOCtyIpCiAgICBTZXQgc2gyID0gV29ya3NoZWV0cygi55+t5YaKIikKICAgIG1heHJvdzEgPSBzaDEuQ2VsbHMoUm93cy5jb3VudCwgIlMiKS5FbmQoeGxVcCkucm93ICAgJ1PliJfjga7mnIDlpKfooYzlj5blvpcKICAgIElmIG1heHJvdzEgPCAyIFRoZW4gRXhpdCBTdWIKICAgIG1heHJvdzIgPSBzaDIuQ2VsbHMoUm93cy5jb3VudCwgIkEiKS5FbmQoeGxVcCkucm93ICAnQeWIl+OBruacgOWkp+ihjOWPluW+lwogICAgSWYgKG1heHJvdzIgKyAxKSBNb2QgNyA8PiAwIFRoZW4KICAgICAgICBNc2dCb3ggKCLjg57jgrnnlarlj7fjga7ooYzjgYzkuI3mraMiKQogICAgICAgIEV4aXQgU3ViCiAgICBFbmQgSWYKICAgIG1heF9ib3ggPSAoKG1heHJvdzIgKyAxKSBcIDcpICogMwogICAgJ+efreWGiuOCt+ODvOODiOOBruODnuOCueOCkuOCr+ODquOCogogICAgRm9yIGkgPSAxIFRvIG1heF9ib3gKICAgICAgICBDYWxsIGNsZWFyX2JveChpKQogICAgTmV4dAogICAgJ+ODkOODqeOCt+OCt+ODvOODiOOCkuWHpueQhgogICAgYm94Tm8gPSAxCiAgICBzZXFObyA9IDAKICAgIHB2ID0gIiIKICAgIEZvciB3cm93ID0gMiBUbyBtYXhyb3cxCiAgICAgICAgSWYgc2gxLkNlbGxzKHdyb3csICJTIikuVmFsdWUgPSAiIiBUaGVuCiAgICAgICAgICAgIElmIHNlcU5vID4gMCBUaGVuCiAgICAgICAgICAgICAgICBib3hObyA9IGJveE5vICsgMgogICAgICAgICAgICAgICAgc2VxTm8gPSAwCiAgICAgICAgICAgICAgICBwdiA9ICIiCiAgICAgICAgICAgIEVuZCBJZgogICAgICAgIEVsc2UKICAgICAgICAgICAgJ+aXpeS7mOOBruioreWumgogICAgICAgICAgICBJZiBzZXFObyA9IDAgVGhlbgogICAgICAgICAgICAgICAgQ2FsbCBnZXRfcG9zX2luX2JveChib3hObywgMSwgYm94X3JvdywgYm94X2NvbCkKICAgICAgICAgICAgICAgIHNoMi5DZWxscyhib3hfcm93ICsgMSwgYm94X2NvbCkuTnVtYmVyRm9ybWF0TG9jYWwgPSAiQCIKICAgICAgICAgICAgICAgIHNoMi5DZWxscyhib3hfcm93ICsgMSwgYm94X2NvbCkuVmFsdWUgPSBzaDEuQ2VsbHMod3JvdywgIkEiKS5WYWx1ZQogICAgICAgICAgICAgICAgc2gyLkNlbGxzKGJveF9yb3cgKyAxLCBib3hfY29sKS5Gb250LkNvbG9yID0gLTE2Nzc2OTYxCiAgICAgICAgICAgIEVuZCBJZgogICAgICAgICAgICBzZXFObyA9IHNlcU5vICsgMQogICAgICAgICAgICBJZiAoc2VxTm8gTW9kIDQpIDw+IDEgQW5kIHB2IDw+IHNoMS5DZWxscyh3cm93LCAiUyIpLlZhbHVlIFRoZW4KICAgICAgICAgICAgICAgIHkgPSAoc2VxTm8gLSAxKSBcIDQKICAgICAgICAgICAgICAgIHNlcU5vID0gKHkgKyAxKSAqIDQgKyAxCiAgICAgICAgICAgIEVuZCBJZgogICAgICAgICAgICBJZiBzZXFObyA+IDI0IFRoZW4KICAgICAgICAgICAgICAgIGJveE5vID0gYm94Tm8gKyAxCiAgICAgICAgICAgICAgICBzZXFObyA9IDEKICAgICAgICAgICAgRW5kIElmCiAgICAgICAgICAgICfjg57jgrnnlarlj7fjgajjg57jgrnlhoXnlarlj7fjgavlr77lv5zjgZnjgovkvY3nva7jgpLlj5blvpcKICAgICAgICAgICAgQ2FsbCBnZXRfcG9zX2luX2JveChib3hObywgc2VxTm8sIGJveF9yb3csIGJveF9jb2wpCiAgICAgICAgICAgICfoqbLlvZPkvY3nva7jgbhT5YiX44OH44O844K/44KS6Kit5a6aCiAgICAgICAgICAgIHNoMi5DZWxscyhib3hfcm93LCBib3hfY29sKS5WYWx1ZSA9IHNoMS5DZWxscyh3cm93LCAiUyIpLlZhbHVlCiAgICAgICAgICAgIHNoMi5DZWxscyhib3hfcm93LCBib3hfY29sKS5JbnRlcmlvci5Db2xvciA9IHNoMS5DZWxscyh3cm93LCAiUyIpLkludGVyaW9yLkNvbG9yCiAgICAgICAgICAgIHB2ID0gc2gxLkNlbGxzKHdyb3csICJTIikuVmFsdWUKICAgICAgICBFbmQgSWYKICAgIE5leHQKICAgIE1zZ0JveCAoIuWujOS6hiIpCkVuZCBTdWIKCifmjIflrprjg57jgrnjgq/jg6rjgqIKUHJpdmF0ZSBTdWIgY2xlYXJfYm94KEJ5VmFsIGJveF9ubyBBcyBMb25nKQogICAgRGltIGJveF9yb3cgQXMgTG9uZwogICAgRGltIGJveF9jb2wgQXMgTG9uZwogICAgRGltIGkgQXMgTG9uZwogICAgRm9yIGkgPSAxIFRvIDI0CiAgICAgICAgQ2FsbCBnZXRfcG9zX2luX2JveChib3hfbm8sIGksIGJveF9yb3csIGJveF9jb2wpCiAgICAgICAgc2gyLkNlbGxzKGJveF9yb3csIGJveF9jb2wpLkNsZWFyQ29udGVudHMKICAgICAgICBzaDIuQ2VsbHMoYm94X3JvdywgYm94X2NvbCkuSW50ZXJpb3IuUGF0dGVybiA9IHhsTm9uZQogICAgTmV4dAogICAgJ+aXpeS7mOOCr+ODquOCogogICAgQ2FsbCBnZXRfcG9zX2luX2JveChib3hfbm8sIDEsIGJveF9yb3csIGJveF9jb2wpCiAgICBzaDIuQ2VsbHMoYm94X3JvdyArIDEsIGJveF9jb2wpLkNsZWFyQ29udGVudHMKICAgIHNoMi5DZWxscyhib3hfcm93ICsgMSwgYm94X2NvbCkuTnVtYmVyRm9ybWF0TG9jYWwgPSAiRy/mqJnmupYiCiAgICBzaDIuQ2VsbHMoYm94X3JvdyArIDEsIGJveF9jb2wpLkZvbnQuQ29sb3JJbmRleCA9IHhsQXV0b21hdGljCkVuZCBTdWIKJ+aMh+WumuODnuOCueWGheOBruaMh+WumuS9jee9ruWPluW+lwpQcml2YXRlIFN1YiBnZXRfcG9zX2luX2JveChCeVZhbCBib3hfbm8gQXMgTG9uZywgQnlWYWwgc2VxX25vIEFzIExvbmcsIEJ5UmVmIGJveF9yb3cgQXMgTG9uZywgQnlSZWYgYm94X2NvbCBBcyBMb25nKQogICAgRGltIHgxIEFzIExvbmcgICAgICAgICAgICAgICAgICAnYm94X25v44Gr5a++5b+c44GZ44KL5YiX44OW44Ot44OD44Kv44Kk44Oz44OH44OD44Kv44K5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3hfbm89MSw0LDcgID0+MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm94X25vPTIsNSw4ICA9PjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JveF9ubz0zLDYsOSAgPT4yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgRGltIHgyIEFzIExvbmcgICAgICAgICAgICAgICAgICAnc2VxX25v44Gr5a++5b+c44GZ44KL5YiX44OW44Ot44OD44Kv5YaF44Kk44Oz44OH44OD44Kv44K5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXFfbm89MSw1LDkgID0+MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm94X25vPTIsNiwxMCA9PjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JveF9ubz0zLDcsMTEgPT4xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3hfbm89NCw4LDEyID0+MAogICAgCiAgICBEaW0geTEgQXMgTG9uZyAgICAgICAgICAgICAgICAgICdib3hfbm/jgavlr77lv5zjgZnjgovooYzjg5bjg63jg4Pjgq/jgqTjg7Pjg4fjg4Pjgq/jgrkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JveF9ubz0x772eMyAgPT4wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3hfbm89NO+9njYgID0+MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm94X25vPTfvvZ4xMCA9PjIKICAgIAogICAgRGltIHkyIEFzIExvbmcgICAgICAgICAgICAgICAgICAnc2VxX25v44Gr5a++5b+c44GZ44KL6KGM44OW44Ot44OD44Kv5YaF44Kk44Oz44OH44OD44Kv44K5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXFfbm89Me+9njQgICA9PjUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlcV9ubz01772eOCAgID0+NAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VxX25vPTnvvZ4xMiAgPT4zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXFfbm89MTPvvZ4xNiA9PjIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlcV9ubz0xN++9njIwID0+MQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VxX25vPTIx772eMjQgPT4wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgeTEgPSAoYm94X25vIC0gMSkgXCAzICAgICAgICAgICAneTHjga9ib3hfbm/jgYvjgokx44KS5byV44GE44Gf57WQ5p6c44KSM+OBp+WJsuOBo+OBn+WApO+8iOS9meOCiuOBr+WIh+OCiuaNqOOBpu+8iQogICAgeTIgPSA1IC0gKChzZXFfbm8gLSAxKSBcIDQpICAgICAneTLjga81LShzZXFfbm/jgYvjgokx44KS5byV44GE44Gf57WQ5p6c44KSNOOBp+WJsuOBo+OBn+WApO+8iOS9meOCiuOBr+WIh+OCiuaNqOOBpu+8iSnjg7vjg7vjg7vjgZPjgZPjgpLlpInmm7QKICAgIGJveF9yb3cgPSB5MSAqIDcgKyAxICsgeTIgICAgICAgJ+aMh+WumuODnuOCueOBruihjOOBr3kx44KSN+WAjeOBl+OBpuOAgTHliqDnrpfjgZfjgIHmm7Tjgat5MuOCkuWKoOeul+OBl+OBn+WApAogICAgeDEgPSAoYm94X25vIC0gMSkgTW9kIDMgICAgICAgICAneDHjga9ib3hfbm/jgYvjgokx44KS5byV44GE44Gf57WQ5p6c44KSM+OBp+WJsuOBo+OBn+S9meOCigogICAgeDIgPSAzIC0gKChzZXFfbm8gLSAxKSBNb2QgNCkgICAneDLjga8zLShzZXFfbm/jgYvjgokx44KS5byV44GE44Gf57WQ5p6c44KSNOOBp+WJsuOBo+OBn+S9meOCiinjg7vjg7vjg7vjg7vjgZPjgZPjgpLlpInmm7QKICAgIGJveF9jb2wgPSB4MSAqIDUgKyAyICsgeDIgICAgICAgJ+aMh+WumuODnuOCueOBruWIl+OBr3gx44KSNeWAjeOBl+OBpuOAgTLliqDnrpfjgZfjgIHmm7Tjgat4MuOCkuWKoOeul+OBl+OBn+WApApFbmQgU3ViCg==