SSブログ

エクセル180°回転シートで制御部を自動作成(長さん)

既に述べたように、表計算ソフトで、長方形型
の将棋盤を表す領域を逆転させる関数として
Indirect()がある。この表計算関数
を使うには、間接参照させる為「180°回転
指示部」に、13升目将棋の180°回転なら、
テキストファイルで、
M13,L13,K13,J13,I13,H13,G13,F13,E13,D13,C13,B13,A13,
M12,L12,K12,J12,I12,H12,G12,F12,E12,D12,C12,B12,A12,
M11,L11,K11,J11,I11,H11,G11,F11,E11,D11,C11,B11,A11,
M10,L10,K10,J10,I10,H10,G10,F10,E10,D10,C10,B10,A10,
M9,L9,K9,J9,I9,H9,G9,F9,E9,D9,C9,B9,A9,
M8,L8,K8,J8,I8,H8,G8,F8,E8,D8,C8,B8,A8,
M7,L7,K7,J7,I7,H7,G7,F7,E7,D7,C7,B7,A7,
M6,L6,K6,J6,I6,H6,G6,F6,E6,D6,C6,B6,A6,
M5,L5,K5,J5,I5,H5,G5,F5,E5,D5,C5,B5,A5,
M4,L4,K4,J4,I4,H4,G4,F4,E4,D4,C4,B4,A4,
M3,L3,K3,J3,I3,H3,G3,F3,E3,D3,C3,B3,A3,
M2,L2,K2,J2,I2,H2,G2,F2,E2,D2,C2,B2,A2,
M1,L1,K1,J1,I1,H1,G1,F1,E1,D1,C1,B1,A1,
を作成等して、米マイクロソフトのオフィスの、
たとえばエクセルを使用するとすれば「CSV
取り込みする」などして、インダイレクト関数
が、13升目部の間接参照が180°回転型で
できるようにしておくか。セルにM13、
M12・・と手打ち入力して行くかのどちらか
である。
 つまり、そのとき述べたように、この文字列
データは、「自動入力」出来無いからこそ、
エクセルで、乱れずに13盤升目局面の180°
回転が出来るのである。
 しかし「手打ち入力」は、秦将棋の180°
回転のように、M13・・ではなくて、Y25・
Y24・・・になったら、セルで625個の
単純作業で入力するハメに陥るので、

はなはだ面倒

である。
 そこで今回は日本電気㈱のN88BASIC
の類で、テキストファイルを予め自動で作って
おくやり方を、本ブログで紹介する。
 以下には、米マイクロソフトのQbasic
Ver.1.1で、「クイックベーシック・
リファレンスマニュアル」を参照した上で、同
インタープリターに読ませる.bas拡張子の
アスキー(=テキスト)ファイルを作成したも
のを示している。
100 OPEN "test.txt" FOR OUTPUT AS #1
110 MASU% = 13
120 FOR I = MASU% TO 1 STEP -1
130 FOR J = MASU% TO 1 STEP -1
140 PRINT #1, CHR$(64 + J) + LTRIM$(STR$(I)); ",";
150 NEXT J
160 PRINT #1, ""
170 NEXT I
180 END
以上のいわゆる「ベーシックのプログラム」を
作成し、MSDOS~windows95時代
に「ベーシックのプログラム」言われた、この
ソースファイルを、インタープリターである米
マイクロソフト社QbasicVer1.1
(≒クイックベーシック)に読ませると、
test.txtファイルを生成して、
Indirect()関数の「180°回転
指示部」作成取り込み用「.CSVファイル」
が、冒頭の文字列のように作られる。
 なお、実際には今回は、windows10
32bit版レガシーモードを使用し、
QBasicVer.1.1(マイクロソフト)
を動作させてテスト作成してみた。
 上でMASU%=13となっている部分を、
MASU%=25に変えると、平安大将棋型の
13升目用ではなくて、25升目の秦将棋用に
なる。
 また、冒頭で述べたように、マイクロソフト
のQbasicは、日本電気㈱の、
N88Basic系統のPCアプリケーション
ソフトであり、「BASIC言語」属の
インタープリター・アプリケーション・ソフト
ウェアーであるが、言語使用は日本電気㈱型と、
米マイクロソフト型で細かくバラバラで、恐ら
く上記で、
LTRIM$(STR$(I))
と書かれた部分は、私の記憶では単に
STR$(I)
に変えないと、N88Basicでは、動かな
かったはずである。
 ようするにLTRIM$()とかRTRIM
