さあ、センセーと一緒にプログラムのお勉強よ!

 いやいや、もちろんプログラムを教えるつもりもないし、教える能力もない、もう教えて欲しい。自分のことだけで精一杯!プログラムと言っても大昔ベーシックでゲームもどきを作ったことがある程度。しかも昔のと今のとは違うんだ。オブジェクト指向なんだ。えっ、それなに?聞かないでチョウダイ!しかし円丈は、もう一度プログラムをやる決心をした。だから近々、このH・PでもJAVAを使ったページになって行く予定だ。ではご一緒にお勉強を!   三 遊 亭 円 丈


  【MENU】
◎Exselのマクロに挑戦!
◎JAVAだよ〜〜になる予定
       どれを?


第1回
 今回はVisual Basicだもんね

 いやいや、今私の主催してる狛犬研究会でExcelを使って日本全国の狛犬データベースを製作中で7-8千社のデータを入力中なんだ。「おめえ、Excelは表計算ソフトだぞ。データベースならACCESSだろ?」そうなんだけど、あのACCESSっすんげえ難しいんだよ。クエリーとか、訳の分かんない言葉が突然出てきて使いこなすのがメチャ大変。
  そこで割りと簡単なExcelでデータベースを作ることになったんだ。でもエクセルだと出来ないことが多い。それを可能にするのがマクロ。最初マグロだと思ったけど違うんだね。マクロ!これでプログラムのようなものを書くと色んなことが出来る。そこでマクロでやって見た。


・・でマクロってな〜〜に?

 MS・Officeを買うとマクロを作るためにVB(Visual Basic) と言う言語がオマケで付いてくるんだ。これでExcel用に短いプログラムを書く、これをマクロと言うらしいんだ。すると今まで出来なかったが簡単に出来るみたいだね。
  正確にはVBではなく(Visual Basic for Application)でVBA!VBとVBAってどう違うのか?早い話。VBAはオマケでタダで付いてくるけど。VBは金出して買うんだ。中身は同じなんだけどVBAは、タダだからExcelや、Wordにくっついてないと動かない。だからいくらオマケのVBAで腕を磨いても単独のソフトは作れないって訳だ。まあチャンとしたソフトをつくるんならVBを金出して買って頂戴と言うのがMSの意見なんだろうね。だから私はただで配ってるJAVA言語の方をやるんだも〜〜ん!まあ、それはともかくどんなもんかとりあえずVBAでマクロってもんを作ってみよう!ホント出来んのかねえ?

Visual Basicのテキスト・・4冊も買ったのにちぃ〜〜とも分からん

 でもマクロって言ってもどんなもんなのか?そこでExcelのマクロ用にこの「かんたんプログラミング」シリーズを3冊(関数編、基礎編、応用編)を購入した。しかもそれだけでも心もとないので。更に同じシリーズの「Visual Basic基礎編」と合計4冊を購入したが、・・・・・ちっとも簡単じゃねえぞ。もうメチャンコ分からん!結構真剣に読んだんだけどやっぱり分からん。これは
◎VBAが難しすぎるのか?
◎この本がダメなのか?
◎それとも私がカラバカなせいなのか?
  原因が掴めない。でもとにかく手始めにプログラムしてみようじゃないか?何とかなるだろ?
【簡単って言うんだけどむずかし〜〜い】


 
マクロ1・ゲッ、住所に2千件以上「埼玉県」って入れる!そんなのいやだよ〜っ!
そこで強制的に住所の頭に「埼玉県」と書き込むマクロ

  ある狛研会員、埼玉2500社データの住所項目に「埼玉県」って入ってない。これをひとつひとつ手で入力したら。タイヘンだよ。一件につき最低5秒はかかるよ。それが2500件だとヒャ〜〜ッ!最低4時間はかかる。イヤだよ〜っ。
  こんな単純作業こそパソコンにやらせるに限るね。コンピュータってバカだから飽きるって事を知らないからモクモクとするんだね。こんなのは昔のBasicなら10分で入力できるプログラムだ。・・しかし今はVBAだから・・サッパリわからん。そこでVBAの本と首ッ引きでとにかくプログラムの入力を開始したが、これの書式が分からない。2.3回エラーがでたが、それでも遂に次のようにプログラムでついに動いた。

