• 締切済み

For文を使った九九表の作成

Visual Basic初心者です。 Visual Studio 2005を使って、九九表を表示させるプロジェクトを作りたいのですが、 For Nextステートメントを使うところまではわかりましたが、 Labelに表示させると繰り返した最終の値(2の段だと、18)しか表示されません。 途中の数字(×1~8まで)を表示させるには、どうすればいいのか教えてください。私の組んだタグは以下の通りです。よろしくお願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a, b, c, d, f, g, h, i, j As Integer For a = 1 To 9 Label1.Text = 1 * a For b = 1 To 9 Label2.Text = 2 * b For c = 1 To 9 Label3.Text = 3 * c For d = 1 To 9 Label4.Text = 4 * d Next Next Next Next End Sub

みんなの回答

  • talosoft
  • ベストアンサー率26% (6/23)
回答No.5

Dim Hyou As String = "" Dim q1,q2 As Integer For q1=1 to 9 For q2=1 to 9 Hyou = Hyou & (q1*q2) & " " Next Hyou = Hyou & vbCrlf Next もっとスマートに書きましょう

回答No.4

No1です。 >ステートメントは1番最初に試しました。 >ただ、これだとやはり81になってしまったので、 >1の段、2の段、と分けなければいけないのかと思い、 >最初の投稿の式にしました。 >確かに、途中結果を表示させることができれば、 >段を分ける必要はありませんね その途中結果を表示させる方法を気づいてほしかったのですが…。 なぜ最後の結果だけでるか・・・。 上書きされちゃうからですよね。 上書きされないように記述すればいいんですよ?? たとえば、99だったら81個結果があるわけで、 81個のSTRING配列に格納してあげてもいいですし、 Lable1.text = Label1.text + ”結果” というふうに、追記してあげてもいいでしょ?? そこに気づいてほしかっただけです。 どういう出力にしたいかの記載が不明瞭であったのですが、 たとえば、 1*1=1, 1*2=2, ・・・・・1*9=9 改行 2*1=2・・・・ としたいなら、 Dim i As Integer For a = 1 to 9 For b = 1 to 9 i = a*b Label1.text = Label1.text + a.ToString + "*" + b.ToString + "=" + i.ToString + ", " // b=9の結果のあとに改行挿入 if b=9 then Label1.Text += "\r\n" Endif NEXT NEXT VBはあんまり覚えてないので正しい記法かわかりませんが(^▽^;)

  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.3

こんにちは Visual Studio 2005を持っていません。下記は、まったくの想像で組んでみました。 こんな一例もあるということで何かの参考にしてください。 見直してみると表示部分がダサいですね。 もっと、スマートな回答を考えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer '段のループ変数 Dim j As Integer 'ステップのループ変数 Dim strtemp As String' 段のステップを保存する  Let strtemp = ""  For i = 1 To 9   For j = 1 To 9   Let strtemp = strtemp + str(i * j)' +符号が空白1個分の間隔を作ってくれることを期待   Next j   Select Case i    case 1: Label1.Text = strtemp    case 2: Label2.Text = strtemp    Case 3: Label3.Text = strtemp    Case 4: Label4.Text = strtemp    Case 5: Label5.Text = strtemp    Case 6: Label6.Text = strtemp    Case 7: Label7.Text = strtemp    Case 8: Label8.Text = strtemp    Case 9: Label9.Text = strtemp    Case Else     Stop   End Select   Let strtemp = ""  Next i End Sub

snoopy_ame
質問者

お礼

投稿ありがとうございます。 今使っているPCにはVisual Studioが入っていませんので、後でA88No8さんに組んでいただいた文で試してみます。 str関数?についてはまだまだ無知で、msdnで調べても、いまいちピンときませんでした…「数字を文字として扱う」ということでいいのでしょうか? また、結合の際の「+」は空白は作ってくれないと思います。が、その際はダブルクウォテーション″″マークで囲えば作れると思いますので、それも試してみますね^^

回答No.2

