- ベストアンサー
【VBA】複数シートのうち、任意シートのみで動作
- 【Excel2010】において、Sheet1~10のうち、Sheet10以外(=Sheet1~9)に指定のマクロを実行したい場合、どのようにすればよいでしょうか。
- VBA初心者のため、Sheet1~9の各シート内で特定の検索キーワードをJ列に自動的に設定するマクロを作成しました。
- 現在、VBAの習得中であるため、基本的な質問ですが、どうかご教示いただけますと幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sheet1~9が左端から連続して存在しているという過程で Sub 検索keyを追加2() Dim i As Long Dim Sh As Worksheet For i = 1 To 9 Set Sh = Sheets(i) Sh.Activate With Sh.Range("A1", Sh.Cells(Rows.Count, 1).End(xlUp)).Offset(, 9) .Formula = "=CONCATENATE(A1,C1)" .Copy .PasteSpecial Paste:=xlPasteValues End With Set Sh = Nothing Next End Sub
その他の回答 (2)
- kon555
- ベストアンサー率51% (1842/3559)
具体的なコードは既に回答がついているので、補足的なものを。 まず複数のシートに対して同一の処理を行う場合、使うのは「For Each」または「For」です。 どちらでもいけますが、個人的に使いやすいのは「For」なので、まずはFor文を覚えましょう。。 以下に例示しますが、これはで全てのシートに対して動作します。 ・Forの場合 Sub test1() Dim i As Long For i = 1 To Sheets.Count Sheets(i).~~(行いたい処理) Next i End Sub 「For i = 1 To Sheets.Count」で、「変数iを、1からシート番号最大値まで変化させつつ、以下の処理を繰り返す」という意味になります。 そしてSheets(i)で、シートのi番目という意味になりますので、順繰りに全てのシートに対して処理が行われる事になります。 今回のケースは「シート1から9まで」なので、Forなら 「i = 1 To 9」にする。またはif関数でシートの名前や番号で条件づける事で、ご希望の動作が達成できます。 他に色々な方法はありますが、ひとまずこのForで処理する方法を覚えてしまえば、8~9割のパターンには対応できます。
お礼
kon555 様 この度は、懇切丁寧な解説、アドバイスを頂戴しまして 誠にありがとうございました。 初心者のわたくしでも理解できました。 ベストアンサーはコードを記載いただきました方とさせていただきましたが、 kon555 様の解説と合わせて眺めることにより、そのコードをよくよく理解することができました。 今後はアドバイスいただいた「For」文を使っていこうと思います。 まだまだ勉強を始めたばかりでわからないことだらけです。 改めて別の質問をすることもあるかと思います。 またお時間許されましたら、是非ご教示いただきたくお願い申し上げます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1の追加です。 ちらちらして遅いなどがありましたら Application.ScreenUpdatingで画面表示を止めたり Sh.Activateを外す などして対応してください。
お礼
kkkkkm 様 連日の質問へ回答いただき、誠にありがとうございます。 『追記』のお気遣いにも感謝申し上げます。 最初にご教示いただいたコードをアレンジすることで、スムーズに動作できました。 重ねがさね、お手数をお掛けしました。 また機会がございましたら、お力添えのほど 何卒よろしくお願い申し上げます。