
いやいや、もちろんプログラムを教えるつもりもないし、教える能力もない、もう教えて欲しい。自分のことだけで精一杯!プログラムと言っても大昔ベーシックでゲームもどきを作ったことがある程度。しかも昔のと今のとは違うんだ。オブジェクト指向なんだ。えっ、それなに?聞かないでチョウダイ!しかし円丈は、もう一度プログラムをやる決心をした。だから近々、このH・PでもJAVAを使ったページになって行く予定だ。ではご一緒にお勉強を! 三 遊 亭 円 丈
【MENU】
◎Exselのマクロに挑戦!
◎JAVAだよ〜〜になる予定
どれを?
| 今回は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冊を購入したが、・・・・・ちっとも簡単じゃねえぞ。もうメチャンコ分からん!結構真剣に読んだんだけどやっぱり分からん。これは |
マクロ1・ゲッ、住所に2千件以上「埼玉県」って入れる!そんなのいやだよ〜っ!
| そこで強制的に住所の頭に「埼玉県」と書き込むマクロ |
ある狛研会員、埼玉2500社データの住所項目に「埼玉県」って入ってない。これをひとつひとつ手で入力したら。タイヘンだよ。一件につき最低5秒はかかるよ。それが2500件だとヒャ〜〜ッ!最低4時間はかかる。イヤだよ〜っ。
こんな単純作業こそパソコンにやらせるに限るね。コンピュータってバカだから飽きるって事を知らないからモクモクとするんだね。こんなのは昔のBasicなら10分で入力できるプログラムだ。・・しかし今はVBAだから・・サッパリわからん。そこでVBAの本と首ッ引きでとにかくプログラムの入力を開始したが、これの書式が分からない。2.3回エラーがでたが、それでも遂に次のようにプログラムでついに動いた。
| これが円丈最初のマクロ |
|
Sub 埼玉追01() |
まあ、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 |
もうひとつの言語JAVAだ
| さあ今度はJAVAをマスターだ!! |
![]() |
【一方JAVA言語の方は?】 とにかくHPで使おうと思うとVBより、JAVAなんだ。それにJAVAの方が、VBより、馴染めそうだし、JAVAを少しずつ始めてる。 まだ本をみてそのまま打ち込む状態だが、単純なプログラムを打ち込んだだけでエラーが8個。ハハハッ。なかなか手強そうな奴だなあ。 でもなんだかVB(ビジュアルベーシック)より、気が合いそうでおもしろそうだ。次回にはJAVAアプレットを使ってでH・Pを作って見ようと思う。しかもなんと言ってもJAVAはタダなんだ。気に入ったね。 【どうエラー8個!出そうとしてなかなか出せるもんじゃない。もうエラーの真打だね】 |
| 次回はJAVAの挑戦! なんかこのH・PでJAVAをつかったご挨拶ページを作るつもり |