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



・・・。

ど、どんな感じかな。。。

わたしのは一応、答えっぽいのが出てきましたけど、皆さんのはどうですか?
細かいとこで、

四万千五百六十九

この「一」を出すか出さないか、とか、そういう調節が必要かもしれないですね。
ええと、一の位のときは、消しちゃダメだし、万の位でも出さなきゃだめですよね。でも、一百とか一十って
なっちゃうのはおかしいかな・・・。千のときはどうでしょう。一千、千???

Case 1 の下に、さらにSelect文をぶら下げて、そのあたりを検出しましょうか。
1桁目と4桁目と5桁めのときは一と出すけれど、2桁目と3桁目は何も出しません。

考え方はこんな感じでいけると思います。

S1に代入する値、いちいちプロシージャの中で書き換えるのはめんどくさいですよね。Formとかから値を代入してくるのもいいし、「引数」を指定してもいいですね。やってみましょうか。カッコの中に値を入れることで、その値をプロシージャ内で使うことができるわけです。

S1を、そのままKasujiの引数にしてしまいましょう。

カッコの中に、S1の変数宣言文を移して、Dim文とS1に代入している式を消します。
これで、?kasuji(漢字にしたい数字)と入れることで、このプロシージャは答えを返してきます。(でも今度逆にカッコのなかが空だとエラーになっちゃいます。必須)

いろいろ試してみてください。カッコのなか書き換えて、カーソルを一番右端に移動させてEnterキーを押せば、答え出てくると思います。

これでも間違いじゃないんですが・・・ずいぶん長い構文になりますね。処理のわりには・・・。もう少し整頓できないもんか、考えてみましょうかね。あ、でも、これでも別に何とかなりますよ。5桁までなら。


この長いのを、もうちょっと短くできないもんかなぁと思ったんですが・・・・。なんか、規則性ないですかねぇ。
んー・・・。たとえば、もし、仮に、"一二三四五六七八九"という単語があったとして、Case 1の場合は、この単語の一番左端の文字が該当しますね。Case 2の場合は左から2番目、Case 3の場合は3番目・・・。

これ、使えそうじゃないです?
とりあえず、ループの部分をコメントアウトして、試してみましょうか。

ほんとは、Cntは数値として扱いたいんだから、Mid関数で取ってきた答えをちゃんと数値に変換するような処理をかまさないといけないんだとは思いますが・・・。Mid関数が返してくる答えは、数字でもテキスト扱いですからね。なので、

Cnt = Cint( Mid(S1, L1 - i + 1, 1))

みたいな感じで、変換してやらないと・・・Cintとは、Integerに変換してくれる関数です。詳しいことはヘルプ拾ってみてくださいね
でも、大丈夫かな・・・このままちょっとやってみましょう。

どうでしょう。3を三にしてくれますよね。

十百千万も同じ要領でやってみましょうか。といってもこちらの場合は、一の位のときはいらないですから、If文で処理を分岐してやります。
あと、一を出すか出さないか、っていうのも、ifで条件分岐してやりましょうか。

み、短くなったけど・・・ここまでアイディア出すのが大変・・・。
コード書くのって結局、書き方そのものよりここまでたどり着くことの方が大変なんですよ。こういうの、得意な人もいれば苦手な人もいますもんね・・・。