<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>数字を漢字にする関数
   1  2  3  4  5  6  7  8



ちょっとだけ試してみますね。あ、ここから下は、しばらくの間、読むだけにしておいてください。
おなじことためしても、エラーがバンバン出てハングアップしちゃうと思います。なんかあってもわたしは責任負えません(願)!!!
おなじことはやらないでください!

こんな感じの、数値型のフィールドを持つテーブルがあって、ある程度データが入ってるとします。(データ型はDouble:倍精度浮動小数点)

このテーブルをもとに、クエリを作って、グリッド上で今さっき作った関数を動かすとすると・・・。

計算結果がクエリ上に現れます。[フィールド1]の値を拾って、結果を返してくるわけです。
こういふうに、クエリとかフォーム上で、値を返してくるような使い方をしたい場合は、PublicなFunctionプロシージャを作るんですね。

(ココから下の操作は、絶対まねしないでください)
じゃ、このテーブルの中に、めちゃくちゃ桁の多いデータが入ってたとしたら・・・。

あり?なんか変な表記の仕方になっちゃうな・・・。4.1258110125487E+21???

これって、いわゆる「指数表記」っていうやつですね。桁の多い数値の場合、こうやって表現する場合があるんです。
カーソル置くと、ちゃんと普通に表示されると思います。

で、クエリ開くと・・・。
やっぱりエラーになりますね。イミディエイトウィンドウでテストしたときとおなじです。しかも、このエラーメッセージが何度も何度も出てきて、身動き取れなくなってしまうと思います。

こうなってしまうと、もう大変です。どうすることもできません。わたしはメモリ不足で閉じることすらできなくなってしまいました。。。。
こんな実験、面白半分にやるもんじゃないですね。

危険な実験は、ココまでにしますね。では、回避策等々含めて、このプロシージャの使い方について考えてみましょう。


コレは結局、kasujiプロシージャの中で、カッコの中の引数内の変数S1には、完全に「テキスト」として値を受け取りたいのに、フィールド1のデータ型が数値型だからですね。
試してみると、

16桁以上の値をS1に代入すると、型エラーになるみたいです。
15桁までは大目に見てくれていたものが、そうは問屋がおろさねえ状態になるみたいですね。っていうか、大目に見てもらってる方がありがたいことだと思わなければならないのです。データの型っていうのは、コンピュータの中ではとっても大切なものなんですよ。日付と、数値と、テキストでは、コンピュータ内部での扱いがぜんぜん違うんですもんね。
じゃあどうすればよいのか・・・。

こうやって、↑ダブルコーテーションで囲んで引数の入力をすれば、16桁以上の数字だけの並びを、数値ではなくはっきりとテキストとして扱ってくれます。まあ、あたりまえといえばあたりまえですが・・・。

え?ダブルコーテーション入力するのめんどくさい?

でもー・・・Format関数とか入力するとき、引数をダブルコーテーションで囲んで入力したりしません?
入力するとき「String」って指示があるものは、ダブルコーテーションで囲むんだったですよね。だから、入力するとき、「このカッコの中の文字はテキスト型です!」と気合を入れて言ってやらないと、桁の多い数値データとして扱われ、指数表示の状態となり、4.1258110125487E+21という文字列になってしまい、これがそのまま変数に入り、順番に右端から漢字に変えていこうと思ったらあらなによE?+???ってことに・・・なってるみたいですからね。。。

クエリの場合は、直接カッコの中にダブルコーテーション入力するわけにいかないんで、なんとかして[フィールド1]の値を「テキスト型」に変更する努力をしましょう。
手っ取り早いのは、プロシージャの記述をするとき、カッコの中でFormat関数で、指数表記じゃない状態の数字の並びにしてもらうようお願いするといいかもしれません。

よかったら、数値型(Double)のフィールドを一つ持ったテーブル(主キーはいりません)を作って、試してみてください。

あるいは、あらかじめFormat関数で書式を整えた列を用意しておいて、そいつをkasujiプロシージャの引
数にする、という手もありますね。

どちらにしても、こういうことはとっても気をつけないとなりませんです。