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

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

このQ&Aのポイント
  • VBAでループ文を使用して1000行×1000列のセルに文字を入力する方法を学習しています。また、入力した文字を全て消去する方法についても知りたいです。
  • 文字の入力には時間がかかる可能性があるので、それは仕方のないことですか?お手数ですが、ご教授お願いします。
  • VBAのループ文を使用して1000行×1000列のセルに文字を入力し、その文字を全て消去する方法について教えてください。また、入力に時間がかかる場合があるかどうかも教えてください。

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

  • ベストアンサー
  • 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 この構文で問題なく、早く処理できました。後で、色々勉強したいと思います。 大変勉強になりました。

その他の回答 (5)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.6

>この構文を生かして時間短縮等はできないものでしょうか? 構文の学習とチューニングや高速化は分けて考える必要がありましょう。 チューニングや高速化の解は、作業の特徴や要求仕様に依存します。 そもそも今回の課題 (単に1000×1000のセルに同じ値を埋め、まとめて消す課題) では提示のコードで行う必要はありませんし、 通常は、他の方のコメントのように、 セル範囲を対象にまとめて行うものと思います。

monta2019
質問者

お礼

ご回答ありがとうございます。自分も色々やってみましたが、配列を使った方が、全然効率的であると思いました。これまで、サポートしていただきありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

VBAでの繰り返し処理は (1)For    For Each (2)Do~While文      Do  While  条件式  処理 Loop     Do 処理  Loop  While 条件式 (3)Do~Until文     Do  Until  条件 処理 Loop https://tonari-it.com/excel-vba-loop-3situation/  http://officetanaka.net/excel/vba/statement/DoLoop.htm などを読めばよい。 ーー 見かけが違うものとして While...Wend http://officetanaka.net/excel/vba/statement/WhileWend.htm === 処理時間短縮 (1)ScreenUpdating=Falseを処理の最初に入れる。 Application.ScreenUpdating = False https://thom.hateblo.jp/entry/2015/08/31/063500 (2)配列にデータを一旦入れて、まとめてセルのデータとして代入する。 (3)不必要な、入出力や通信処理を入れない。 (4)繰り返し法(総なめ法)しかないか、問題に応じて学習する。 (5)事前に、それが早く見つかるようなデータ(Index的なもの)を、その時は時間を費消するが、用意しておく。 (6)適当なアルゴリズムを勉強する。初心者向けに必ずあるものではないから思い煩うな。 プログラムを、学び始めて数日の段階から、処理速度を速めることなど考えるなと言いたい。 昔は総なめ法などプログラマーとしては、軽蔑されたと思うが、ハード的な 処理速度が向上して、優先順位が低くなっていると思う。

monta2019
質問者

お礼

リンク先大変参考になりました。 また、With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End Withを積極的に使っていこうと思います。ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

No.3の訂正 提示された Sub 文字入力消し() のコードは、 Cells(i, t) = "" このコードが1000回繰り返し その後、 t = t + 1 このコードが実行されますので tの値は1001になります。  <==ここを誤記してました。 そのため、 Loop Until Cells(i, t) = "" この条件にヒットし、 外側のループからも抜けてしまいます。

monta2019
質問者

補足

やりたかったのはこの構文ですが、大変時間がかかります。この構文を生かして時間短縮等はできないものでしょうか?お手数おかけして大変申し訳ありません。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

提示された Sub 文字入力消し() のコードは、 Cells(i, t) = "" このコードが1000回繰り返し その後、 t = t + 1 このコードが実行されますので tの値は10001になります。 そのため、 Loop Until Cells(i, t) = "" この条件にヒットし、 外側のループからも抜けてしまいます。 提示のコードを生かすのであれば つぎのような記述になります。 Sub 文字入力消し()  Dim i As Long  Dim t As Long  i = 1  t = 1  Do   Do    Cells(i, t) = ""    t = t + 1   Loop Until Cells(i, t) = ""   i = i + 1   t = 1  Loop Until Cells(i, t) = "" End Sub

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

個別にセルに書き込みには時間がかかりますので一旦、配列に格納して 一気に書き込めば時間を短縮できるでしょう Sub 文字入力2()   Dim i As Long   Dim t As Long   Dim v(1 To 1000, 1 To 1000)   For i = 1 To 1000     For t = 1 To 1000       v(i, t) = "wooo"     Next t   Next i   Range("A1").Resize(1000, 1000).Value = v End Sub Sub 文字入力3()   Range("A1", Cells(1000, 1000)).Value = "wooo" End Sub Sub 文字入力消し2()   Dim i As Long   Dim t As Long   Dim v As Variant   v = Range("A1").Resize(1000, 1000).Value   For i = 1 To 1000     For t = 1 To 1000       If v(i, t) <> "" Then v(i, t) = ""     Next t   Next i   Range("A1").Resize(1000, 1000).Value = v End Sub Sub 文字入力消し3()   Range("A1").Resize(1000, 1000).ClearContents End Sub

monta2019
質問者

補足

Watabe007様 早速の回答ありがとうございます。文字消しはあくまで、do 文で記載したいと思っているのですが、(do と for文を使いこなせるようになるため)do 文で記載した場合どのように なるのでしょうか?