• ベストアンサー

簡単なエクセルVBA

最近エクセルのVBAを勉強し始めたのですが、 1×1=1 1×2=2 1×3=3  ・  ・ 9×9=81 と出るようにしたいのですが、 Sub kuku() Do While i < 9 i = i + 1   Do While j < 9   j = j + 1   a = i * j   Debug.Print i; "×"; j; "="; a   Loop Loop End Sub としたところ1×9=9までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。

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

  • ベストアンサー
  • mahny
  • ベストアンサー率74% (57/77)
回答No.4

2重ループになっているのでその点心配ありません。 内側のループにあるjの値がループを抜けた後、 再初期化されていません。 つまり、内側のループで1の段の出力が終わり、 外側のループでi=2になった時、j=9のままなので 「While j < 9」に弾かれ内側のループの処理は実行されません。 これが九九が1の段で終わってしまってしまう原因です。 なので、内側のループが終わった時にj=0にしてみれば良いでしょう。 ▼補足 変数を使うときは初期化する事をオススメします。 Sub kuku() Dim i, j As Integer i = 0 j = 0 Do While i < 9 (省略)

wdkzys
質問者

お礼

わかりやすくありがとうございました。

その他の回答 (3)

回答No.3

2重のループにしてあげたらよいと思います。 Dim i  As Integer Dim j  As Integer For i = 1 To 9   Debug.Print "-- " & i & "の段 --"   For j = 1 To 9     Debug.Print i & " × " & j & "=" & i * j   Next j Next i

wdkzys
質問者

お礼

ありがとうございました。

noname#33218
noname#33218
回答No.2

Do While i < 9 の前に念のため i=0 Do While j < 9 の前には j=0(これを入れないとj=9のままです) を入れるとよいと思います。

wdkzys
質問者

お礼

よく考えたらjが9のままでしたね。 ありがとうございました。

回答No.1

' 自信なし。動作するとは思うが、もっと簡潔なソースはありそう Sub kuku() Dim a As Integer Dim i As Integer Dim j As Integer a = 0 i = 0 j = 0 Do While i < 9 i = i + 1 Do If j < 9 Then j = j + 1 a = i * j Debug.Print i; "×"; j; "="; a Else j = 0 ' 初期化しないとi=2以降Do Loopに入らない Exit Do End If Loop Loop End Sub

wdkzys
質問者

お礼

ありがとうございました。

