• ベストアンサー

数字→漢数字変換

VBの超初心者です。 数字から漢数字への変換に挑戦しているのですが、 苦戦しています… テキストボックスに5桁までの数字を入力して、コマンドボタンを クリックしたら、ラベルボックスに5桁の漢数字が出力されるという プログラムです。 ex「65432」→「六万五千四百三十二」 このような感じにしたいのですが、どなたか教えて下さい。 宜しくお願いします。 使用しているの、VB6.0です。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

ANo1です。 あまり時間がとれないので、すみませんが考え方のみ・・・ (せっかくコードを提示していただいたのに、ごめんなさい) 基本的には数値を各桁に分解して、あとは文字列処理ということになりますが、ご提示のコードの各行が質問者様の思っている通りに実行されているかをテストしてみたほうがよさそうです。(かなり問題あり) 大雑把な考え方として・・・ 1)数字を4桁ごとにひとくくりとして分解する 2)それぞれについて各桁に単位をつけて○千○百○十○みたいに変換 3)4桁ごとに単位(万、億、兆・・・)を付ける 注)・数値の値が0の桁には単位(千百十)は付けない   ・4桁区切りでの値が0なら単位(万、億、兆・・・)も付けない ・・で、大体のところまではできますが、実は、1101は一千百一なのか千百一なのか、あるいは、11001は一万一千一なのか、一万千一なのかのように数値が1の場合の表示をどの様にするのかのルール作りを、最初にきちんと整理しておかないと、後で変なところがでてくる可能性があります。 ルール決めについては、使用言語が違うけど↓あたりが参考になるかと。(後半の部分)  http://oshiete1.goo.ne.jp/qa4391551.html (言語が違っても計算式は似たようなものなので、多少はロジックの参考にもなるかも知れません。 ただし、縮めているので読みにくいけど。)

idea0323
質問者

お礼

どうも有難う御座います! 勉強し始めたばかりなので、教えていただいたコードを 一つ一つ理解して早く慣れるようにしたいと思います。

その他の回答 (3)

  • goo39
  • ベストアンサー率36% (13/36)
回答No.3

一例です。 Private Sub cmdketa_Click() Dim Suzi: Dim Kansuzi As String Dim i As Integer: Dim iLen As Integer Dim Keta As String: Dim Ans As String Kansuzi = "〇一二三四五六七八九" Keta = "一十百千万" iLen = Len(txtsuzi.Text) Suzi = CLng(txtsuzi.Text) For i = 1 To iLen   Select Case Suzi Mod 10     Case 1       Ans = Mid(Keta, i, 1) & Ans       If i = 5 Then Ans = "一" & Ans '1万の時だけ一を付ける     Case 2 To 9       Ans = Mid(Kansuzi, Suzi Mod 10 + 1, 1) & Ans   End Select   Suzi = Suzi \ 10   If Suzi Mod 10 > 1 Then Ans = Mid(Keta, i + 1, 1) & Ans Next i lblkansuzi.Caption = Ans End Sub

idea0323
質問者

お礼

ご丁寧に教えていただき有難う御座いました! まだ参考書などの例題を見様見真似で作っているにすぎないので 一つ一つ調べながら、どういう流れで結果が出ているのか勉強して いきたいと思います。

  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.2

こんにちは 誰でも最初は初心者です が、これでデバッグできていますか? 簡単なほうだけ Private Sub cmdhenkan_Click() Dim Suzi: Dim Kansuzi As String Dim i As Integer: Dim iLen As Integer iLen = Len(txtsuzi.Text) ''Suzi = txtsuzi ''Kansuzi = lblkansuzi Suzi = txtsuzi.Text Kansuzi = "" For i = 1 To iLen ''Select Case txtsuzi.Text Select Case Mid(Suzi, i, 1) Case "0" ''lblkansuzi.Caption = "〇" Kansuzi = Kansuzi & "〇" Case "1" ''lblkansuzi.Caption = "一" Kansuzi = Kansuzi & "一" Case "2" ''lblkansuzi.Caption = "二" Kansuzi = Kansuzi & "二" Case "3" ''lblkansuzi.Caption = "三" Kansuzi = Kansuzi & "三" Case "4" ''lblkansuzi.Caption = "四" Kansuzi = Kansuzi & "四" Case "5" ''lblkansuzi.Caption = "五" Kansuzi = Kansuzi & "五" Case "6" ''lblkansuzi.Caption = "六" Kansuzi = Kansuzi & "六" Case "7" ''lblkansuzi.Caption = "七" Kansuzi = Kansuzi & "七" Case "8" ''lblkansuzi.Caption = "八" Kansuzi = Kansuzi & "八" Case "9" ''lblkansuzi.Caption = "九" Kansuzi = Kansuzi & "九" End Select Next i lblkansuzi.Caption = Kansuzi End Sub 万,千,百,十は これから色々疑問が出てくると思うので省略させていただきます それからコントロールと同じ名称で変数を宣言するのは よろしくありません

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

>数字から漢数字への変換に挑戦しているのですが、 方法はいろいろあると思います。 ご自分で、できたところまでを提示しましょう。

idea0323
質問者

補足

すみません! cmdhenkanが”変換”コマンドボタン(65432→六五四三二へ)で、 cmdketaが”変換2”コマンドボタン(65432→六万五千四百三十二へ)です。 Option Explicit Private Sub cmdhenkan_Click() Dim Suzi: Dim Kansuzi As String Suzi = txtsuzi Kansuzi = lblkansuzi Select Case txtsuzi.Text Case "0" lblkansuzi.Caption = "〇" Case "1" lblkansuzi.Caption = "一" Case "2" lblkansuzi.Caption = "二" Case "3" lblkansuzi.Caption = "三" Case "4" lblkansuzi.Caption = "四" Case "5" lblkansuzi.Caption = "五" Case "6" lblkansuzi.Caption = "六" Case "7" lblkansuzi.Caption = "七" Case "8" lblkansuzi.Caption = "八" Case "9" lblkansuzi.Caption = "九" End Select End Sub Private Sub cmdketa_Click() Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer lblkansuzi = a lblkansuzi = b lblkansuzi = c lblkansuzi = d lblkansuzi = e a = len(&"万") * 10000 b = len(&"千") * 1000 c = len(&"百") * 100 d = len(&"十") * 10 e = len()*1 End Sub Private Sub lblkansuzi_Click() Dim txtsuzi: Dim lblkansuzi As String Dim i As Long txtsuzi = "00000" iLen = Len(textsuzi) For i = 1 To iLen lblkansuzi.Print Mid(txtsuzi, i, 1) Next i End Sub 見づらくて申し訳ありません。

関連するQ&A