• 締切済み

VB 繰り返し(ループ)について教えてください

私は最近プログラムを書く仕事に就いたのですがまったくの初心者でなかなか課題が先に進めずに困っています。もしわかる方いましたら是非教えていただけるとうれしいです。 今わからないのが、繰り返し(ループ)です。 何とか一桁目は完成しましたがこの先がどうやってもうまくいきません。左にTextBox、真ん中にCommand、左にLabelがあり左に整数を入れて真ん中を押すと左に漢数字で表示されるという形で5桁まで出来るようにしたいのです。 今出来ているものをとりあえずはりますので是非教えてください。 Option Explicit Private Sub Command1_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) If a = 0 Then b = "0" ElseIf a = 1 Then b = "一" ElseIf a = 2 Then b = "二" ElseIf a = 3 Then b = "三" ElseIf a = 4 Then b = "四" ElseIf a = 5 Then b = "五" ElseIf a = 6 Then b = "六" ElseIf a = 7 Then b = "七" ElseIf a = 8 Then b = "八" Else b = "九" Label1.Caption = b End Sub

みんなの回答

回答No.4

Private Sub CommandButton1_Click() Dim w1, w2, w3 As String Dim w4 As Variant Dim i As Integer  w4 = Array("", "一", "二", "三", "四", "五", "六", "七", "八", "九")  w1 = Trim(TextBox1.Text)  s3 = ""    If Len(w1) <> 0 Then      For i = 1 To Len(w1)        w2 = Mid(w1, i, 1)        If Val(w2) > 0 And Val(w2) <= 9 Then          w3 = w3 & w4(Val(w2))        End If      Next i    End If  Label1.Caption = w3 End Sub

LOVExLESS
質問者

補足

ありがとうございます。 最初はエラーが出てたのですが調べて少し手を加えたら動くようになりました。 参考になりました、本当にありがとうございました。

  • hanka2
  • ベストアンサー率38% (15/39)
回答No.3

私も関数作ってみました。 Private Sub Command1_Click()   Label1.Caption = NumKanji(Text1.Text) End Sub Private Function NumKanji(ByVal Arg As String) As String   Dim Idx As Long   For Idx = 1& To 10&     Arg = Replace$(Arg, _       Mid$("1234567890", Idx, 1&), _       Mid$("一二三四五六七八九〇", Idx, 1&) _     )   Next   NumKanji = Arg End Function

LOVExLESS
質問者

補足

ありがとうございます。 てかすごいですね、あんなに悩んでいたのにこんなに短いプログラムで出来るなんてびっくりです。 エラーも出なくてこれで先に進めます。本当にありがとうございました。 もしよろしければ時間があったらでかまいませんので簡単に説明とかしていただけるとうれしいのですが。 時間があったらでいいので是非よろしくお願いします。

noname#170371
noname#170371
回答No.2

関数で作ってみました Private Function Arab2Kansuji(num As Long) As String '  変数名の妥当性については検討していません;; '  マイナスは無視します '  エラーチェックはテキトーです   Dim i As Integer   Dim j As Integer   Dim Word As String   Dim strNum As String   Dim strLen As Integer   Dim KanSuji As Variant   KanSuji = Array("", "一", "二", "三", "四", "五", "六", "七", "八", "九")    '  数値の文字列化および文字数取得   strNum = Str$(num)   strLen = Len(strNum) '  数値が0であった場合の特例   If num = 0 Then     Arab2Kansuji = "零"     Exit Function   End If '  メインループ(他のループ系使った方が多分楽です)   j = 0   For i = strLen To 1 Step -1     j = j + 1 '    数値抽出の上、漢数字引き当て     Word = KanSuji(Val(Mid$(strNum, i, 1))) '    必要に応じて漢字を補う     If Word <> "" Then       Word = Word & ClassWord(j)     End If '    生成した漢数字を取り込む     Arab2Kansuji = Word & Arab2Kansuji   Next i End Function Private Function ClassWord(c As Integer) As String   Dim Tanni As Variant   Tanni = Array("", "", "十", "百", "千", "万")      If c > 0 And c < 6 Then     ClassWord = Tanni(c)   Else     ClassWord = ""   End If    End Function

LOVExLESS
質問者

補足

ありがとうございました。 エラーチェックの簡単なものならなんとか出来たのですが、チェックが厳しいものになるとエラーになってしまうみたいです。

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.1

「201」が「二○一」となるだけで良いなら、文字列を右から順に 取って漢数字化すりゃいいだけなんで簡単です。 定義部分などは省略して考え方だけを書きますね。 式のチェックなどはやってませんから、そのままじゃ動かないかもですが。 C = Text1.Text ・・・(テキストボックスの文字列を変数に取り込む) Do Until Len(C)=0 ・・・(Cの文字数がゼロになるまでループ) D = Right(C,1) ・・・(文字列の右1文字を取り込む) Selelct D  ・・・・(条件が多いときはIFじゃなくselectが普通) Case "0" B = "○" & B Case "1" B = "一" & B : ・・・・・・・・・・・・・・(取り込んだ数字を漢字に変換) End Select C = Left(C,Len(C)-1) ・・・(Cの一番右の文字を落っことす=左から1文字少なく取り出す) Loop ・・・(以上の処理を繰り返す) こんな感じで「B」に文字列が出てきます。 問題はどうやって「201」を「二百一」と表示するかです(苦笑)

関連するQ&A

専門家に質問してみよう