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
A 回答 (5件)
- 最新から表示
- 回答順に表示
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はあんまり覚えてないので正しい記法かわかりませんが(^▽^;)
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
投稿ありがとうございます。
今使っている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には常に最新の計算結果を上書きしてしまっているから!
どうすればいいかは、自分で考えたほうがよいかと思います。
投稿ありがとうございます。
変数が9になった時にループを抜けるから×9の答えしか表示されない ということはわかるのですが、ループ途中の答えの表示の仕方がわかりません・・・
「&=」を使うのかな?と考えてみてはいるのですが・・・
また、
For a = 1 to 9
For b = 1 to 9
結果 = a * b
NEXT
NEXT
のステートメントは1番最初に試しました。ただ、これだとやはり81になってしまったので、1の段、2の段、と分けなければいけないのかと思い、最初の投稿の式にしました。
確かに、途中結果を表示させることができれば、段を分ける必要はありませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
DoEventsが必要な理由について
-
GIFアニメをループさせたくない
-
vba
-
アクティブセルから、A列最終行...
-
VBA Dir関数でファイルをループ...
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
Application.OnTime の使い方
-
ループフリー
-
VBA for文が止まらない
-
vb.netからエクセル関数書き込み
-
csh foreachで「*」でエラ...
-
一巡伝達関数と開ループ伝達関数
-
VBA for i=1 to lastrow
-
VB.NETで素因数分解のプログラ...
-
ループ内での条件処理
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報