これが円丈最初のマクロ

Sub 埼玉追01()
' 埼玉追加01 Macro
' マクロ記録日 : 2002/11/9 ユーザー名 : hiroshi
Dim JIN As String
Dim i As Integer
  For i = 2 To 1088
    Cells(i, 2).Select
    JIN = Cells(i, 2).Value
    JIN = "埼玉県" & JIN
    Cells(i, 2).Value = JIN
  Next i
End Sub

まあ、FOR文でループさせながら同じことを何度もさせるアホ・プログラム。FOR文は昔のベーシックで数百回は使った。なつかしのステートメントだね。最初Dim(デイメンジョン)で変数を設定する。
◎その行の住所項目をJINと言う文字変数に代入!
◎更にその文字変数JINに"埼玉県"をたしてひとつの文字列にする。
◎それを再びその行の住所項目に代入。これで埼玉県が住所の頭につくことになる。
◎それをFOR文で2行目〜1088行目までループして仕事をさせる。
そしてついにマクロが走り、たった2.3秒で仕事完了!ひえ〜〜っ、うれしい。     

  マクロ2・・狛犬データベース。神社数が分からない・・んな、あほな!
そこで神社数を求めるマクロだよ

 以前から狛研では各自が調査した狛犬データを持っていたが、しかし神社には3対あるところもゼロのところもある。その上、鳥居のデータなどがズラズラあって、一体何社の神社があるのか分からない。そこで同じ神社の項目を括ってデータ化してたが、それだとデータのフィルターや、並べ替えが上手く出来ない。
  そこで自信はないが昔ベーシックをやったから挑戦しようと言うことになった。しかしこれもプログラムとしてはかなり単純なレベルだよね。昔のベーシックなら直ぐ出切るよ。

ついにマクロは出来たが・・動かない
こらマクロ走れ〜〜っ!走らんと削除するぞ

 ホントに参った。プログラム的にはもう単純なんだよ。流れからすると。
(1) 神社と住所の2つの項目を前の行の2つと比較。
(2)両方同じなら同一神社だから神社数はカウントしない。
(3)それ以外は別な神社だから神社数を1増やす。
(4)これをそのデータの最後まで繰り返す。・・・おわり!
・・以上なんだ。ホント大したことない。ところがこのプログラムは出来たがエラーがでる。しかもどう言うエラーなのか、どの辺がいけないのかサッパリ分からない。果たして円丈はマクロは使いものになるのか?危うし円丈!!

神様は円丈に弟子のかぬうをお遣わしになられた・・。
昔、プログラマーのかぬう登場!

 いやいや、なんでも弟子って取るもんだね。かぬうは入門するまでプログラマーだった。と本人は言っるが、正直疑っていた。その根拠は?
◎まずかぬうはパソコンに全然、興味がない。
◎しかもパソコンの事を聞いてもあまり良く分からない様子なんだ。


  だから弟子のかぬうは、プログラマーと言うより、ただのキーパンチャー程度の奴だろうと思っていた、。そこにかぬう登場!もうこうなったら、ワラをも掴む心境。そこでかぬうにエラーの出たマクロを見せて。
円 丈「このマクロってファンクションSubにするんだろ?」
かぬう「いえ、これは普通のSubなんとかで大丈夫ですよ」
円 丈「そうか・・いつものSubなんとかでいいのか」
かぬう「師匠!この、(カンマ)はこっちの,(カンマ)です」
円 丈「あっそうだった?・・・でもまだエラーがでるぞ」
かぬう「End Ifがないですよ」
円 丈「あっそうかそうか・・あっ、キャッホ〜〜〜ッ、動いたよ〜〜ん」

 いやいや、うれしいな。かぬうは偉い!!!!正直、私はきっとかぬうはタダモノではないと思ったいたがさすがだ。お前は偉い!ホントにプログラムができたんだ。良くやった。

  ・・で動いたのが下のプログラム!しか判定プログラムの部分に関しては別に間違ってなかった。うん、これって自信に繋がるねえ。


 動いたマクロ2がこれ!