追記ですが、 このループって99計算になってないですよね。 4の段を何度も計算してますよね。 For d = 1 To 9 Label4.Text = 4 * d Next このループが9の3乗回も…。 単純に九九計算なら For a = 1 to 9 For b = 1 to 9 結果 = a * b NEXT NEXT でいいんじゃない?

回答No.1

ヒント For d = 1 To 9   Label4.Text = 4 * d Next これだと、dが1~9までループしますが、 d=1のとき Label4.text = 4 * 1 となり、 Label4には4が入ります。 次に、d=2のとき Label4.text = 4 * 2 となり、 Label4には8が入ります。 d=9でループを抜けるわけですから、 Label4には36が入った状態でループから抜けます。 原因??(わかったと思いますが) Labelには常に最新の計算結果を上書きしてしまっているから! どうすればいいかは、自分で考えたほうがよいかと思います。

snoopy_ame
質問者

お礼

投稿ありがとうございます。 変数が9になった時にループを抜けるから×9の答えしか表示されない ということはわかるのですが、ループ途中の答えの表示の仕方がわかりません・・・ 「&=」を使うのかな?と考えてみてはいるのですが・・・ また、 For a = 1 to 9 For b = 1 to 9 結果 = a * b NEXT NEXT のステートメントは1番最初に試しました。ただ、これだとやはり81になってしまったので、1の段、2の段、と分けなければいけないのかと思い、最初の投稿の式にしました。 確かに、途中結果を表示させることができれば、段を分ける必要はありませんね。

