質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1160閲覧

将棋:数字・漢字・アルファベットの混じった文字列の変換

ninngin

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/24 00:41

編集2021/09/24 01:19

##再現したいこと

将棋のSFEN形式をVBAで再現したいです。
例)lg1k4l/3s1+Ps2/p2ppp3/2p4+r1/2g3L1p/Pp1PbP3/1GP5P/1KG1N4/LN2rB2+s w S2NP4p 120

盤面の再現まではできたのですが、最期に持ち駒の変換ができませんでした。
文字の区切りのコードをどのように書けばよいかわかりません。

イメージ説明

上の図で、後手・先手持ち駒が S2NP4歩 とありますが、これを
後手の持ち駒には【歩、歩、歩、歩】
先手の持ち駒には【銀、桂、桂、歩】と表示したいです。

考えていたコードは
①右から文字認識をし、アルファベット大文字に切り替わったところで、セルを分割する
②数字は分割せず、2桂なら桂桂と変換する
③後手番は反転させる←これはできそうです

こんなコードは可能でしょうか?
ご教授いただけると幸いです。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hex309

2021/09/24 01:06 編集

図が見えません。再度アップしてください。 また、実際に試したコードを掲載してください。 そのほうが回答がつきやすいと思います。
dodox86

2021/09/24 01:19

テーマとして面白そうなのに、ほぼ丸投げ案件になっているのが残念ですね。(私自身は低評価はしていません) [質問するときのヒント] https://teratail.com/help/question-tips
FKD

2021/09/24 01:59

後手持ち駒(sfenではアルファベット小文字)を、漢字変換しているのは何故ですか?
ninngin

2021/09/24 02:05

後手を180度回転させるために、変換していました
FKD

2021/09/24 02:13

ソース記載ないので分かりませんが、変換過程の文字列って事ですね。 後、歩は最大18枚なので、数字は2桁まで考慮する必要あります。
guest

回答1

0

ベストアンサー

こんな感じでどうでしょうか。

VBA

1Sub sample() 2 Dim mc '持ち駒の文字列 3 mc = "S2NP4歩" 4 5 Dim i, m, n, b, w 6 7 n = 1 '各駒の数(デフォルトは1つ) 8 9 For i = 1 To Len(mc) 10 11 m = Mid(mc, i, 1) '持ち駒の文字列を1文字ずつ取得 12 13 If IsNumeric(m) Then '数字の場合 14 n = m '駒の枚数として記憶 15 16 Else '数字以外(英字、漢字) 17 18 If m Like "[A-Z]" Then '英大文字の場合(=先手) 19 Select Case m '漢字に変換 20 Case "S": m = "銀" 21 Case "N": m = "桂" 22 Case "P": m = "歩" 23 End Select 24 b = b & WorksheetFunction.Rept(m, n) '先手の持ち駒の変数に追加 25 ' 例:Rept("銀", 2)は銀銀 26 27 Else '上記以外(英小文字、漢字)の場合(=後手) 28 w = w & WorksheetFunction.Rept(m, n) '後手の持ち駒変数に追加 29 30 End If 31 32 n = 1 '枚数をクリア 33 End If 34 Next 35 36 Debug.Print b, w 37 38End Sub

投稿2021/09/24 01:22

編集2021/09/24 02:40
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ninngin

2021/09/24 02:01

丸投げ質問に対しても、丁寧に回答していただきありがとうございました コードの意味が全く分かりませんが、再現したい結果が得られました シンプルなコードでここまでできるのだな、と感心しさらにVBAを学んでいきたいと感じました ありがとうございます!
ninngin

2021/09/24 02:41

細かい解説もありがとうございます! 今後は駒を動かすところまでチャレンジしてみたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問