Sub 神社数()’ファンクションSubを普通のSubに戻した!
Dim Jinsu As Integer
Dim i As Integer: Jinsu = 1
 For i = 2 To 100
  If i = 2 Then Cells(i, 3).Value = Jinsu ’ここいらカンマが違ってた
  If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then
  Jinsu = Jinsu: Cells(i, 3).Value = Jinsu
  Else: Jinsu = Jinsu + 1: Cells(i, 3).Value = Jinsu
  End If ’かぬう指摘して追加した「End If」
 Next i
End Sub

 動いて良かったが、しかし良く見ると汚いプログラムだね。このプログラムに美しさがない。プログラムには流れるような言語の記述とそんなテクがあったのか?・・と言うようなものが欲しい。それにこれだと行数を自分で調べてその数を100としたところに入力しないといけない。そこで改造!
◎プログラムが自分で行数分だけカウントする。
そこで本を見ると「Do Until〜Loop文」(ある条件が整うまでLoopする)と言う命令がある。おっ、いいじゃねえか?昔のベーシックにはなかったステートメントじゃねえか。じゃこれを使ってみっか?そこで改造版がしたのこの通り!  

マクロ2の改良版
Sub 神社数3()
' 神社数カウント
' マクロ記録日 : 2002/11/18 ユーザー名 : hiroshi
Dim Jinsu As Integer
Dim i As Integer: Jinsu = 1: i = 2
 Do Until Cells(i, 1).Value = ""’神社項目がヌルになるまで以下の仕事をしろ!
   If i = 2 Then
    Cells(i, 3).Value = Jinsu: i = 3
    ElseIf Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then
    Jinsu = Jinsu: Cells(i, 3).Value = Jinsu: i = i + 1’FOR文じゃないのでiに1を足してる
    Else: Jinsu = Jinsu + 1: Cells(i, 3).Value = Jinsu: i = i + 1
   End If
 Loop
End Sub

 【もう神社カウント・ボタンもつけて完成〜っ】

 今度はなんと一発血で動いて行末でピタッと止まった。な〜んだ、こんなんで行けちゃの?俺って天才?楽勝じゃない?
  それで今度は神社マークのボタンを取り付け完成!この神社マークは円丈自作なんだ。どう?
  しかしこんな簡単なことするだけでも時間だけは結構掛かったね。あ〜〜あ、正直疲れた!

そして今度はもうマクロ癖がついて。行数をカウントするだけのマクロ!そんなのEcxelの機能にあるだろ?そうなんだけど。探したけど見つからない。そこで面倒だから自分でつくったのが、次のマクロ。早い話が今までのマクロから機能を削除したようなプログラムだね。

ついマクロ癖がついて単純にカウントするだけのマクロ
Sub 数3()
'' Macro3 Macro
' マクロ記録日 : 2002/11/11 ユーザー名 : hiroshi
Dim s As Integer
Dim i As Integer: i = 2
 Do Until Cells(i, 1).Value = ""
  s = i - 1
  Cells(i, 19).Value = s: i = i + 1
 Loop
End Sub
 こんなカウント行なんかどうするんだ?なんか使い道があるのか?実はExcelの機能で【並べ替え】がある。しかしこれを一回使うと元に戻らなくなる。その時,カウント行を作っておけば、その項目の並べ替えで元に戻ると言うチョイとした裏技だ。・・実はこれがかぬうセンセンーお勧めの技なんだ。いやあ、かぬうは偉い!早く落語も上手くなりなさい。

もうひとつの言語JAVAだ
さあ今度はJAVAをマスターだ!!


【一方JAVA言語の方は?】
 とにかくHPで使おうと思うとVBより、JAVAなんだ。それにJAVAの方が、VBより、馴染めそうだし、JAVAを少しずつ始めてる。
  まだ本をみてそのまま打ち込む状態だが、単純なプログラムを打ち込んだだけでエラーが8個。ハハハッ。なかなか手強そうな奴だなあ。
  でもなんだかVB(ビジュアルベーシック)より、気が合いそうでおもしろそうだ。次回にはJAVAアプレットを使ってでH・Pを作って見ようと思う。しかもなんと言ってもJAVAはタダなんだ。気に入ったね。

【どうエラー8個!出そうとしてなかなか出せるもんじゃない。もうエラーの真打だね】

 

次回はJAVAの挑戦!
  なんかこのH・PでJAVAをつかったご挨拶ページを作るつもり

◎デジタルTOPに戻る
◎円丈落語TOPに戻る