2014年6月11日水曜日

keisen


 この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×981のセルを細線で囲み、3×39個のブロックを太線で囲む。すなわち、ps=pt=3 ,z=9 である。

16×16 大型ナンプレの場合、 ps=pt=4  z=16 
28×28 変形ナンプレの場合、 ps=4pt=7  z=28  である。

なお、このマクロは、EXCEL/VBA/2007 以前に対応するもので、列番号のアルファベットを数字に直す Function を使っています。

最後に、変形ナンプレ(全体12×12、ブロック 3×4)を keisen マクロを使って描いた例を示します。この場合、上のマクロにおいて、ps=3, pt=4, z=12 とおきます。



0 件のコメント:

コメントを投稿