![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--VBAの小屋>数字を漢字にする関数 |
では・・・考え方をまとめてみましょうか。
渡されてきた数字の並びを、テキストとして捉え、左端から順番に漢字に置き換えて、必要な個所に「十」とか「百」とかいう漢字を添えていく、という考え方は、オッケーでしょうか。
1桁目から4桁目までは、各桁にひとつずつ、その位を表す漢字(十、百、千)がありますけれど、5桁目からは4桁ごとに万、億、兆、京・・という漢字が入ることになります。5桁目以降で、ループのさせ方が変わってきそうです。
1桁目から4桁目までは、各桁ごとに漢字を割り当て、5桁目から最後の桁までは、まず4桁に1回漢字を割り当てて、その4桁の中で、十、百、千を割り当てます。
うーん、難しいなぁ。
漢数字に変換したい値を、文字列として捉えて、右端から1文字ずつ、該当する漢字に置き換えていく、っていう考え方は、基本的におなじだと思います。じゃあ・・・処理の内容を整頓してみますね。
処理は、漢数字に変換したい値の文字数分繰り返されます。変換したい値そのものをS1、桁数をL1という変数に代入します。
L1の数だけ、ループさせることになります。
今、何回目のループ処理なのか、ということは、For
Nextの中のIというカウント用の変数で知ることができます。
直接つながりがあるわけではありませんが、このiという変数を見ることで、右から何文字目を処理しているのか、ということを知ることができます。
変数も何種類か設けることになりますね・・・。
今まで、K3を最終的な答えの入る変数として使ってたんですけど、なんかややこしいことになりそうなので、ちょっと変えてみました。
For i がL1と同じになるまで繰り返し
Mid関数を使って対象となる数字をS1からCntへ代入
i が1だったら
K1にKanから漢字を探してきて代入
i がゼロだったら
K1に "" (からっぽにする)
i に2を足して、4で割った余りがゼロだっら(割り切れたら)
K2にKan2の1文字目を代入、あるいはもう"十"って言っちゃってもいいかも。
ただしこのとき、Cntが1だったら、K2は "" 。
i に1を足して、4で割った余りがゼロだっら(割り切れたら)
K2にKan2の2文字目を代入、あるいはもう"百"って言っちゃってもいいかも。
ただしこのとき、Cntが1だったら、K2は "" 。
i を4で割った余りがゼロだっら(割り切れたら)
K2にKan2の3文字目を代入、あるいはもう"千"って言っちゃってもいいかも。
i が5以上で、(i +1)/4の余りがゼロ(割り切れたら)だったら、Int((i +1)/4)の答えを仮にAAAという変数に入れたとしてKan3という文字列の左からAAA番目の文字をK3に入れる。それ以外はK3には ""(空っぽにする)。
KKにK1とK2とK3をつないだものをくっつける。
ここまでを繰り返し。
めんどくせえーーーーーーーーーーーー
でも・・・がんばってみますか・・・。
まずは変数を宣言しましょう。
で、とりあえず、「わたしには無理」という一連の処理は、シングルコーテーションを左端に打ってコメントアウトしておきましょう。
やるときゃやりますよー。
Kan2も、とりあえず、処理の中に直接書いちゃおうかな・・・と思うんで、コメントアウトしちゃいました。
あとはー・・・If、If、Ifの連続です。がんばりましょう。
そして、変数を組み合わせて、漢数字に変換した値を作っていきます。
ループを抜けた後、最後に、プロシージャ名に最終的な値を代入して、おしまいです。
さて・・・どうかな。
イミディエイトウィンドウで試してみましょうか。
まずは、桁の少ない数値・・・これは、今までと変わらないですよね。
4桁でも、ゼロが含まれていても、それなりの答えを返してきます。
5桁も、なんとかいけそうですね。
じゃあ、6桁以上になると・・・おお、ちゃんと十二万、って出るぞ!ココまでは成功かな。
![]() |
![]() |
![]() |