関連するQ&A

  • VBA 九九 Do While

    VBAのDo Whileステートメントを使って九九の表をつくりたいのですが、何度やっても途中で詰まり、実行に至りません。 For NextとDo untilではできたと思うのですがDo Whileがどうしてもわからなくて… どなたか助けてください。お願いします。 Sub 九九計算_for() Dim i, j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j).Value = i * j Next Next End Sub Sub 九九計算_do_until() j = 1 Do i = 1 Do Cells(j, i).Value = i * j i = i + 1 Loop Until i = 10 j = j + 1 Loop Until j = 10 End Sub

  • ACCESS VBAが分からない!この問題ですが

    ACCESS VBAの勉強をはじめました。 下のプロシージャを実行するとメッセージボックスに「2018/08/30」と出るようですが、なんでそうなるのかが分からないんです。 ちなみに Loop は繰り返しでWhileは~間という意味は分かるのですが。。。 よろしくお願いいたします。 Sub Lesson() Dim ret As Date, i As Long ret = #8/29/2018# Do ret = ret + 1 i = i + 1 Loop While i > 3 MsgBox ret End Sub

  • Excel vba

    Excel vba をはじめて1ヵ月程度の初心者ですが、すいません質問させて下さい。 シートをCodeNameでSheets()みたいに指定はできるのでしょうか? また、図形をIDでShaps()みたいに指定する方法はあるのでしょうか? どちらも名前(.Nameの方)は変えてある状態です。 例えばアクティブシート名は"テスト"、図形名は"サンプル"みたいな状態です。 名前は自由に変えていきたいのですが、名前が変わってもかわらず指定できるようにしたいです。 Sub test1 Debug.Print Activesheet.Name Debug.Print Activesheet.Index Debug.Print Activesheet.CodeName Debug.Print Excel.Selection.Name Debug.Print Excel.Selection.Index Debug.Print Excel.Selection.ShapeRange.ID End Sub どなたか御教授おねがい致します!!

  • VBAで空欄にデータに表示

    エクセルVBAのIFを使って、シートaのA列に値があって、B列が空欄の場合のみ、空欄のセルにシートbの値を表示させたいです。 上手くできませんでしたので、教えてください。 Sub Do文2() Dim i As Integer i = 1 If Worksheets("a").Cells(i, 2) = "" Then Do While Worksheets("a").Cells(i, 1) <> "" Worksheets("a").Cells(i, 2) = Worksheets("b").Cells(1, 1) i = i + 1 Loop End If End Sub

  • エクセル(VBA)でファイル名(サブフォルダ含む)、更新日時を表示させたい

    エクセルのVBAであるフォルダ以下の全てのファイル名と更新時間をエクセルシート上に表示させたく、以下のプログラムを作成したのですが 、サブフォルダ内のファイルを表示させることができません。何か良い方法がありましたら教えていただけないでしょうか?宜しくお願いいたします。 Sub SAMPLE() Dim serchPass As String j = 1 Mypath = "C:\My Documents\" MyName = Dir(Mypath, vbDirectory) Do While MyName <> "" ' ループを開始します。 ' 現在のフォルダと親フォルダは無視します。 If MyName <> "." And MyName <> ".." Then ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then Debug.Print MyName ' フォルダであれば、それを表示します。 Else: GoTo 10 End If serchPass = Mypath & MyName With Application.FileSearch .NewSearch .LookIn = serchPass If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + j, 1).Value = .FoundFiles(i) Cells(i + j, 3) = FileDateTime(.FoundFiles(i)) Next i j = i + j End If End With 10 End If    MyName = Dir ' 次のフォルダ名を返します。 Loop End Sub

  • エクセルVBAにてテキスト出力がうまくいきません

    エクセルシートの1列に以下のような文字列を打ち込みました。 - a aa aaa aaaa aaaaa - b bb bbb bbbb bbbbb - c cc ccc cccc ccccc - 「-」の2行後をテキストを出力した際のファイル名とし、ファイル名を含んだ次の「-」までの文字列をそのテキストの中に出力したいです。なお、全体の行数は分かっています。 例えば上の文字列に対して実行すると、 a.txt b.txt c.txt というファイルができ、それぞれの中には a aa aaa aaaa aaaaa などがそれぞれ出力されるようにしたいです。 Sub tepa() Dim strFilename As String Dim FileNumber As Integer Dim strREC As String j = 1 For i = 1 To 70 If Cells(i, 1) = "-" Then strFilename = Cells(i + 2, 1) & ".txt" Do While Cells(i + j, 1) <> "-" If i > 70 Then Exit Sub End If FileNumber = FreeFile strREC = Cells(i + j, 1) Open strFilename For Append As FileNumber Print #FileNumber, strREC Close j = j + 1 Loop End If i = i + j Next End Sub さきほど初めてVBAなるものを知り、見よう見まねで書いてみましたが・・・ループに陥ったりテキストファイルが1つめしか出力されなかったりとうまくいきません。 改善点など教えていただけたら嬉しいです。 よろしくお願いします。

  • 無限ループ VBA IE操作

    VBAです。 とあるサイトで Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub が無限ループに陥ります。 中断して Exit Sub を入れてみましたが、抜けれません。 ページは既に表示済みです。 なぜ無限ループが抜けられないのか、 なぜページが表示されているのにこのコードが繰り返されるのか 何かわかる方よろしくお願いします。

  • エクセルVBAでセルのクリックイベントについて

    エクセルのVBAでDo Whileループの中で,いずれかのセルがクリック され(アクティブ)になったことを知る方法が分かりません。 調べたいセルの個数は数十個で,セルのクリックを連続的に行い, その度に,ある操作を行いたいのです。 Do while flag=true   if ActiveCell.Address="A1" then ****   if ActiveCell.Address="A2" then ****   if ActiveCell.Address="A3" then ****   (これをいくつか記述)   (ループから抜け出る記述) loop これだと,無限ループに陥ってしまいます。 どなたか,お知恵をお貸しください。

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。

専門家に質問してみよう