()関数は、N88BASIC(エハチハチ
ベーシック)には、無かったはずだ。つまり、
マイクロソフトのQBasicや日本用に直し
たQuickBasic(クイックベーシック)
では、STR$関数の引数が正整数のとき、
先頭に符号部の「スペース1個」を入れるが、
日本電気㈱N88BasicのSTR$関数に、
そんなめんどくさい事が有ったという記憶が私
には無いという意味である。
 なお上記の、「ベーシックプログラム」は、
26升目将棋以下用のものであり27升目以上
702升目以下の場合には、INT()関数や、
MOD演算子で制御しながら、記したもの
より行数の多い、ベーシックプログラムを別途
作成して使う必要がある。AA例、AB列、
・・が、エクセル表で現れる為である。
100 OPEN "test.txt" FOR OUTPUT AS #1
110 MASU% = 36
120 KETA2%=INT(MASU%/26)
130 SAIGOKT1%=(MASU% MOD 26)
140 IF SAIGOKT1%=0 THEN KETA2%=KETA2%-1
150 '
160 FOR I = MASU% TO 1 STEP -1
170 '
180 IF KETA2%<2 THEN 500
190 IF SAIGOKT1%=0 THEN SAIGOKT1%=SAIGOKT1%+26
200 FOR J=SAIGOKT1% TO 1 STEP -1
210 PRINT #1, CHR$(64 + KETA2%) +CHR$(64 + J)+ LTRIM$(STR$(I)); ",";
220 NEXT J
300 '
310 FOR J=KETA2% TO 2 STEP -1
320 FOR K=26 TO 1 STEP -1
330 PRINT #1, CHR$(63 + J) +CHR$(64 + K)+ LTRIM$(STR$(I)); ",";
340 NEXT K
350 NEXT J
360 '
370 FOR K=26 TO 1 STEP -1
380 PRINT #1,CHR$(64 + K)+ LTRIM$(STR$(I)); ",";
390 NEXT K
400 GOTO 980
490 '
500 IF KETA2%<1 THEN 900
510 IF SAIGOKT1%=0 THEN SAIGOKT1%=SAIGOKT1%+26
520 FOR J=SAIGOKT1% TO 1 STEP -1
530 PRINT #1, CHR$(65) +CHR$(64 + J)+ LTRIM$(STR$(I)); ",";
530 NEXT J
600 '
700 FOR K=26 TO 1 STEP -1
710 PRINT #1,CHR$(64 + K)+ LTRIM$(STR$(I)); ",";
720 NEXT K
730 GOTO 980
800 '
900 'KETA2%=0
905 IF SAIGOKT1%=0 THEN SAIGOKT1%=SAIGOKT1%+26
910 FOR K =SAIGOKT1% TO 1 STEP -1
920 PRINT #1, CHR$(64 + J) + LTRIM$(STR$(I)); ",";
930 NEXT J
940 GOTO 980
950 '
980 PRINT #1, ""
990 NEXT I
1000 END
 チェックしてい無いが、大局将棋用は上のよ
うな感じか? 702桁を超えるケースの
ベーシック・プログラムを、間違いなく作るの
は、相当しんどそうだ。ただし実用性は、余り
あるまいが。
 米マイクロソフトqbver1_1.zip
は、供給サイトが今では不安定であるし日本語
QuickBasic(クイックベーシック)
と違って、日本語でベーシックプログラムが
作成出来ず、それどころか、Usキーボードを
パソコンに繋がないと、キーボード入力出来な
いので厄介であるが。

多分だが、今述べた言語仕様が、エクセルの
VBAにも引き継がれている疑いが濃い

と見たので、エクセルVBAは判らないが、
日本電気㈱のN88Basic系は使える管理
人は今回、米マイクロソフトのレガシー
QBasicVer1.1で米マイクロソフト
のエクセルの冒頭問題に、試しに対処して見た
という、以上顛末である。(2023/07/24)

nice!(7)  コメント(0) 
共通テーマ:趣味・カルチャー