Subject: エクセルで、「碁盤」を作りたい。 Reply-To: cce18530@nyc.odn.ne.jp ======================================== From: ごんすけ E-Mail: cce18530@nyc.odn.ne.jp Date: 2001/01/24(水) 17:18:32 エクセルのワークシートで、「碁盤」(五目ならべなんかをするやつ) を作りたいのですが、何かいい方法や、ソフトの情報等があれば教えて下さい。 なにとぞ、よろしくお願いします。 ======================================== From: ケイン Date: 2001/01/24(水) 18:11:04 こんにちは ↓ここから、「ミリ単位設定アドイン・・」か「セル幅ミリ単位・・」をDLしましょう。 http://birdcgi.zero.ad.jp/~zap50064/Tools.shtml セル幅と高さの入力を、同じ値にしてやれば良いだけです。 あとは、碁盤の目の数だけ選択し、罫線パレットで「田」の形を選べば、線がひかれます。 そのまま選択範囲を印刷し、ホシをつければできあがり。 では。 ======================================== From: わらびし Date: 2001/01/25(木) 14:33:51 こんにちは。 おもしろそうなのでつくってみました。(Excel 97 以降のマクロになります) 【手順】 1.新規ブックを作り、シート上にコントロールボックスからコマンドボタンを作ります。 コントロールボックスを表示するには[表示]−[ツールバー]−[コントロールボックス]です。 2.コマンドボタンをダブルクリックし、下記のコードを貼り付けます。 (ここからは Visual Basic Editor − 以下 VBE − での作業です) Private Sub CommandButton1_Click() Dim n As Integer, m As Integer, maxRC As Integer Dim res As String, BNam As String Application.ScreenUpdating = False Application.DisplayAlerts = False ' 新規ブックを作り、"碁盤" シートを作成 Workbooks.Add BNam = ActiveWorkbook.Name Workbooks(BNam).Activate Sheets.Add.Name = "碁盤" With Sheets("碁盤") ' 碁盤の目 .Cells(2, 2).Value = "┏" .Cells(2, 20).Value = "┓" .Cells(20, 2).Value = "┗" .Cells(20, 20).Value = "┛" For n = 3 To 19 .Cells(2, n).Value = "┯" .Cells(20, n).Value = "┷" Next For n = 3 To 19 .Cells(n, 2).Value = "┠" .Cells(n, 20).Value = "┨" Next For m = 3 To 19 For n = 3 To 19 .Cells(n, m).Value = "┼" Next Next ' 星 For m = 5 To 17 Step 6 For n = 5 To 17 Step 6 .Cells(n, m).Value = "╋" Next Next ' 大きさ設定 .Cells.Select Selection.Font.Size = 16 Selection.RowHeight = 18 Selection.ColumnWidth = 2.25 Selection.Interior.ColorIndex = 10 ' その他の設定 With ActiveWindow .DisplayGridlines = False .DisplayHeadings = False End With For m = 2 To 20 For n = 2 To 20 .Cells(n, m).Interior.ColorIndex = 36 Next Next ' 十五路盤 maxRC = 21 res = MsgBox("連珠用の十五路盤にしますか?", 292, "?") If res = vbYes Then .Rows(8).Delete shift:=xlUp .Rows(8).Delete shift:=xlUp .Rows(11).Delete shift:=xlUp .Rows(11).Delete shift:=xlUp .Columns(8).Delete shift:=xlToLeft .Columns(8).Delete shift:=xlToLeft .Columns(11).Delete shift:=xlToLeft .Columns(11).Delete shift:=xlToLeft maxRC = 17 End If ' Index res = MsgBox("碁盤目にインデックスをつけますか?", 292, "?") If res = vbYes Then .Rows("1:1").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .Font.Size = 10 End With For n = 2 To 20 If .Cells(n, 2) = "" Then Exit For .Cells(n, 1).Value = n - 1 .Cells(n, 1).Font.ColorIndex = 2 Next .Columns("A:A").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .Font.Size = 10 End With For n = 2 To 20 If .Cells(2, n) = "" Then Exit For .Cells(1, n).Value = Chr(n + 63) .Cells(1, n).Font.ColorIndex = 2 Next End If .Cells(1, 50) = maxRC .Cells(1, 50).Font.ColorIndex = 16 .Cells(1, 1).Value = 0 '手数 .Cells(1, 1).Select Selection.Font.ColorIndex = 16 End With MsgBox ("できました。") Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 3.普通の Excel の画面に戻り、コントロールツールボックスの三角定規アイコンを押して 凹んでいない状態にし、コントロールツールボックスを閉じます。 4.コマンドボタンを押します。これで碁盤ができます。 5.碁盤ができたら VBE のウィンドウに戻り、VBE のプロジェクトウィンドウで SheetN (碁盤) をダブル・クリックします。(SheetN の N は数字になっています) 6.VBE の新しく開いたウィンドウに、下記コードを貼り付けます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim tekazu As Integer, maxRC As Integer maxRC = Cells(1, 50).Value If Target.Row = 1 Then Exit Sub If Target.Row >= maxRC Then Exit Sub If Target.Column = 1 Then Exit Sub If Target.Column >= maxRC Then Exit Sub tekazu = Cells(1, 1).Value If tekazu / 2 = Int(tekazu / 2) Then ActiveCell.Value = "●" ActiveCell.Font.Bold = False Else ActiveCell.Value = "○" ActiveCell.Font.Bold = True End If Cells(1, 1).Value = tekazu + 1 Cancel = True End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim maxRC As Integer maxRC = Cells(1, 50).Value If Target.Row = 1 Then Exit Sub If Target.Row >= maxRC Then Exit Sub If Target.Column = 1 Then Exit Sub If Target.Column >= maxRC Then Exit Sub If ActiveCell.Value = "●" Then ActiveCell.Value = "○" ActiveCell.Font.Bold = True ElseIf ActiveCell.Value = "○" Then If Target.Row = 2 Then If Target.Column = 2 Then ActiveCell.Value = "┏" ElseIf Target.Column = maxRC - 1 Then ActiveCell.Value = "┓" Else ActiveCell.Value = "┯" End If ElseIf Target.Row = maxRC - 1 Then If Target.Column = 2 Then ActiveCell.Value = "┗" ElseIf Target.Column = maxRC - 1 Then ActiveCell.Value = "┛" Else ActiveCell.Value = "┷" End If Else If Target.Column = 2 Then ActiveCell.Value = "┠" ElseIf Target.Column = maxRC - 1 Then ActiveCell.Value = "┨" Else ActiveCell.Value = "┼" End If End If If (Target.Column = 5 Or Target.Column = 11 Or Target.Column = 17) _ And (Target.Row = 5 Or Target.Row = 11 Or Target.Row = 17) _ And maxRC = 21 Then Target.Value = "╋" ElseIf (Target.Column = 5 Or Target.Column = 9 Or Target.Column = 13) _ And (Target.Row = 5 Or Target.Row = 9 Or Target.Row = 13) _ And maxRC = 17 Then Target.Value = "╋" End If ActiveCell.Font.Bold = False Else ActiveCell.Value = "●" ActiveCell.Font.Bold = True End If Cancel = True End Sub 7.普通の Excel 画面に戻り囲碁または連珠を楽しんでください。 ダブルクリックで白黒交互に打つことができ、右クリックで修正ができます。 碁盤の大きさや色などは適当に変えてください。 出来上がった碁盤シートを保存しておき、シートコピーして使えば上記の手間が省けます。 ======================================== From: ごんすけ E-Mail: cce18530@nyc.odn.ne.jp Date: 2001/01/25(木) 20:07:28 ケイン様 DL先を教えてくださってありがとうございました。いつも親切な解答をいただき、本当に感激しています。碁盤に限らず、この先なにかと重宝したいと思います。 わらびし様  さっそく試してみました。操作性がすごくシンプルで、使いやすいです。こんなにすごいプログラムを組んでくださって、本当にありがとうございました。末永く、遊びたいと思います。  実は、私はエクセルは初心者なんですが、一つ質問させてください。  正方形のセルに十字型の罫線(文字)を入力し、それを連続させて碁盤を表現するとき、隣接するセルとの間に隙間ができてしまうのはしょうがないことなのでしょうか。行高、列幅や文字の配置を微調整したり、外字エディタで十字型の罫線を新たに作ったりしていろいろ試したのですが、どうすれば一つの正方形のセルを正確に4分割するような罫線(文字)が表現できるのか分かりません。  もし、いいアイディアや情報があったら教えて下さい。宜しくお願いします。 ======================================== From: わらびし Date: 2001/01/26(金) 11:08:22 こんにちは。 >こんなにすごいプログラムを組んでくださって、本当にありがとうございました。 過分にお誉めいただき、ありがとうございます。 さてご質問の件ですが、ごんすけさんは謙遜してらっしゃいますが、外字をお作りになるなど、 なかなかの手練れとお見受けいたします。 で、ごんすけさんがおやりになったように、行高さ・列幅を変えてみても、あるいはフォントの 大きさを変えてみても、隣りのセルに書き込まれた文字記号とはどうしても隙間が生じます。 そもそもフォントでは、必ず隣りのフォントとの隙間を確保するようになっていて、 如何ともし難いのではないかと思います。 オートシェイプを使えばセルの中央に線を描けますが、これではあとの使い勝手が悪いようです。 罫線では囲碁・連珠には向きません。 というわけで、私にはいい案が浮かびません。悪しからず。 なお、今回は Excel で碁盤を・・・ということで作ってみましたが、パソコンでということでしたら Vector にいいフリーソフトがあります。ここ ↓ から入ってください。 http://www.vector.co.jp/vpack/filearea/win/game/table/igo/index.html この中の「伊達五目」というのを試してみましたが、強すぎてとても勝てません。(^^; (伊達さん − でいいのかな? − どうもありがとう) ======================================== From: わらびし Date: 2001/02/02(金) 11:42:38 こんにちは。 前作ではダブルクリック・イベントと右クリック・イベントのコードを、手加工で貼り付けて いましたが、ここを改良してみました。 前作 2.の工程のコードを以下のものと差し替えてください。 前作 5,6.の工程が省略できます。 (ご教授くださった TOMOさんとミコさんにお礼申し上げます) Option Explicit Private Sub CommandButton1_Click() Dim n As Integer, m As Integer, maxRC As Integer Dim res As String, BNam As String Dim sC As String, DM As String DM = Chr(13) ' Application.ScreenUpdating = False Application.DisplayAlerts = False ' 新規ブックを作り、"碁盤" シートを作成 Workbooks.Add BNam = ActiveWorkbook.Name Workbooks(BNam).Activate 'Sheets.Add.Name = "碁盤" Sheets(1).Name = "碁盤" With Sheets("碁盤") ' 碁盤の目 .Cells(2, 2).Value = "┏" .Cells(2, 20).Value = "┓" .Cells(20, 2).Value = "┗" .Cells(20, 20).Value = "┛" For n = 3 To 19 .Cells(2, n).Value = "┯" .Cells(20, n).Value = "┷" Next For n = 3 To 19 .Cells(n, 2).Value = "┠" .Cells(n, 20).Value = "┨" Next For m = 3 To 19 For n = 3 To 19 .Cells(n, m).Value = "┼" Next Next ' 星 For m = 5 To 17 Step 6 For n = 5 To 17 Step 6 .Cells(n, m).Value = "╋" Next Next ' 大きさ設定 .Cells.Select Selection.Font.Size = 16 Selection.RowHeight = 18 Selection.ColumnWidth = 2.25 Selection.Interior.ColorIndex = 10 ' その他の設定 With ActiveWindow .DisplayGridlines = False .DisplayHeadings = False End With For m = 2 To 20 For n = 2 To 20 .Cells(n, m).Interior.ColorIndex = 36 Next Next ' 十五路盤 maxRC = 21 res = MsgBox("連珠用の十五路盤にしますか?", 292, "?") If res = vbYes Then .Rows(8).Delete shift:=xlUp .Rows(8).Delete shift:=xlUp .Rows(11).Delete shift:=xlUp .Rows(11).Delete shift:=xlUp .Columns(8).Delete shift:=xlToLeft .Columns(8).Delete shift:=xlToLeft .Columns(11).Delete shift:=xlToLeft .Columns(11).Delete shift:=xlToLeft maxRC = 17 End If ' Index res = MsgBox("碁盤目にインデックスをつけますか?", 292, "?") If res = vbYes Then .Rows("1:1").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .Font.Size = 10 End With For n = 2 To 20 If .Cells(n, 2) = "" Then Exit For .Cells(n, 1).Value = n - 1 .Cells(n, 1).Font.ColorIndex = 2 Next .Columns("A:A").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .Font.Size = 10 End With For n = 2 To 20 If .Cells(2, n) = "" Then Exit For .Cells(1, n).Value = Chr(n + 63) .Cells(1, n).Font.ColorIndex = 2 Next End If .Cells(1, 50) = maxRC .Cells(1, 50).Font.ColorIndex = 16 .Cells(1, 1).Value = 0 '手数 .Cells(1, 1).Select Selection.Font.ColorIndex = 16 End With ' Event macro を記載 sC = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range," _ & "Cancel As Boolean)" & DM sC = sC & "Dim tekazu As Integer, maxRC As Integer" & DM & "maxRC = Cells(1, 50).Value" & DM _ & "If Target.Row = 1 Then Exit Sub" & DM & "If Target.Row >= maxRC Then Exit Sub" & DM _ & "If Target.Column = 1 Then Exit Sub" & DM & "If Target.Column >= maxRC Then Exit Sub" & DM sC = sC & "tekazu = Cells(1, 1).Value" & DM & "If tekazu / 2 = Int(tekazu / 2) Then" & DM _ & "ActiveCell.Value = ""●""" & DM & "ActiveCell.Font.Bold = False" & DM & "Else" & DM _ & "ActiveCell.Value = ""○""" & DM & "ActiveCell.Font.Bold = True" & DM & "End If" _ & DM & "Cells(1, 1).Value = tekazu + 1" & DM & "Cancel = True" & DM & "End Sub" & DM sC = sC & "Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, " _ & "Cancel As Boolean)" & DM & "Dim maxRC As Integer" & DM & "maxRC = Cells(1, 50).Value" & DM sC = sC & "If Target.Row = 1 Then Exit Sub" & DM & "If Target.Row >= maxRC Then Exit Sub" & DM _ & "If Target.Column = 1 Then Exit Sub" & DM & "If Target.Column >= maxRC Then Exit Sub" & DM sC = sC & "If ActiveCell.Value = ""●"" Then" & DM & "ActiveCell.Value = ""○""" & DM _ & "ActiveCell.Font.Bold = True" & DM & "ElseIf ActiveCell.Value = ""○"" Then" & DM _ & "If Target.Row = 2 Then" & DM & "If Target.Column = 2 Then" & DM _ & "ActiveCell.Value = ""┏""" & DM sC = sC & "ElseIf Target.Column = maxRC - 1 Then" & DM & "ActiveCell.Value = ""┓""" _ & DM & "Else" & DM & "ActiveCell.Value = ""┯""" & DM & "End If" & DM _ & "ElseIf Target.Row = maxRC - 1 Then" & DM & "If Target.Column = 2 Then" & DM sC = sC & "ActiveCell.Value = ""┗""" & DM & "ElseIf Target.Column = maxRC - 1 Then" & DM _ & "ActiveCell.Value = ""┛""" & DM & "Else" & DM & "ActiveCell.Value = ""┷""" & DM _ & "End If" & DM & "Else" & DM & "If Target.Column = 2 Then" & DM sC = sC & "ActiveCell.Value = ""┠""" & DM & "ElseIf Target.Column = maxRC - 1 Then" _ & DM & "ActiveCell.Value = ""┨""" & DM & "Else" & DM & "ActiveCell.Value = ""┼""" _ & DM & "End If" & DM & "End If" & DM sC = sC & "If (Target.Column = 5 Or Target.Column = 11 Or Target.Column = 17) _" _ & DM & "And (Target.Row = 5 Or Target.Row = 11 Or Target.Row = 17) _" _ & DM & "And maxRC = 21 Then" & DM & "Target.Value = ""╋""" & DM sC = sC & "ElseIf (Target.Column = 5 Or Target.Column = 9 Or Target.Column = 13) _" _ & DM & "And (Target.Row = 5 Or Target.Row = 9 Or Target.Row = 13) _" _ & DM & "And maxRC = 17 Then" & DM & "Target.Value = ""╋""" & DM & "End If" & DM sC = sC & "ActiveCell.Font.Bold = False" & DM & "Else" & DM & "ActiveCell.Value = ""●""" _ & DM & "ActiveCell.Font.Bold = True" & DM & "End If" & DM & "Cancel = True" _ & DM & "End Sub" ' Workbooks(BNam).VBProject.VBComponents("Sheet1").CodeModule.InsertLines 3, sC Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox ("できました。") End Sub ======================================== From: ごんすけ E-Mail: cce18530@nyc.odn.ne.jp Date: 2001/02/03(土) 00:43:36 Solved: on わらびし様  改良版を試して見ました。うまく行きました。  きっと、このコーナーで「碁盤」を検索する人もけっこういると思います。そういう人達にも、是非わらびしさんの碁盤を使って欲しいと思います。  私の職場にもエクセルに詳しい人がいて、その人はいつも「エクセル(VBA)に不可能は無い。」と言っていましたが、本当、エクセルってなんでもできるんですね。感動しました。VBAの勉強も始めたいと思います(今はチンプンカンプン)。  エクセルを離れて、碁の棋譜管理ソフトをいろいろと探してもみました。Vectorでダウンロードできるソフトはけっこうありましたが、どれもイマイチでした。私が探した中で、これはと思ったのは、日本囲碁ソフトという会社の「碁盤テキスト」というソフトです。サンプル版がダウンロードできます。ただ、結構高い!今買っちゃおうかどうしようか悩んでいます。http://www.igosoft.co.jp/ 本当に,長いプログラムを組んでもらってありがとうございました。また質問することもあると思いますが、そのときはよろしくお願いします。