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



では・・・考え方をまとめてみましょうか。

渡されてきた数字の並びを、テキストとして捉え、左端から順番に漢字に置き換えて、必要な個所に「十」とか「百」とかいう漢字を添えていく、という考え方は、オッケーでしょうか。
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桁以上になると・・・おお、ちゃんと十二万、って出るぞ!ココまでは成功かな。