このkeisenマクロは、Sheet 1 の EXCEL画面に盤面を描くものである。
盤面とは、セルを区切る細い線とブロックを囲む太い線だけであるので、簡単なようだが EXCEL画面上にVBAで描かせるのは意外と難しいので、そのマクロ本体を下に紹介することとしよう。「コピペ」することで、 任意のナンプレ画面を描くことができます。
Sub keisen()
Application.ScreenUpdating = False
ars = ricj((ppp + 1), (qqq + 1))
are = ricj((ppp + z), (qqq + z))
ar = ars & ":" & are
Range(ar).Borders.LineStyle = xlContinuous
For i = 1 To pt
arrs = ricj((ppp + (i - 1) * ps + 1), (qqq + 1))
arre = ricj((ppp + i * ps), (qqq + z))
arr = arrs & ":" & arre
Range(arr).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
Next i
For j = 1 To ps
accs = ricj((ppp + 1), (qqq + (j - 1) * pt + 1))
acce = ricj((ppp + z), (qqq + j * pt))
acc = accs & ":" & acce
Range(acc).BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
Next j
'
ars = ricj((ppp + 1), (qqq + 1))
are = ricj((ppp + z), (qqq + z))
ar = ars & ":" & are
Range(ar).BorderAround LineStyle:=xlContinuous, Weight:=xlThick
Application.ScreenUpdating = True
End Sub
'
Function ricj(i, j)
If j <= 26 Then
jc = j
ricj = qt(jc) & i
ElseIf j <= 52 Then
jc = j - 26
ricj = "A" & qt(jc) & i
ElseIf j <= 78 Then
jc = j - 52
ricj = "B" & qt(jc) & i
ElseIf j <= 104 Then
jc = j - 78
ricj = "C" & qt(jc) & i
Else
MsgBox ("You indicate too large RANGE !!")
End
End If
End Function
'
Function qt(jc)
Select Case jc
Case 1: qt = "A": Case 2: qt = "B": Case 3: qt = "C": Case 4: qt = "D": Case 5: qt = "E"
Case 6: qt = "F": Case 7: qt = "G": Case 8: qt = "H": Case 9: qt = "I": Case 10: qt = "J"
Case 11: qt = "K": Case 12: qt = "L": Case 13: qt = "M": Case 14: qt = "N": Case 15: qt = "O"
Case 16: qt = "P": Case 17: qt = "Q": Case 18: qt = "R": Case 19: qt = "S": Case 20: qt = "T"
Case 21: qt = "U": Case 22: qt = "V": Case 23: qt = "W": Case 24: qt = "X": Case 25: qt = "Y"
Case 26: qt = "Z"
End Select
End Function
ここに、(ppp,qqq) はSheet 1 上の盤面の原点の位置(左上のセルの座標)を表し、ps,pt はそれぞれ1ブロックの縦方向(行)および横方向(列)のセルの数を表す。また、z=ps*pt はナンプレの大きさを表す。これらの数値はbasic_settingで設定する。
ノーマル・ナンプレでは、9×9=81のセルを細線で囲み、3×3=9個のブロックを太線で囲む。すなわち、ps=pt=3 ,z=9 である。
16×16 大型ナンプレの場合、 ps=pt=4 z=16
28×28 変形ナンプレの場合、 ps=4、pt=7 z=28 である。
なお、このマクロは、EXCEL/VBA/2007 以前に対応するもので、列番号のアルファベットを数字に直す Function を使っています。
最後に、変形ナンプレ(全体12×12、ブロック 3×4)を keisen マクロを使って描いた例を示します。この場合、上のマクロにおいて、ps=3, pt=4, z=12 とおきます。