- ベストアンサー
VBA初心者が複数行の処理を記述する方法
- VBAの初心者ですが、60行の処理を同時に適用する方法を教えてください。
- 私はVBA初心者で、一行分の処理は書けるようになりましたが、複数行の処理を同時に適用する方法がわかりません。
- 現在、私はVBAのコードを書いていますが、一行分の処理しかできません。実際には60行の処理に同じ処理を適用したいのですが、どのように書けばいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 動作を60行とかに同時に どこの60行かが分かりませんが、次のような感じでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim I As Integer Application.EnableEvents = False For I = 41 To 100 If Cells(I, "CH") < Cells(I, "CC") Then Cells(I, "CH") = Cells(I, "CC") Next I Application.EnableEvents = True End Sub 注) ・Application.EnableEvents 今回特に使用しなくてもできそうですが、セルに値をセットすると、処理中にまたChangeイベントが 発生してしまう可能性があるので入れました。 ・Cells(I, "CH") = Cells(I, "CC") 値を入れるだけだと思いますので、コピーしなくても直接セルに値を設定した方がスッキリすると 思います。 プログラムは色々なテクニックや作り方があると思います。 なるべくステップを減らし、分かりやすいプログラム作成に心がけて下さい。
その他の回答 (1)
- muunoy
- ベストアンサー率38% (70/183)
Worksheet_Changeに書いているということは、 シートが変更されたら、マクロを起動したいということですよね。 Select範囲を任意の60行にすればよいのだと思います。 複数行は、例えば Range("A1:A60").Select のように書けば選択することができます。
補足
補足させてください。 はい、セルの値が変更したことによりif条件が起動し、該当する値がコピー先にペーストされることを複数行でおこなえることを目ざしています。 Rangeを範囲として選択できるのはわかるのですが、たとえば範囲で指定した場合、if条件にもかかわらずすべてがコピペされることにならないかと懸念しています。 初めて書いたコードがイベントドリブンでなんともハードルが高いのですが、ここまできたので完成させたいと思います。 記載していますコードは一行分に対してはキチンと動作してます。 ひきつづきアドバイス戴ければ幸いです。
お礼
jcctairaさん、ありがとうございました! 操作したところこちらの希望していたとおりの動作です! ”処理中にまたChangeイベントが発生してしまう可能性があるので入れました”こういう視点がやはり付け焼刃で学習した人間には欠落していました。入門書片手にFindメソッドで試そうかなどと思案してたところです。 専門家ではないですが、自分なりにこれから少しずつ理解を深めたいと思います。 本当にありがとうございました。