もくじ 開発顛末(その1) 『時間割くん2001』について 続『時間割くん2001』 『時間割くん2002」の開発について 『時間割くんVer.4』について 『時間割くんVer.5.0』について 開発顛末(その2) 『学級会計くん』 続『学級会計くん』 「学級会計くんVer.2.5」について 開発顛末(その3) 『ABCだよん!』について 開発顛末(その4) 『さえの漢字プリント!』について
開発顛末(その1)
時間割くん2001
『時間割くん2001』については上のリンクをクリックしてもらうこととしてちょっと開発にまつわる話をしたいな〜なんて思っています。
だいたい面倒なのが学期末の時数計算です。一つひとつ教科を足し算していって合計があわなければ、また計算のしなおし。当たり前のことだけどやっぱり面倒。
そこで、どうせ毎週学級通信で次の週の学習予定を作っているのだからこれを利用して時数計算もしてしまいたいなぁというのが『時間割くん2001』をつくろうと思ったきっかけです。
初めはExcelの関数だけで、この計算をさせていました。そう、みなさんもご存知の[countif]関数です。日本語にすると「もし○○なら、それを数えなさい」という関数です。
これで、「もし国語なら国語の数を一週間分のセル範囲の中から数えなさい」というように関数をそれぞれに組んでいきました。 そして、それぞれを合計した数を一学期の総合計にしていました。
そうなると、次に面倒なのがそこ(セル)へ「国語」とか「算数」とかの文字を入力することです。これをなんとかしないと電卓を横に置いて鉛筆と消しゴムでやっているのとさして変わりがありません。当然リストから選択するということを考えました。Excelの優秀なところはそれができるということでした。別にVBAを組まなくてもそんなところまではできるのです。
さて、そんなことをしているうちに最初はマクロなんてと思っていたのですが、自己紹介でも書いたとおり雑誌に「マクロで九九の問題をつくってみよう」というのが掲載されていたのです。
小学校で九九と聞いて試してみない手はありません。さっそく雑誌の通りにつくってみました。すると、面白いように動くではありませんか。なるほど、こんなことができるなんてすごい!でも、どうなっているんだ?この文字のかたまりは?
それから、しばらくその雑誌とにらめっこしながらどうしてこのプログラムがExcelを動作されるんだろうと一つひとつつきあわせていきました。
それまで、「メッセージボックス」に表示される文字だって、自分でなんかできないんだろうと思っていましたが、それがほんの数行のプログラムを書くだけでできてしまうのです。
これには、味をしめました。なんとなく楽しいではないですか。それまで一方的に「メッセージボックス」からのメッセージ(警告や注意が多い)を見続けてきたのですから。その「メッセージボックス」に自分の言葉が入るなんて、やっぱり楽しい。
そして、「テキストボックス」に入力した文字が、ボタンをクリックすることである特定のセルに入力できるし、また「コンボボックス」にリストを表示することもできるということや、ボタンの文字も好きに変えられるということは、すご〜く創造意欲をかき立てられるものでした。
こうなったら性格的にもう止まりません。本屋さんに飛び込んでExcelVBAの本を色々物色して一番理解しやすそうな「かんたんExcelVBAプログラミング」という本を購入。「コンテナ」の概念や「変数」について実際にプログラムをし、何度もエラーが出てデバッグをし、試行錯誤しながら、できた時の喜びは両手を広げて万歳状態!そして本も「ExcelVBAリファレンス」というものまで購入して少しずつ改良を加えていきました。
ところが、改良を加えているうちに、困ったことの出くわしました。一つはモジュールの容量の制限ともう一つは、Excelの再計算機能です。
当初、〔単元名リストアップ〕ボタンはありませんでした。ところが、低学年のひらがなの対応をしているうちに容量制限にひっかかってしまい、やむなくつけたボタンです。もう少しコーディングがうまくなれば、一つの〔教科決定〕ボタンでリストアップもかねたいところなのですが、今の実力ではどうコーディングしたらよいのかわからず、動くことが最優先であるために、〔単元名リストアップ〕ボタン必要になってしまったのです。プログラムは『時間割くん2001VBA』に書いておきますので教えていただけるととってもうれしいです。
もう一つの困ったことは〔時数の自動計算〕ボタンをクリックしても、しばらくしてからしか「終了しました」のメッセージボックスが表示されてこないのです。つまり、「時数」シートに新たに教科が書き加えられると、すべての計算を再計算するために、忘れた頃にメッセージボックスが表示されることになってしまったのです。VBAでもこの機能を無効にする方法があったと思ったのですが、そうすると再計算されなくなってしまい、逆に意味がなくなってしまいます。しかたなく、関数の方をいじることにしました。つまり、前週が空欄なら再計算しないようにしたのです。
こうして、とりあえず、スピーディーに反応するボタンができました。
さて、実は『時間割くん2001』には、その前バージョンに『時間割くん2000』があります。実は毎年一年自分でこれを使いながら、学級通信を作っているのです。実際に使ってみると、最初の週はともかく、毎週こんな風にリストからすべての時間を選択するのは効率が悪いぞ、と思い作ったのが〔前週の週案〕ボタンです。また「週案作成」をしている途中でやめざるをえなくなることがあります。最初の頃はいちいちもう一回リストの選択をし直すということをしていたのですが、ほとんど出来上がってから、もう一度というのはなんとも効率が悪い。しかも、専科の先生から言われた来週の予定まで入れなおすと消えてしまう状態でした。ですから、〔BOK〕をクリックすると、途中まで入力した来週の時間割が表示されるように改良しました。
それとともに面倒だったのがリストに表示されるリストの追加です。学級通信を作っていると、そこに単元名だけではなく、いろいろなものを追加して子ども達に知らせることがあります。1回だけならよいのですが、何回も続いたり、それが何日か続いたりするといちいち打ち込むのが面倒になってきました。追加するには学年のシートの教科の下に直接追加しなくてはなりませんでしたのでいちいち「戻る」ボタンでいったん戻って追加していたのです。これも実際効率が悪い。
そこで、〔単元の追加〕ボタンを作りました。これに2日かかりました。追加のための「ユーザーフォーム」と「ボタン」までは簡単に作れたのですが、「コンボボックス」に入力した言葉がリストと重複しないように文字列を比較させるのに頭を抱えてしまったのです。リストに同じ言葉があるとおかしいし、効率も悪い。
これはなんとかしたい!
そこで、それまでSelect CaseやIf thenは使っていたのですが、初めてDo Untilを使ってみました。とはいっても、いきなりDo Untilが使おうと思ったわけではなく、最初はDo whileで何とかできないかと試行錯誤をしていたのですが、どうしてもエラーがでてしまい、止まってしまうのです。
このDo While構文は条件が成立するまで繰り返すか条件が成立しなければ繰り返すという時に使うそうなのですが、自分がやりたいのがどうしたら実現できるのかわからず、何度も繰り返しエラーの表示をいやになるくらいみた後で「もしかしたら?」と思いDo Untilを使ってみたのです。
ついにやりたいリストの重複を避けるプログラムができました!
さて、リストの追加ができたところで、今度はリストの削除もできないか?と思い始めました。追加だけではなんとなく片手落ち。
そう思ったのが運の尽き。
「コンボボックス」の内容と同じ言葉を特定の列から削除するのはかなり大変でした。単純に考えれば追加の逆を考えればよいのですがそう簡単にははいきませんでした。うまく簡単にできる方法もあるのでしょうが、自分の実力ではちょっと苦しい。しかもセルの内容を削除した後その下のリストを上に上げるということも考えていましたから、何回かあきらめようと思いました。
紙に書いてみたり、空で考えてみたり、いろいろ試した結果、これもできたのです。
今、どうやったの?と聞かれてもプログラムをもう一度見てみないことには何も言えませんので
下のリンクににプログラムをそのまま書いておきます。何か他のことで使えそうなら使ってみてはいかがですか?
単元の「追加」と「削除」に使ったプログラムを見たい方はクリックしてください。
とまあ、とっても長いプログラムになっています。
何とか短いプログラムで済ませたいのですけど、今のところここまでしか考えが及ばないのが残念なところ。
では、また開発顛末(その2)「学級会計くん」を書きますね。(2001年2月23日 金曜日 記)
このページの一番上へ
続・時間割くん2001
さて、「時間割くん2001」もVer.2.3になりました。Ver.2.2ではご迷惑をおかけしましたが、今回のヴァージョンアップはなかなかお気に入りです。
「メニュー」シートに「旧バージョンのデータコピー」ボタンを新設したのです。
「学級会計くん」や「ABCだよん!」は新ヴァージョンになってもそれほどデータの移行に面倒はありませんが、「時間割くん2001」はヴァージョンが上がっても今まで蓄積したデータを移行するのに結構な手間がかかっていたのではないでしょうか。これは何とかせねばと思いつつもなかなか良いアイディアが浮かんできませんでした。
そんな時ふと以前に「ファイルを検索してリストボックスに表示し、選択されたファイルを開くマクロ」を作っていたことを思い出したのです。他の人に頼まれて5月ぐらいに作ったマクロでしたが、それを使おうと思いませんでした。でもVer.2.2で大変なご迷惑をおかけしてしまったなという思いもあって自分がこれまで旧バージョンから新バージョンへデータのコピーを手動でしていたのをマクロ化しようと思ったのです。
あとは、以前作った「ファイルを検索してリストボックスに表示し、選択されたファイルを開くマクロ」を改良してインポートしました。ただし、シート名やセルの構成など変えられていた場合はエラーが出ますので、その点はご注意ください。結構便利なボタンだと思いますのでご活用ください。
なお、この「ファイルを検索してリストボックスに表示し、選択されたファイルを開くマクロ」は「時間割くん2001Ver.2.3」用に改良してありますが、部分的には他の方でも活用できると思いますので、コードを「時間割くん2001のVBA」のページに記載しましたのでご参考までに…。
(2001年12月8日土曜日 記)
このページの一番上へ
時間割くん2002の開発
年度が変わり、時間割くんのヴァージョンアップについて検討をしていました。 新学習指導要領になり、私の学校でも15分単位での授業がされるようになったのです。 そうなると「時間割くん2001」では1/3時間は数えることができず、対応できません。
そこで、以前他県の先生から「授業時間を柔軟にできるようにできませんか?」というお話をいただいていたし、15分単位で授業時間が設定できるように考えました。
さて、悩んだのはその設定方法です。
オプションボタンを使うかチェックボタンを使うか検討しましたが、それだとフォームに収まらなくなるので、テキストボックスに数値を入力することにしました。
マクロの記録を使ってまずセルの結合を30・45・60・90とそれぞれ記録し、プログラムを組み始めました。当初、罫線もプログラムで引こうと思っていましたが、それだと大変だということがわかり、セルの結合パターンで引いたようにすることになりました。
さて、困ったのはそれでもプログラムが長くなりそうなことです。
原因はコンボボックスの数だけ同じプログラムを組まなくてはならないことからです。
For〜Next構文を使って繰り返し処理でなんとかしたいがコンボボックスの番号を変数で変えることができず、(時間割くん2001でも悩んでました)教えてもらえればとモーグのホームページでQ&Aの掲示板に書き込んでみました。
すると、その日のうちにSaecaさんという方がアドバイスを書き込んでくれていました。それはControlプロパティを設定することでした。なにしろ独学でExcelVBAを記述しているものですからそんなものがあることを恥ずかしながら知りませんでした。詳しいコードはVBAのページに記述してありますが、コンボボックス名を変数で扱うことができるようになり、コードを少なくすることができました。これまでのコードも見直し、変数が使えるところは極力使ってコード全体をシェイプアップすることもできました。そのために「時間割くん2001」ではあった「単元名リストアップ」ボタンをなくすことができました。Saecaさんにはほんとに感謝しています。
このページの一番上へ
時間割くんVer.4について
「時間割くん2002Ver.1.1」をダウンロードして使っていただいている方から、メールが届きました。「週案作成中に他を参照したいので、週案作成フォームに最小化ボタンがつけられないか」といったものでした。また、他の方からも新Ver.にデータを移す方法を教えてほしいとのメールをいただきました。
そこで、まず「旧Ver.データコピー」ボタンを復活させました。「時間割くん2001」ではあったのですが、「時間割くん2002」にした時に「時数」シートを15分単位に変更したため、「旧Ver.データコピー」ボタンを休止していたのです。このボタンを「時間割くん2002」に合わせてコードを変更し、さらに保存されているドライブによってエラーがでるのも修正しました。
次に、取り組んだのが、最小化ボタンについて。しかし、ユーザーフォームに最小化ボタンは設置できませんでした。そこで、とりあえずプロパティの「ShowModal」をFalseにして対応してみました。しかし、わかりにくいので、「Hide」を使い「一時中止」ボタンを設置し、シートには「週案作成フォーム再表示」ボタンを設置して対応しました。
それを「時間割くん2002Ver.1.2」としてアップしました。
メールの方には満足していただいたようで、ひと安心。
でも、なぜ他を参照するのか気になってそういうケースはどんな場合か考えてみることにしました。おそらく、累計時数を見て週案を作成しているのだろうということでした。
そこで、教育課程の編成の時数表を「メニュー」シートに追加し、「時数」シートで累計時数から残り時数を計算させることにしました。さらにそれではやはり一時中止ボタンが必要になるので、新たに「時数確認」フォームを作成し、週案作成中に参照できるようにしました。ただし、新たな課題ができてしまいました。それは、「時数確認」フォームでは、分数表示ができないのです。この点については、次回までに方法を考えて対応したいと思っています。
また、以前からヴァージョンアップの時に気になっていたファイル名に年度を入れるのもやめにして、「時間割くんVer.4」として、インターネット上に「時間割くん」をアップし始めてからのトータルヴァージョン名に変更しアップしました。
(2002年12月15日日曜日 記)
このページの一番上へ
時間割くんVer.5.0について
3月の末に大阪市で校内の情報教育を担当されている先生から、質問のメールをいただきました。
要約すると「パソコンの活用方法とその利便性を職場の方々に知ってもらうために「時間割くん」を紹介したいが、本校の時間割と合わない部分があるので、どのようにしたらいいでしょうか」とのこと、質問という形でのメールでしたが、「時間割くん」は関数とVBAが複雑に絡んで作ったものですから、おいそれとメールでお伝えできなさそうでした。また、Ver.4までで2時間続きの授業時間をフレキシブルに30分・60分と割り振るところまではできていたのですが、1時間を2コマに分けて別々の教科を入れるということはできていませんでした。そこで、一念発起しVer.5.0の開発にのりだしました。これまでコード的にも煩雑になっていた部分を大改良し週案作成フォームの6割にあたる部分を作り直しました。
また、メールをいただいた大阪の先生の学校では特色のある時間割配分をされていたので、別に作ることにし、「時間割くんVer.5.0b」としてお渡ししました。ところが、あちらこちらに不具合が発生してしまい、何度もご指摘を受けて訂正することになり、反省しきり。結局「時間割くんVer.5.3b」になってしまいました。その間、大阪の先生もよく我慢してお付き合いいただけたなぁと感心しました。
「時間割くん」が多機能になればなるほど一つの修正が多方面に影響を及ぼすこともわかりました。開発者の能力では、どこでどのように関数を組んでコードと連携したのかそろそろ憶えきれなくなってきています。これから先はどうなることやら…。
(2003年4月5日土曜日 記)
このページの一番上へ
開発顛末(その2)
学級会計くん
学期に1回必ずある仕事、それは学級会計報告。
まあ、片手に電卓があればよいようなものですが、計算が合っているか確認するために、何回か電卓を打ち直しますよね。
また予算に対して、あとどのくらい使えるのかというのも気になるところ。
そこで…
せっかくExcelを使っているのですから、これを使ってできないかな。ということで、今まで自分用に作っていたものを職員のパソコン研修も兼ねて汎用性を持たせるために「メニュー」シートを作り、そこで全てができるようにしました。
この学級会計くん、実はあんまり苦労していません。というのも、単純に単価×個数の計算にPRODUCT関数を使い、合計にはSUM関数を使い、メニューとそれぞれの学期の印刷シートはリンクが張ってあるだけです。
そして、「終了ボタン」「1学期の印刷」「2学期の印刷」「3学期の印刷」については、「時間割くん2001」で使ったVBAをそのまま多少手直しして使っているだけなのです。
「学級会計くん」のVBAについて見たい方はクリックしてください。
これで自分的にはOKだったのですが、同僚の先生に使ってもらったところ、「購入品目が少ない時に余分な欄がいらない」という注文がありました。
Excelを知らない人でもある程度思うように使えなければ意味がないと思い、これから改良に移ろうかと思っています。
できましたら、また、お知らせしますね。
(2001年3月17日土曜日 記)
このページの一番上へ
続・学級会計くん
さて、学級会計くんのバージョンアップについてお話しましょう。当初、バージョンアップに向けて何に取り組もうかと考えていました。以前同僚に使ってもらった時に、「余分な欄はいらないから消して」と頼まれました。確かに余分な欄は要らないけれど、それをするためにはVBAで実現するしかなさそうな感じなので、さっそく取り組んで見ました。
ところが、1欄減らすということは意外に他にも影響があるということがわかってきました。罫線や合計にも、またいったん減らしたあとにまた増やすにはどうしたら良いのか。コーディングは簡単にできたのですが、けっこう不具合が出てしまうのです。
しかたなく、今回のVer.1.1では、収入の欄を一つ増やしたことと、最後に表示される言葉を残高0円とそうでない場合に分けてみました。
でも、これだけではちょっとねーと思い、ユーザーフォームを使ってマウスで項目や単価、数量が選択できるようにと考えました。それがVer.2です。
さらにこのVer.2は一度ユーザーフォームで入力した項目名をリストに追加し、次からはキーボードから入力することなく、マウスで選択できるようにしてあります。ですから、使えば使うほどにらくになるので「らくらく入力」ボタンと名付けました。末永くご活用ください。
今のところ、じっくり取り組める時間がないので、ここまでですが、Ver.3になる頃には、最初の「余分な欄」を自動削除し、体裁を整えるところまで行きたいなーと考えています。何時になるかわかりませんが、期待していてください。
(2001年7月28日土曜日 記)
このページの一番上へ
『学級会計くんVer.2.5』について
続・学級会計くんの最後で、「余分な欄」を自動削除し、体裁を整えるところまで行きたいなーという部分をできるようにしました。
最初は、行を削除し、再び戻す作業を繰り返していたのですが、非表示にしてしまえば解決することに大分後になって気づきました。そこからは特に苦労することも無く関数とVBAの組み合わせで行を非表示にすることに成功しました。
また、以前から気になっていた残高繰越についてもクリアし、ほとんど理想に近いソフトになったと思っています。
あとは、「らくらく入力」フォームのプログラム部をもっとすっきりした形にしていこうと思っています。他のソフトを開発する時に教えていただいたテクニックを使えばできそうです。
ともあれ、動作的にはほぼ完成形に近づいた「学級会計くん」ですが、本人の満足とは違って使用者の方のご意見、ご感想で大改良しなければならなくなるかもしれません。
ぜひ、使っていただいて、ご意見をいただければと思っています。
(2003年2月2日日曜日 記)
このページの一番上へ
開発顛末(その3)
ABCだよん!
「ABCだよん!」の開発は、実はほとんど「時間割くん2000」と同時ぐらいでした。といってもまだ現在の形になっていたわけではありません。
給食会計を電卓をはじくのが嫌で機械にさせるべく、Excelを覚えていく過程で原型を作りました。
まず、計算ということで給食会計のテンプレートを作っている時です。毎月購入いていた「PC21」というパソコン雑誌に「平均の出し方」(AVERAGE関数)「最高点」(MAX関数)「最低点」(MIN関数)「順位」(RANK関数)「評価」(IF関数)「偏差値」(STDEVP関数)について掲載されていました。
それまでの給食会計はもっぱら掛け算と足し算だけでしたから、串刺し足し算を覚えてちょっとできた気になっていたのですが、それを見てその通りに真似してみました。
すると、今まで電卓片手に一人に尽き最低2回は計算していたのが一発でできるではありませんか。しかも、点数の入力を間違えても、一から出直しではなく、間違えたセルのデータを入力しなおせば、きちんと再計算され、平均も順位も評価も変わるのです。
「スッゴーイ」
そして、見栄えを良くするために、次に覚えたのが「条件付書式設定」でした。
ある点数以上なら、文字の色を変えるというものです。初めは90点以上と60点未満と条件を設定していました。(自分的にはこれでOKですが、自分以外のExcelを知らない人にはその条件が変えられないので今はセルの参照でできるようになっています)
ところが、自分で入力していて困ったことに出くわしました。それはなんでもかんでも計算されてしまうのです。例えば「100」と入力したつもりが、「1000」と入力してもExcelはおりこうさんですから計算してくれて、とんでもなく高い平均点がはじき出されます。それに気付かずにいると、何だこれは?となってしまいます。
そこで、次は「入力規則」を使うことにしました。ある得点以上の数字を入力できなくするものです。これで、1000点なんていう誤入力も警告が出て入力できなくなりました。
「ABCだよん!」では100点以上は入力できなくなっています。
さて、一覧表はこれで出来上がりました。
ここまでできたところで、同じ学年の先生にも使ってもらいました。そしてその先生の要望で作ったのが個票です。その先生はこれまでも手書きで一人ひとりにテストの点数をお知らせしていたようなのです。最初はB5の用紙に印刷されるようにしてみたりしましたが、切って渡すにはどうも数字が小さすぎるようなので、A4の用紙に印刷されるようにしました。
そして、ページの設定をして、次はExcelVBAの出番です。ユーザーフォームで「個票を全て印刷」するのか、ある特定の子だけを印刷するのか選択できるようにしました。
そして、そのまま今年度が一年過ぎようとしていました。そんな折、次のパソコン研修はどんなものがいいか係の先生に聞かれました。そのころ、賞状の印刷について聞かれることが多かったものですから、それについて(ジャストシステムのワープロソフト「一太郎スマイル」の機能の一つ)研修したらどうだろうと提案しました。そして、成績付けが間近にせまったころ、「パソコンで平均点とか計算できるといいな」という声も聞かれ、それならということで、「ABCだよん!」を紹介することになりました。
すると、その係の先生からこんな質問がありました。「自分は別の教科しかテストはしていないので、それに合わせるにはどうしたらいいの」というのです。自分の担当学年は同じ3教科でも、違う教科だったので、それを変えなくてはなりません。
単純に「タグ」の名前を変えればよいと教えたいところですが、それでは困る部分もありました。それは下の図の「教科の印刷」ボタンで表示されるユーザーフォームです。このフォームのそれぞれのボタンはあらかじめ自分が設定していたので、「タグ」を変えると使えなくなってしまうのです。
左の図では「漢字」となっていますが、もともとは「国語」と入っていました。「タグ」を変えるということはこのボタンをクリックすることで動くプログラムの部分も変更しなくてはエラーが出てしまいます。
これには困りました。
単純に「タグ」のシート名を変えるだけでは、ただでさえ知らない人にエラーを見せてしまうのです。しかもVBAのエラーですから見たこともないだろうし、それを見てパニックになることが想像してもおそろしい。
(プログラムの詳細については「ABCだよん!」のVBAについてのページで紹介することにします。)
シートの名前を変更するプログラムは、本(ExcelVBAリファレンス)を見て作りました。そしてメニューのシートの「教科の設定ボタン」に付けました。
そして動作確認のため、ボタンをクリックすると、見事にシートの名前が変わりました。それではといい気になってもう一回クリックすると今度はエラーが出てしまうのです。なんで?
そこでデバックをすると原因が判明しました。
例えば「国語」のシートを上の図のように「漢字」に変更しようとすると、1回目は「国語」のシートを「漢字」にしてくれますが、2回目はすでに「国語」のシートが無いのでプログラムが止まってしまうのです。
そこで、シート名の取得というプログラムを組んでみたものの、それでも最初に「国語」のシートを変更するというところから頭が離れなくてエラーの続出。どうしてもそこの部分でエラーがでてしまうのです。
悩みに悩んで、変数を思いつきました。
じゃあ、変数にしてセルを参照し、その値を変数に入れるというかんじではどうかな?と思い、チャレンジ。
やったー!
と、この問題解決に2日がかり。
ところが、すぐに次の問題に気がつきました。みんなが何かしらの言葉を「設定したい教科」に入れてくれればいいけれど、必要が無いからと空欄にされたら…。
案の定、空欄にして「教科設定」ボタンをクリックすると、エラーが…。
Excelは、名前の無いシートを認めてはくれません。
シートを削除するプログラムも考えてみましたが、そうすると次に違う学年を担当してまた増えたらどうしたらいいんだろう。そんな心配が…。
空欄にするのは禁止にしようかとも考えましたが、個票にも影響があることなので、なんとか実現したいと考えました。
そこで、空欄で設定しようとしたときには「未設定1」〜「未設定8」までを設定しシート名にすることにしました。ところが、一つひとつをIF構文で設定しているため、空欄の数だけMsgボックスが表示されてしまいます。何とかできないかと思いましたが、現時点(2001年3月18日)では実力的に無理みたいです。
残念…
(2001年3月18日 記)
このページの一番上へ
開発顛末(その4)
「さえの漢字プリント」
今回の開発のきっかけは、使っていたソフトが娘に合わなくなったためです。
これまで、フリーソフトで10問ずつ印刷するソフトを使わせてもらっていたので、20問練習するには10問ずつに分けて2枚で練習させていました。それはそれで良かったのですが
ところが、このフリーソフトは枠の大きさとか20問印刷とかには変更できなかったのです。
もちろん、私にVBで開発する能力はありません。あきらめていたのですが、家族にせっつかれてとりあえずExcelで枠だけ作ってみました。
しかし、それだけではその都度打ち直す作業があって、過去のデータを保存しておくこともできません。
まず、VLOOKUP関数でデータシートからデータに一つひとつにIDをつけ参照するようにしてみました。ところが、メニューシートに関数でデータを表示するのは良いのですが、入力するにはデータシートに切り替えて入力しなくてはなりません。使い勝手を考えるとメニューシートでデータを入出力できる方が楽だということに気付きました。
そこで、ユーザーフォームを使ってもいいのですが、できるだけファイルサイズを小さくしたかったのでセルにそのまま打ち込んだり、データを表示したりできるようにすることにしました。
ここまでは、自分でできたのですが、データをランダムに並べ替えられれば、漢字の練習になるとも思っていました。これまで、「おみくじ」ソフトで乱数を発生さ整数を取り出すことまではしていたのですが、今回は重なりの無い乱数が20個必要なのです。この重なりの無い乱数を20個と考えましたが、私の現在の知識では変数を20個用意して比較するか、セルに書き出して同じ数かどうか比較するということしか思い浮かびませんでした。
しかし、2個ぐらいの数を比較するならいいのですが、20個の重なりの無い乱数を発生させるには考えただけでも膨大なコーディングしか思いつきません。しかも処理時間がとっても長くかかりそうなのです。
そこで、「時間割くん2002」でお世話になったSaecaさんにメールで質問してみると、とても効率の良いコーディングを教えていただくことができました。そのコードを見て、あらためてすごいなーと感じました。コードを見ても何でそうするとこうなるのかが良くわからないのです。いろいろ調べてみると、大筋は理解できました。しかし、一からそのコードが作れるかといえば、ちょっと無理。申し訳ないなと思いつつ、ほとんど変更しなくてもOKなコードだったので、必要な部分だけ変えてそのまま「データ並べ替え」ボタンに登録させてもらっちゃいました。
「配列変数」というものを使ったコードを見るのは初めてで、今後勉強していくべき領域だなと感じました。
(2002年9月20日 記)
このページの一番上へ当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します。すべての内容は日本の著作権法及び国際条約によって保護を受けています。
Copyright 2001-2012 H'sFactory. All rights reserved. Never reproduce or republicate without written permission.
トップへ |
『時間割くん』について |
『ABCだよん!』について |
『学級会計くん』について |
『さえの漢字プリント』について |