Excel将棋:棋譜ファイルの出力と読込自動再生(№14)
Excelで将棋を作ってみましょう。
人vs人で動かしてゲームとして成立するところまでが当面の目標です。
自動再生した後は、前回までの機能で好きな場面に移動したり、そこから指し継いだりできるようにします。
各種の将棋ソフトの棋譜を取り込んだり、Excel将棋で指した棋譜を他の将棋ソフトに入れることができるようになります。
Excel将棋の動作
VBAの修正箇所について
これに伴い、以下のプロシージャーを修正しました。
cls将棋進行
Public Sub 自動着手(ByVal arg駒 As String, _
ByVal arg元位置 As g位置, _
ByVal arg先位置 As g位置, _
ByVal arg成 As String, _
ByVal arg時間1手 As Date, _
ByVal arg時間累計 As Date, _
Optional ByVal argWait As Long = 100)
Dim rng元 As Range
Dim rng先 As Range
If arg元位置.行 = 0 Then
If obj将棋盤.先手 Then
Set rng元 = p先手持駒.Find(arg駒)
Else
Set rng元 = p後手持駒.Find(arg駒)
End If
Else
Set rng元 = p将棋盤.Cells(arg元位置.行, arg元位置.列)
End If
Set rng先 = p将棋盤.Cells(arg先位置.行, arg先位置.列)
Call 着手(rng元, rng先, arg成, arg時間1手, arg時間累計)
Sleep argWait
End Sub
この引数はcls将棋盤.着手に渡します。
Public Sub 着手(ByVal arg元選択 As Range, _
ByVal arg先選択 As Range, _
Optional ByVal arg成 As Variant, _
Optional ByVal arg時間1手 As Date, _
Optional ByVal arg時間累計 As Date)
'着手してシートを更新
Dim tmp駒台 As cls駒台
Set tmp駒台 = IIf(obj将棋盤.先手, obj先手駒台, obj後手駒台)
If arg先選択.Value <> "" Then
'駒台へ
Call tmp駒台.駒追加(obj将棋盤.駒(セル2位置(arg先選択)))
'盤から削除
Call obj将棋盤.着手(arg先選択.Value, セル2位置(arg先選択), g位置(0, 0), _
obj将棋盤.先手, arg成, arg時間1手, arg時間累計)
End If
If 選択場所(arg元選択) = 将棋盤 Then
'盤上で駒移動
Call obj将棋盤.着手(arg元選択.Value, セル2位置(arg元選択), セル2位置(arg先選択), _
obj将棋盤.先手, arg成, arg時間1手, arg時間累計)
Else
'盤上へ駒を打つ
Call obj将棋盤.着手(arg元選択.Value, g位置(0, 0), セル2位置(arg先選択), _
obj将棋盤.先手, arg成, arg時間1手, arg時間累計)
'駒台から削除
Call tmp駒台.駒削除(arg元選択.Value)
End If
'駒台の履歴作成
Call obj先手駒台.履歴追加
Call obj後手駒台.履歴追加
'シートの表示
Call 盤面表示
Call 選択セルを手番に移動
Call frm棋譜.棋譜表示(obj将棋盤.棋譜履歴, obj将棋盤.開始時刻, obj将棋盤.最終時刻)
End Sub
Public Property Get Application() As Excel.Application
Set Application = xlApp
End Property
Public Sub ゲーム開始(Optional ByVal arg手合い As String, _
Optional ByVal arg大橋流 As Boolean)
'標準モジュールから呼ばれた場合、フォームが表示されていたらは処理しない
If arg手合い = "" Then
If frm棋譜.Visible Then Exit Sub
End If
'シート選択
Dim flgNew As Boolean
On Error Resume Next
Set p開始位置 = ActiveSheet.Range("開始駒位置")
If Err Then
Err.Clear
Set p開始位置 = Excel.Application.InputBox( _
prompt:="将棋盤を作成するシートの作成開始左上をクリックしてください。" & vbLf & _
"※シートは全消去されます。", _
Title:="作成シート選択", _
Type:=8)
If Err Then Exit Sub
flgNew = True
Else
flgNew = False
End If
On Error GoTo 0
Set pWs = p開始位置.Worksheet
Set xlApp = p開始位置.Application
xlApp.Goto p開始位置
xlApp.Cursor = xlWait
xlApp.ScreenUpdating = False
xlApp.EnableEvents = False
If flgNew Then
'新規シート
pWs.Cells.Clear
ActiveWindow.DisplayGridlines = False
pWs.Names.Add Name:="開始駒位置", RefersToLocal:=p開始位置
Call シート名前定義
Call シート書式設定
Else
'既存シート
Call シート名前定義
Call シート消去
End If
Call Class_Initialize
xlApp.ScreenUpdating = True
Call 駒配置(arg手合い, arg大橋流)
xlApp.Cursor = xlDefault
With frm棋譜
If .Visible = False Then .Show vbModeless
Set .Parent = Me
End With
xlApp.Goto p先手時間.Offset(, -1)
xlApp.EnableEvents = True
End Sub
cls将棋盤
「成り」判定(MsgBoxで確認)をせずに、引数のarg成を使用する。
この引数はobj棋譜.棋譜作成に渡します。
Public Sub 着手(ByVal arg駒名 As String, _
ByVal arg元位置 As g位置, _
ByVal arg先位置 As g位置, _
ByVal arg先手 As Boolean, _
Optional ByVal arg成 As Variant, _
Optional ByVal arg時間1手 As Date, _
Optional ByVal arg時間累計 As Date)
'元位置:-1,-1は初期配置
'位置:0,0は駒台の出し入れ
Dim obj駒 As cls駒
Dim is成り As Boolean
Select Case True
Case arg元位置 Is Nothing '初期配置
Set obj駒 = New cls駒
Set Me.駒(arg先位置) = obj駒.駒作成(arg駒名, arg先手, arg先位置)
'棋譜は不要
Exit Sub
Case arg先位置.行 = 0 '駒台へ
Set Me.駒(arg元位置) = Nothing
'棋譜は不要
Exit Sub
Case arg元位置.行 = 0 '駒台から
Set obj駒 = New cls駒
Set Me.駒(arg先位置) = obj駒.駒作成(arg駒名, arg先手, arg先位置)
Case Else '駒移動
Set Me.駒(arg先位置) = Me.駒(arg元位置).Clone
Set Me.駒(arg先位置).駒位置 = arg先位置
'「is成り」はByRefで今回成ったかの情報が戻される
If IsEmpty(arg成) Or IsMissing(arg成) Then
Me.駒(arg先位置).成り = 成り判定(arg元位置, arg先位置, is成り)
ElseIf arg成 = "成" Then
Me.駒(arg先位置).成り = True
is成り = True
End If
Set Me.駒(arg元位置) = Nothing
End Select
'棋譜履歴
If arg元位置.行 = 0 Then
Call obj棋譜.棋譜作成(g位置(0, 0), Me.駒(arg先位置), False, _
arg時間1手, arg時間累計)
Else
Call obj棋譜.棋譜作成(arg元位置, Me.駒(arg先位置), is成り, _
arg時間1手, arg時間累計)
End If
'盤面履歴
Call 盤面履歴手数戻し
pCol盤面.Add pAry駒
Call 手番交代
End Sub
cls棋譜
棋譜作成時に時間を計測せずに、引数の時間を使用します。
'棋譜はKIF形式で作成
'###1 5ニ銀成(43) (mm:ss/hh:mm:ss)
Public Function 棋譜作成(ByVal arg元位置 As g位置, _
ByVal arg駒先 As cls駒, _
ByRef arg成り As Boolean, _
Optional ByVal arg時間1手 As Date, _
Optional ByVal arg時間累計 As Date) As String
Dim ary(1 To 15) As String
Dim n4 As String * 3
RSet n4 = Format(Me.手数 + 1, "0")
ary(1) = n4
ary(2) = " "
ary(3) = IIf(p手数 Mod 2, "△", "▲") & StrConv(10 - arg駒先.駒位置.列, vbWide)
ary(4) = WorksheetFunction.Text(arg駒先.駒位置.行, "[DBNum1]0")
ary(5) = IIf(arg成り, arg駒先.通常名称, arg駒先.表示名称)
If arg元位置.行 = 0 Then
ary(6) = "打"
ary(7) = ""
ary(8) = ""
ary(9) = ""
ary(10) = " "
Else
ary(6) = IIf(arg成り, "成", "")
ary(7) = "("
ary(8) = 10 - arg元位置.列
ary(9) = arg元位置.行
ary(10) = ")" & IIf(ary(6) = "", " ", "")
End If
ary(11) = " ("
If arg時間累計 = 0 Then
ary(12) = Format(Now() - p最終時刻, "h:mm:ss")
ary(13) = "/"
If Me.先手 Then
p先手時間 = Format(p先手時間 + CDate(ary(12)), "h:mm:ss")
ary(14) = Format(p先手時間, "h:mm:ss")
Else
p後手時間 = Format(p後手時間 + CDate(ary(12)), "h:mm:ss")
ary(14) = Format(p後手時間, "h:mm:ss")
End If
Else
ary(12) = Format(arg時間1手, "h:mm:ss")
ary(13) = "/"
ary(14) = Format(arg時間累計, "h:mm:ss")
End If
ary(12) = WorksheetFunction.Text(CDate(ary(12)), "[m]:ss")
If ary(12) = "0:00" Then ary(12) = "0:01"
If Len(ary(12)) = 4 Then ary(12) = " " & ary(12)
ary(15) = ")"
'棋譜履歴
Call 棋譜履歴手数戻し
pCol棋譜.Add Join(ary, "")
p最終時刻 = Now()
End Function
frm棋譜:ユーザーフォーム
'拡張子".kif"のShift-JISで出力
Private Sub btn棋譜出力_Click()
If Me.lst棋譜.ListCount = 0 Then Exit Sub
'保存ファイル選択
Dim vFile As Variant
vFile = Me.Parent.Application.GetSaveAsFilename( _
InitialFileName:=ThisWorkbook.Path & "\ExcelShogi.kif", _
FileFilter:="KIFファイル,*.kif")
If vFile = False Then
Exit Sub
End If
'KIFファイル保存
Dim i As Long
Dim intFree As Integer
intFree = FreeFile
Open vFile For Output As #intFree
Print #1, "# --- Excel将棋 V1.0.0 棋譜ファイル ---"
Print #1, "開始日時:" & Format(p開始時刻, "yyyy/mm/dd(aaa) hh:mm:ss")
Print #1, "終了日時:" & Format(p最終時刻, "yyyy/mm/dd(aaa) hh:mm:ss")
Print #1, "手合割:" & Me.cmb手合割
Print #1, "先手:" & Me.txt先手.Value
Print #1, "後手:" & Me.txt後手.Value
Print #1, "手数----指手---------消費時間--"
For i = 0 To Me.lst棋譜.ListCount - 1
Print #intFree, Replace(Replace(Me.lst棋譜.List(i), "▲", ""), "△", "")
Next
Close intFree
MsgBox "KIFファイルを出力しました。" & vbLf & vbLf & vFile
End Sub
棋譜読込自動再生
Private Type tKif
手数 As Integer
筋 As Integer
段 As Integer
駒 As String
成 As String
元筋 As Integer
元段 As Integer
時間1手 As Date
時間累計 As Date
End Type
'拡張子".kif"のShift-JISのみ対応
Private Sub btn棋譜読込_Click()
'保存ファイル選択
Dim vFile As Variant
vFile = Me.Parent.Application.GetOpenFilename(FileFilter:="KIFファイル,*.kif")
If vFile = False Then
Exit Sub
End If
'KIFファイルを読み込んで配列に
Dim aryKif() As String
aryKif = readKif(vFile)
If Not KIF棋譜読込(aryKif) Then
MsgBox "指定されたKIFファイルは処理できませんでした。"
End If
End Sub
'KIF形式ファイルからの棋譜の配列を読み盤面を再現する
Public Function KIF棋譜読込(ByRef aryKif() As String) As Boolean
Dim ary棋譜() As tKif
Dim s手合割 As String, s先手 As String, s後手 As String
Dim sSplit() As String
Dim i As Long, j As Long
j = 1
For i = LBound(aryKif) To UBound(aryKif)
Select Case True
Case Left(aryKif(i), 1) = "#", Left(aryKif(i), 1) = "*"
'コメント
Case Left(aryKif(i), 3) = "先手:"
s先手 = Trim(Mid(aryKif(i), 4))
Case Left(aryKif(i), 3) = "後手:"
s後手 = Trim(Mid(aryKif(i), 4))
Case Left(aryKif(i), 4) = "手合割:"
s手合割 = Trim(Mid(aryKif(i), 5))
Case InStr(aryKif(i), " ") = 0
'無視
Case Else
sSplit = Split(Trim(aryKif(i)), " ")
If IsNumeric(sSplit(0)) Then
ReDim Preserve ary棋譜(1 To j)
ary棋譜(j) = parseKif(aryKif(i))
If ary棋譜(j).手数 < 0 Then
KIF棋譜読込 = False
Exit Function
End If
j = j + 1
End If
End Select
Next
Me.txt先手.Value = s先手
Me.txt後手.Value = s後手
Me.cmb手合割.Value = s手合割
Call Me.Parent.ゲーム開始(s手合割, False)
Call KIF棋譜再現(ary棋譜)
KIF棋譜読込 = True
End Function
Private Sub KIF棋譜再現(ByRef ary棋譜() As tKif)
On Error GoTo ErrExit
Dim i先行 As Integer, i元行 As Integer
Dim i先列 As Integer, i元列 As Integer
Dim 先位置 As g位置, 元位置 As g位置
Dim i As Long
Application.Cursor = xlWait
Call ControlsEnable(False) '全コントロールを使用不可
For i = LBound(ary棋譜) To UBound(ary棋譜)
If ary棋譜(i).駒 <> "" And ary棋譜(i).筋 > 0 Then
Set 先位置 = Me.Parent.棋譜位置(ary棋譜(i).筋, ary棋譜(i).段)
Set 元位置 = Me.Parent.棋譜位置(ary棋譜(i).元筋, ary棋譜(i).元段)
Call Me.Parent.自動着手(ary棋譜(i).駒, _
元位置, 先位置, ary棋譜(i).成, _
ary棋譜(i).時間1手, ary棋譜(i).時間累計, _
50) '最後は再生スピード(ミリセカンド)
If Me.lst棋譜.ListCount <> i Then
Stop 'KIF解析不足なので確認用
End If
Else
Me.lst棋譜.AddItem Right(" " & ary棋譜(i).手数, 3) & " " & ary棋譜(i).駒
Me.lst棋譜.ListIndex = Me.lst棋譜.ListCount - 1
Me.Caption = ary棋譜(i).駒
End If
Next
Call ControlsEnable(True) '全コントロールを使用可
Application.Cursor = xlDefault
Exit Sub
ErrExit:
MsgBox "棋譜の再現に失敗しました。"
End Sub
Private Function parseKif(ByVal argKif As String) As tKif
On Error GoTo ErrExit
Const cns漢数字 = "一二三四五六七八九"
Dim sSplit() As String
argKif = Replace(argKif, "(", " ")
argKif = Replace(argKif, ")", " ")
argKif = Replace(argKif, "/", " ")
argKif = WorksheetFunction.Trim(argKif)
sSplit = Split(argKif, " ")
parseKif.手数 = sSplit(0)
If Not IsNumeric(sSplit(0)) Or _
Left(sSplit(1), 1) < "1" Or Left(sSplit(1), 1) > "9" Then
parseKif.駒 = sSplit(1)
Exit Function
End If
parseKif.筋 = StrConv(Left(sSplit(1), 1), vbNarrow)
parseKif.段 = InStr(cns漢数字, Mid(sSplit(1), 2, 1))
If Mid(sSplit(1), 3, 1) = "成" Then
parseKif.駒 = Mid(sSplit(1), 4, 1)
Else
parseKif.駒 = Mid(sSplit(1), 3, 1)
End If
If Right(sSplit(1), 1) = "成" Then
parseKif.成 = "成"
End If
Select Case UBound(sSplit)
Case 3
parseKif.時間1手 = mmss2hhmmss(sSplit(2))
parseKif.時間累計 = CDate(sSplit(3))
Case Is >= 4
parseKif.元筋 = Left(sSplit(2), 1)
parseKif.元段 = Right(sSplit(2), 1)
parseKif.時間1手 = mmss2hhmmss(sSplit(3))
parseKif.時間累計 = CDate(sSplit(4))
Case Else
parseKif.手数 = -1
Exit Function
End Select
Exit Function
ErrExit:
parseKif.手数 = -1
End Function
Private Function mmss2hhmmss(ByVal mmss As String) As Date
If Len(mmss) = Len(Replace(mmss, ":", "")) + 1 Then
mmss = "0:" & mmss
End If
If IsDate(mmss) Then
mmss2hhmmss = CDate(mmss)
Else
mmss2hhmmss = 0
End If
End Function
Private Function readKif(ByVal argFile As String, _
Optional ByVal CharSet As String = "SHIFT-JIS") As String()
Dim strRec As String
Dim aryRec() As String
'SHIFT-JISで読んで"先手:"が無ければUTF-8で読み直す
strRec = readStream(argFile, CharSet)
If UCase(CharSet) = "SHIFT-JIS" And InStr(strRec, "先手:") = 0 Then
strRec = readStream(argFile, "UTF-8")
End If
readKif = Split(Replace(strRec, vbCrLf, vbLf), vbLf)
End Function
Private Function readStream(ByVal argFile As String, _
ByVal CharSet As String) As String
With CreateObject("ADODB.Stream")
.CharSet = CharSet
.Open
.LoadFromFile argFile
readStream = .ReadText
.Close
End With
End Function
'Me.Enabledでは、VBA終了時にフォームが戻らない場合があったので対応
Private Sub ControlsEnable(ByVal argEnabled As Boolean)
Dim ctl As Control
For Each ctl In Me.Controls
ctl.Enabled = argEnabled
Next
End Sub
棋譜リストのクリック
Private Sub lst棋譜_Change()
If EventStop Then Exit Sub
'詰み、投了
If Me.lst棋譜.ListIndex > 0 Then
If Len(Me.lst棋譜.List(Me.lst棋譜.ListIndex)) < 10 Then
Call Me.Parent.特定局面再現(Me.lst棋譜.ListIndex)
Me.Caption = Me.lst棋譜.List(Me.lst棋譜.ListIndex)
Exit Sub
End If
End If
'指定手数の局面を再現
Call Me.Parent.特定局面再現(Me.lst棋譜.ListIndex + 1)
Call 先手後手表示
End Sub
Excel将棋のダウンロード
棋譜KIFファイルのサンプル
先手:
後手:
開始日時:2020/07/28 00:47:26
棋戦:
持ち時間:10分
手合割:平手
手数----指手---------消費時間--
1 5六歩(57) (00:01/00:00:01)
2 8四歩(83) (00:04/00:00:04)
*△備考:居飛車
3 5八飛(28) (00:02/00:00:03)
*▲備考:振り飛車
4 8五歩(84) (00:00/00:00:04)
5 7八金(69) (00:01/00:00:04)
6 3四歩(33) (00:11/00:00:15)
7 6八銀(79) (00:01/00:00:05)
8 6二銀(71) (00:05/00:00:20)
9 5七銀(68) (00:02/00:00:07)
10 4二玉(51) (00:01/00:00:21)
11 4六銀(57) (00:05/00:00:12)
12 3二銀(31) (00:04/00:00:25)
13 4五銀(46) (00:04/00:00:16)
14 3三銀(32) (00:01/00:00:26)
15 5五歩(56) (00:02/00:00:18)
*▲戦型:原始中飛車
16 4四歩(43) (00:11/00:00:37)
17 5六銀(45) (00:01/00:00:19)
18 1四歩(13) (00:11/00:00:48)
19 7九角(88) (00:02/00:00:21)
20 6四歩(63) (00:05/00:00:53)
21 4八玉(59) (00:03/00:00:24)
22 1五歩(14) (00:03/00:00:56)
23 3八玉(48) (00:03/00:00:27)
24 7四歩(73) (00:06/00:01:02)
25 2八玉(38) (00:02/00:00:29)
26 7三桂(81) (00:01/00:01:03)
27 7六歩(77) (00:06/00:00:35)
28 8六歩(85) (00:20/00:01:23)
29 8六歩(87) (00:02/00:00:37)
30 8六飛(82) (00:02/00:01:25)
31 8七歩打 (00:01/00:00:38)
32 7六飛(86) (00:11/00:01:36)
33 6六歩(67) (00:02/00:00:40)
34 7五飛(76) (00:10/00:01:46)
35 9六歩(97) (00:01/00:00:41)
36 8五飛(75) (00:03/00:01:49)
37 7七桂(89) (00:09/00:00:50)
38 8四飛(85) (00:15/00:02:04)
39 9七角(79) (00:02/00:00:52)
40 6三銀(62) (00:03/00:02:07)
41 6五歩(66) (00:01/00:00:53)
42 7五歩(74) (00:25/00:02:32)
43 7五角(97) (00:02/00:00:55)
44 7四飛(84) (00:06/00:02:38)
45 8六角(75) (00:01/00:00:56)
46 7六歩打 (00:09/00:02:47)
47 7五歩打 (00:05/00:01:01)
48 8四飛(74) (00:04/00:02:51)
49 9五角(86) (00:02/00:01:03)
50 8三飛(84) (00:07/00:02:58)
51 6四歩(65) (00:01/00:01:04)
52 5二銀(63) (00:21/00:03:19)
53 7四歩(75) (00:02/00:01:06)
54 7七歩成(76) (00:15/00:03:34)
55 7三歩成(74) (00:02/00:01:08)
56 6六桂打 (00:18/00:03:52)
*△手筋:ふんどしの桂
57 3八飛(58) (00:13/00:01:21)
58 7八と(77) (00:37/00:04:29)
59 8三と(73) (00:01/00:01:22)
60 5七金打 (00:04/00:04:33)
61 6三歩成(64) (00:02/00:01:24)
62 5六金(57) (00:04/00:04:37)
63 5二と(63) (00:02/00:01:26)
64 5二金(61) (00:00/00:04:37)
65 6四桂打 (00:01/00:01:27)
66 6三銀打 (00:26/00:05:03)
*△手筋:桂頭の銀
67 5二桂成(64) (00:11/00:01:38)
68 5二銀(63) (00:02/00:05:05)
69 8二飛打 (00:01/00:01:39)
70 4七金(56) (00:08/00:05:13)
71 6三銀打 (00:02/00:01:41)
72 4六桂打 (00:10/00:05:23)
73 5二銀成(63) (00:01/00:01:42)
74 5二金(41) (00:01/00:05:24)
75 4三歩打 (00:01/00:01:43)
76 4三玉(42) (00:06/00:05:30)
77 3二銀打 (00:05/00:01:48)
78 3二玉(43) (00:18/00:05:48)
79 5二飛成(82) (00:01/00:01:49)
80 4二銀打 (00:08/00:05:56)
81 4三金打 (00:02/00:01:51)
82 3一玉(32) (00:01/00:05:57)
83 4二金(43) (00:01/00:01:52)
84 4二銀(33) (00:02/00:05:59)
85 4一金打 (00:01/00:01:53)
86 3二玉(31) (00:04/00:06:03)
87 4二龍(52) (00:04/00:01:57)
88 詰み
まで87手で先手の勝ち
Excel将棋の目次
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- Excel将棋:棋譜ファイルの出力と読込自動再生(№14)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。