- 締切済み
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
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nikoniko_009
- ベストアンサー率75% (3/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
- hanka2
- ベストアンサー率38% (15/39)
私も関数作ってみました。 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
補足
ありがとうございます。 てかすごいですね、あんなに悩んでいたのにこんなに短いプログラムで出来るなんてびっくりです。 エラーも出なくてこれで先に進めます。本当にありがとうございました。 もしよろしければ時間があったらでかまいませんので簡単に説明とかしていただけるとうれしいのですが。 時間があったらでいいので是非よろしくお願いします。
関数で作ってみました 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
補足
ありがとうございました。 エラーチェックの簡単なものならなんとか出来たのですが、チェックが厳しいものになるとエラーになってしまうみたいです。
- FEX2053
- ベストアンサー率37% (7991/21373)
「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」を「二百一」と表示するかです(苦笑)
補足
ありがとうございます。 最初はエラーが出てたのですが調べて少し手を加えたら動くようになりました。 参考になりました、本当にありがとうございました。