関連するQ&A

  • Vb.NetでFor~Nextの使い方

    登録したデータの中から該当するID(データの頭2つ)を抜き出し、それを参照にLabel5と6に名前と所属のデータを表示させています。 該当データがない場合はLabel4に該当なしと表示します。 下の様に作ってみたのですが、どのIDを打っても名前と所属はちゃんと出るのですが、該当なしまで一緒に表示されます。 これはどこを変更したらいいのでしょうか? Public Class Form1 Dim data(9) As String Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Data(0) = "01山田 花子     デバイス部" 以下Data(9)まで続く・・       End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 9 If Mid(ShainData(i), 1, 2) = TextBox1.Text Then Label5.Text = Mid(Data(i), 3, 9) Label6.Text = Mid(Data(i), 13, 2) Else Label4.Text = "該当なし。" End If Next

  • visual basic 2010 の デザイン

    visual basic 2010で、ボタンをクリックしただけ数が増えるように作ったんですけど、 9から10に切り替わるときに、位がずれてしまいます。 分かりやすくするため、*をつけると、**9*→**10 これを、***9→**10 こうなるようにしたいんです。 どうやったらできますか??? ============================================================ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim kazu As Long kazu = Label1.Text Label1.Text = kazu + 1 End Sub End Class

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。

  • VB2010 コードの意味を教えてほしいです。

    VB2010を使って、基礎から勉強中です。 テキストに紹介してあるサンプルプログラムを作っているところですが、 どうしても、わからないところがあります。 乱数を発生させ、こんばんはという文字を、5つのボタンにランダムに表示させて ボタンをクリックして、なんという言葉か当てるゲームです。 その中で、For ~ Nextの中に入力されている内容の意味を 詳しく知りたいです。よろしくお願いします。 Public Class Form1 Private answer As String = "こんばんは" '答え Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '答えを文字列の配列に変換 Dim moji() As Char = answer.ToCharArray() '文字入れ替え Dim rnd As New Random() '乱数を発生させる For i As Integer = 1 To 10 Dim n1 As Integer = rnd.Next(5) Dim n2 As Integer = rnd.Next(5) Dim m As Char = moji(n1) moji(n1) = moji(n2) moji(n2) = m Next Button1.Text = moji(0) Button2.Text = moji(1) Button3.Text = moji(2) Button4.Text = moji(3) Button5.Text = moji(4) '回答欄を初期化 Label2.Text = "" End Sub Private Sub btns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click Dim btn As Button = CType(sender, Button) Label2.Text &= btn.Text btn.Visible = False If Label2.Text = answer Then MsgBox("おめでとう", 0, "正解") ElseIf Label2.Text.Length >= answer.Length Then MsgBox("残念!", 0, "不正解") End If

  • 複数のFOR~を抜けるには?

    sub 1() for a = 1 to 4  for b 1 to 6   call 2  next b      '111 next a endsub sub 2() --- ---- ---- on error goto herr if ----  for c = 1 to 5   if ---    ------ 'ここでエラーが起きた場合に'111まで   end if  next c else   for d =1 to 5   if ---    ------ 'ここでエラーが起きた場合に'111まで   end if  next b end if herr endsub このような場合でも'111までForを抜けることは かのうでしょうか?

  • C言語への変換について

    VBで、下記のnCrを求めるプログラムを作りました。 これを、C言語にて、なるべく近い格好で移植したいと思いました。 いろいろなサイトを駆け回ってみましたが、なかなかよいものに巡り会えませんでした。 ですので、教えていただけませんでしょうか。 できれば、サンプルも。 Public Class Form1 Dim n, r, nr, kazu As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "nCrの計算" Label1.Text = "n" Label2.Text = "C" Label3.Text = "r" Label4.Text = "=" Label5.Text = "" Button1.Text = "計算" Button2.Text = "リセット" Label6.Text = "nの値と、rの値を入力し、計算をクリックしてください。" & Chr(13) & "すると計算結果が表示されます。" Label7.Text = "" End Sub Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged n = NumericUpDown1.Value nr = n - r Label5.Text = "" Label7.Text = "" End Sub Private Sub NumericUpDown2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown2.ValueChanged r = NumericUpDown2.Value nr = n - r Label5.Text = "" Label7.Text = "" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kazu = nkaijyou(n) / rkaijyou(r) Label5.Text = kazu nr = n - r Label7.Text = n & "C" & r & Space(1) & "=" & Space(1) & kazu End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click kazu = 0 Label5.Text = "" n = 0 r = 0 nr = 0 NumericUpDown1.Value = 1 NumericUpDown2.Value = 1 End Sub Function nkaijyou(ByVal n) If n <= nr Then Return 1 Return n * nkaijyou(n - 1) End Function Function rkaijyou(ByVal r) If r < 2 Then Return 1 Return r * rkaijyou(r - 1) End Function End Class

  • Visual Sutudio 2003で、文字を反転させるプログラムが正しく動きません。

    Visual Sutudio 2003で、困っています。 TextBox1に、文字を入力してButton1をクリックすると、入力された文字が反転されてLabel3に、表示されるプログラムを作ってみたのですが、上手く動きません。 例えば、「TextBox1」と入力してボタンをクリックすると、「1xoBtxeT」と表示させたいのですが、「1ote」と一文字置きに表示されてしまいます。 「Button1をクリックした時のプログラム」 Dim moji, kekka As String Dim i As Integer Label3.Text = "" moji = TextBox1.Text Label3.Text = moji.Substring(moji.Length - 1, 1) For i = 2 To moji.Length  Label3.Text &= moji.Substring(moji.Length - i, 1)  i = i + 1 Next End Sub 正しく表示させるには、どうすればいいのでしょうか?分かる方、宜しくお願いします。

  • 配列宣言したものを一気に参照して合致する物があるかどうかをチェックする方法は無いでしょうか??

    宜しくお願い致します。 タイトルどおりなのですが・・・配列宣言したものを一気に参照して合致する物があるかどうかをチェックする方法は無いでしょうか?? 現在のコードは以下のようになっています。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim no() As Integer = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20} Dim table() As Integer = {15800, 11980, 25980, 19800, 219800, 35600, 65800, 73260, 119800, 24780} Dim a, b, c, i As Integer a = Val(TextBox1.Text) b = Val(TextBox2.Text) P1: For i = 0 To no.Length - 1 If no(i) = a Then c = i Exit For Else Do MsgBox(Prompt:="規定値外です。", Title:="エラー") a = Val(InputBox(Prompt:="商品番号を再入力")) '未入力の場合“0”を返す If a = 0 Then Exit Sub 'inputboxが未入力等の場合は終了 End If GoTo P1 '“0”以外の数字が入力された場合は“P1”へ TextBox1.Text = a 'テキストボックス1にも現在の“a”の値が反映されるように Loop End If Next Label4.Text = table(c) Label5.Text = table(c) * b End Sub 現状の場合for~next内にゴチャゴチャ分岐処理をさせるようになりnextにたどり着く前にforのところに戻す形になっているのでnoで宣言している中でも11だけにしか反応しない状態となっています。 どこかでnoで宣言している物を一気に参照して合致する物が無いかどうかを調べることができるようでしたら、このような状態にならないで済むのではないかと思っていますが、プログラミングを勉強し始めたばかりなのでいい方法に関して見当がつきません。 どなたか良きアドバイスをお願い致します。

  • VBのデータグリッドビューで分析

    はじめまして。 学生でVBを使用しているのですが、どうしても分からない所があるので教えてください。 言葉足らずな部分があると思いますが、よろしくお願いします。 VisualBasic2010を使用しています。 私が作成したい機能は、 1、テキストボックスとコンボボックスで必要な情報を記入・選択 2、登録ボタンを押して登録 3、登録した内容がデータグリッドビューに表示される(削除・変更も可能) 4、分析ボタンを押すとコンボボックスの内容の数をかぞえる 私がつまずいている部分は4の「分析機能」です。 分析を押すと、数は表示されるようになりましたが 全て「0」が表示されてしまいます。 データグリッドビューの内容を検索して数をかぞえる方法が分からなくて 困っています・・。 つまずいている部分のコードを載せておきます。 どうぞお力を貸してください。 ---------------------------------------------------------- Private Sub bunnseki_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bunnseki_Button.Click '数の宣言 Dim ACount As Double = 0 Dim BCount As Double = 0 Dim CCount As Double = 0 Dim DCount As Double = 0 Dim FCount As Double = 0 '個数をカウント For i As Integer = 0 To listTask.Count - 1 'オブジェクトを取り出す Dim selectedTask As Task = listTask(DataGridViewTask.Rows(i).Index) 'タスクデータを取り出す selectedTask.GetData(TextBox.Text, A_ComboBox.Text, B_ComboBox.Text) If A_ComboBox.Text = "A" Then ACount += 1 ElseIf A_ComboBox.Text = "B" Then BCount += 1 ElseIf A_ComboBox.Text = "C" Then CCount += 1 ElseIf A_ComboBox.Text = "D" Then DCount += 1 ElseIf A_ComboBox.Text = "F" Then FCount += 1 End If Next '項目の数を表示 A_Label.Text = ACount.ToString B_Label.Text = BCount.ToString C_Label.Text = CCount.ToString D_Label.Text = DCount.ToString F_Label.Text = FCount.ToString End Sub

  • 順列のプログラムについて(VB)

    下記が、組み合わせを求めるプログラムです。 これのどこを変更すれば、順列を列挙するプログラムになりますか(ただし、重複順列でない。例、5P2=5*4=20通り)?教えていただけませんか? Public Class Form1 Dim w0, w1, count As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "コンビネーションサーチ" Label1.Text = "個の中から" Label2.Text = "個とる組リスト" Button1.Text = "計算" TextBox1.Text = "6" TextBox2.Text = "3" TextBox3.Text = "" TextBox3.ScrollBars = ScrollBars.Vertical count = 0 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, m As Integer n = TextBox1.Text m = TextBox2.Text w1 = " }" w0 = "{ " TextBox3.Text = "" count = 0 combisearch(1, n, m) MsgBox("組み合わせ個数は、" & count & "個です。") End Sub Sub combisearch(ByVal st, ByVal ed, ByVal depth) Dim i, temp If depth - 1 < 1 Then For i = st To ed TextBox3.Text &= w0 & i & w1 & vbCrLf count += 1 Next Else For i = st To ed temp = w0 w0 &= i & " " combisearch(i + 1, ed, depth - 1) w0 = temp Next End If End Sub End Class

専門家に質問してみよう