• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA ループ文)

VBAループ文で文字の入力と消去を行う方法

watabe007の回答

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>文字消しはあくまで、do 文で記載したいと思っているのですが サイズが1000行、1000列と決まっているのだから Sub 文字入力消し4()   Dim i As Long   Dim t As Long   Dim v As Variant   v = Range("A1").Resize(1000, 1000).Value   i = 1   t = 1   Do Until i = 1000     i = i + 1     Do Until t = 1000       t = t + 1       v(i, t) = ""     Loop     t = 0   Loop   Range("A1").Resize(1000, 1000).Value = v End Sub

monta2019
質問者

お礼

配列を使うという考え方をこれから勉強していきたいと思います。 大変お世話になりました。

monta2019
質問者

補足

Sub 文字入力消し3() Dim i As Long Dim t As Long Dim v As Variant v = Range("A1").Resize(1000, 1000).Value i = 1 t = 1 Do Until i = 1000 i = i + 1 Do Until t = 1000 t = t + 1 v(i, t) = "" Loop t = 0 Loop Range("A1").Resize(1000, 1000).Value = v Range("A1").Resize(1000, 1000).ClearContents End Sub この構文で問題なく、早く処理できました。後で、色々勉強したいと思います。 大変勉強になりました。

関連する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

  • エクセルVBAの繰り返し処理の質問

    C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。

  • [VBA] for文の3次元ループ

    for文の3次元ループがうまく働いてくれません。 8通り(2x2x2)の組み合わせ表示を期待しましたが2通り(y1のみ)のみでループが終わってしまいます。エラーなどはでません。何が原因なのか分かりません。ご指導お願いします。 Public x1 As Single, y1 As Single, z1 As Single Sub Start1() i=1 For x1 = 0.3 To 0.4 Step 0.1 For y1 = 0.5 To 0.6 Step 0.1 For z1 = 0.4 To 0.5 Step 0.1 Cells(i, 1) = x1 Cells(i, 2) = y1 Cells(i, 3) = z1 i=i+1 Next z1 Next y1 Next x1 End Sub

  • [VBA] For文の使い分けについての疑問

    こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) ・疑問点 For each nextもFor nextも、最下行まで処理をしたいときに使用することが多いのですが、 単列の場合はFor each next、複数列の場合はFor nextというような使い方をしています。 例:For each next Sub test()  Dim ws As Worksheet  Dim r As Range  Dim endRow As Long  Set ws = ThisWorkbook.Sheets(1)  endRow = ws.Cells(Rows.Count, 1).End(xlUp).Row  For Each r In ws.Range("A1:A" & endRow)   If r.Value Mod 2 = 0 Then r.Font.Bold = True  Next r End Sub 例:For next Sub test2()  Dim ws As Worksheet  Dim i As Long  Dim endRow As Long  Set ws = ThisWorkbook.Sheets(1)  endRow = ws.Cells(Rows.Count, 1).End(xlUp).Row  For i = 1 To endRow   If ws.Cells(i, 1).Value Mod 2 = 0 Then ws.Cells(i, 1).Font.Bold = True   If ws.Cells(i, 2).Value Mod 3 = 0 Then ws.Cells(i, 2).Font.Bold = True  Next i End Sub 単純に、複数列での処理をする場合にはFor each next文を2つ書かないといけないと思い(込み)、 上記のような運用にしていますが、そもそもこの考え方は合っていますでしょうか? 単列の処理であってももちろんFor next文で問題なく使用できますし、 複数列の処理の場合もFor each next文で処理することはできます(冗長ですが)が、 VBA的に正しいというか、合理的な考えであるのかどうかが疑問です。 みなさんはFor each nextとFor nextをどのように使い分けていますか? 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

  • VBA エクセル 列の並び替え

    左から右にA、B、Cと値が入っています。 ABC以外の文字が列に入っていたら、削除するというマクロを組みましたが、範囲を設定するところでエラーが出てしまいました。 なぜでしょうか? 教えて下さい。 Sub arrange() Dim rg As Range Dim i As Long i = 1 Do rg = Cells(i, 1) If rg <> "A" And rg <> "B" And rg <> "C" Then Range(i & ":" & i).Delete End If i = i + 1 Loop Until (i & "1") = "" End Sub

  • エクセルVBAの二重ループについて

    今月VBAを勉強し始めた初心者です。 Webにて入力されたcsvファイルを編集する際に 最新投稿を残して表に出力する目的で 下記のマクロを作成して実行してみたところ 変数i、jが0になるまでループが繰り返されてエラーになってしまいます。 ループ範囲指定のどこに問題があるのでしょうか? こちら側の環境が OS:Windows7 64bit Ultimate Office2007 です。 ご教授宜しくお願い致します。 Sub namaesakujo() Dim i As Integer Dim j As Integer Dim mct As Integer Dim Name1 As String Dim Name2 As String Dim Time1 As Long Dim Time2 As Long Worksheets("result").Activate mct = Worksheets("result").UsedRange.Rows.Count '最大行数を指定 Name1 = Cells(i, 2).Value '名前1 Name2 = Cells(j, 2).Value '名前2 Time1 = Cells(i, 1).Value '時間1 Time2 = Cells(j, 1).Value '時間2 '変数iを最終行数~2行目まで指定 i = mct Do While i > 2 '変数jを最終行数~2行目まで指定 j = mct Do While j > 2 '2列目iと2列目jが等しい(名前が同じ)場合、日時が小さい方を削除する If Name1 = Name2 And Time1 > Time2 Then Cells(j, 1).EntireRow.Delete End If j = j - 1 Loop i = i - 1 Loop MsgBox "更新完了" End Sub

  • 【vba】複数のセルをfor文で選択したい

    vbaを独学で学んでおります。 質問内容は、 for文で条件に合ったセルを複数選択するにはどうすればいいのかというものです。 下のプログラムを作ってみたんですが、ループする回数がある一定の数を超えるとエラーが起こります。rangeオブジェクトにつかえる文字列の長さは、255文字までだとかなんとかだそうです。 Public Sub test() Dim str As String Dim i As Integer str = Cells(1, 1).Address For i = 2 To 50 str = str & "," & Cells(i, i).Address Next Range(str).Select End Sub さらに、次のプログラム使っても、256個ぐらいしかセルが選択できません。(これも何かの上限?) Public Sub test2() On Error GoTo エラー Dim r As Range Dim i As Integer Set r = Cells(1, 1) For i = 2 To 300 Set r = Union(r, Cells(i, i)) Next r.Select エラー: r.Select MsgBox ("256個しか選べませんでした") End Sub もっと、無制限に、たくさんのセルを選択できるようにしたいのですが、何か手はないでしょうか? ご教授お願いします。

  • vbaでオーバーフローしてしまいました。

    Dim i As Long Dim k As Long For i = 1 To 829 For k = 1 To 995 Worksheets("2").Cells(k,i) = Worksheets("1").Cells(k,i) /Worksheets("1").Cells(996,i) Next k Next i これを実行したらオーバーフローしてしまい、途中までしか計算できませんでした。 解決方法を教えて頂きたいです。よろしくお願いします。

  • VBAで配列に文字列が入らない?

    以下のように配列を設定し、A(ix)の配列にdo untilでそれぞれに文字列を入れようとしておりますが、うまくいきません。 dountil の一回目では代入ができているようですが、2回目ができずに止まってしまいます。 おかしな点がありましたらご指摘いただけませんでしょうか。 Dim A() As String Dim ix As Long ix = 0 ReDim Preserve A(ix) Dim tate As Long tate = 1 Do Until tate = 8 A(ix) = ws.Cells(tate, 1) tate = tate + 1 ix = ix + 1 Loop Doの初回A(0)に文字列は入りますが、 Doの二回目以降A(1)に文字列を入れる作業ができずに止まってしまいます。 よろしくお願いします。