今でも役立つBASIC


 近年はテレビの普及によって,方言が使われなくなってきたと言われるが,それぞれの地方の方言はまだまだ健在である。また,首都圏や関西圏でも,それぞれの地域毎に微妙な方言の違いが残っている。川崎市北部の言葉と南部の言葉は,明らかに異なるのである。
 人間というものは言葉を変化させるのが好きなようで,もともと同じ言葉だったものが,少しずつ変化して行き,何れ明らかに異なる方言となって,やがては別の言語となってしまうのである。このことはコンピューター言語の世界において,より顕著である。次々に新しい言語が発表され,普及して行くので,気が付くとBASICもFORTRANも使えなくなっていたりするのである。それにしても,C言語のあとにC++は出来るし,ジャヴァだパールだと,次々と出て来て訳が分からない。それよりも,以前に普及している言語をベースにして,誰でも使えるようなものをどうして開発しないのか,疑問を通り越して腹立たしくさえなる。
 さて,今時BASICなど使う化け猫は殆ど化石だと言われるかも知れないが,実はBASICは今でも非常に有用なのである。どこで使うかというと,Excelのマクロである。
 例えば,タイピング 〜 運指法の謎のページをご覧いただきたい。この中には,キーボードの配置の図が2つあるが,これのソースがかなり複雑であることは,HTML(ん? これも言語か・・・)の使い手なら誰でもお分かりになるだろう。実際,ソースを見ると,この図のタグがこのファイルのサイズの半分位を占めているのである。これを実は私は殆どBASICの知識だけで作ったというと驚かれるに違いない。種明かしすると,こうである。
 まず,Excelのシートにこのように入力する。

 ABCDEFGHIJKLMNO
11234567890BS
2404040404040404040404040404040
3111234455678888
4TabEnter 
56040404040404040404040404060 
611234455678888 
7Caps 
87040404040404040404040404050 
911234455678888 
10ShiftShift  
1190404040404040404040404070  
121234455678888  

 次に,以下のマクロを実行させるのである。

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2002/3/23 ユーザー名 : (=^^=)
'

   Dim x$(8), y$(8)
   x$(1) = "white"
   y$(1) = "black"
   x$(2) = "black"
   y$(2) = "white"
   x$(3) = "red"
   y$(3) = "white"
   x$(4) = "blue"
   y$(4) = "white"
   x$(5) = "yellow"
   y$(5) = "black"
   x$(6) = "green"
   y$(6) = "white"
   x$(7) = "#00ffff"
   y$(7) = "black"
   x$(8) = "#ff00ff"
   y$(8) = "black"
   Open "type.txt" For Output As #1
   For i = 1 To 4
   Print #1, "<table border=1><tr>"
   For j = 1 To Int(15.8 - i / 2)
   a$ = Cells(i * 3 - 2, j)
   b$ = Cells(i * 3 - 1, j)
   c$ = Cells(i * 3, j)
   Print #1, "<td ";
   If j = 1 Then Print #1, "height=40 ";
   Print #1, "width="; b$; " bgcolor="; x$(Val(c$));">";
   Print #1, "<font color="; y$(Val(c$)); "><center>"; a$; "</center></font></td>";
   Next j
   Print #1, "</tr></table>"
   Next i
   Close
'
End Sub

 これでキーボードの絵のソースが出来上がるので,HTMLファイルにコピペするだけである。私はエクセルのマクロを習ったことが一度もない。適当にいじっているうちに,エクセル上でBASICを実行する方法を知って,cellsという関数を教えてもらっただけなのである。今時,エクセル上でopenなんて使う人がいるのかどうか知らないが,実に便利な機能である。また,BASICを使っていた人にとっては,行番号がない(付けたいときだけ付ける)ことには違和感を感じるかもしれないが,FORTRANを使ったことがある人にはお馴染みの仕組である。

 ちなみに,このページのエクセルの表もマクロで作ってある。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2002/3/24 ユーザー名 : (=^^=)
'

   Open "vba.txt" For Output As #1
   Print #1, "<table border=1>"
   Print #1, "<tr><td bgcolor="#7f7f7f"> </td>";
   For i = 1 To 15
   Print #1, "<td bgcolor="#7f7f7f">"; Chr$(&H40 + i); "</td>";
   Next
   Print #1, "</tr>"
   For i = 0 To 3
   For j = 1 To 3
   Print #1, "<tr><td width="60" bgcolor="#7f7f7f">"; Str$(i * 3 + j); "</td>";
   For k = 1 To 15
   a$ = Cells(i * 3 + j, k)
   If a$ = "" Then a$ = " "
   Print #1, "<td>"; a$; "</td>";
   Next k
   Print #1, "</tr>"
   Next j, i
   Print #1, "</table>"
   Close
'
End Sub

 str$,chr$など,BASICでお馴染みの関数がそのまま使えるのが嬉しい限りである。ところで,どうしてExcelの関数や文法がVBAと微妙に違うの? Excelで=if(a1=a2 and a2<>3,a1,"")と書いたらエラーになって,=if(and(a1=a2,a2<>3),a1,"")と書かなければならないことを知ったのは,実はつい最近のことであった。(=^^=;;


ITバブルを茶化すコーナー    化け猫屋敷に戻る   化け猫屋敷掲示板(=^^=)m   級シスアド連盟