【Excel2010】において…
Sheet1~10のうち、Sheet10以外(=Sheet1~9)に以下の動作をさせたい場合はどのようにしたらよいですか。
(↓ Sheet1~9の各シート内で、J列に『A列×C列』で任意の検索keyを設定する、というマクロを組んだつもりです)
-------------------------------------------------------------------------------------------
Sub 検索keyを追加()
With Range("A1", Cells(Rows.Count, 1).End(xlUp)).Offset(, 9)
.Formula = "=CONCATENATE(A1,C1)"
.Copy
.PasteSpecial Paste:=xlPasteValues
End With
End Sub
-------------------------------------------------------------------------------------------
現在、VBA習得中(初心者)です。
基本的な質問で大変恐縮ですが、是非ご教示いただきたくお願いいたします。
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
具体的なコードは既に回答がついているので、補足的なものを。
まず複数のシートに対して同一の処理を行う場合、使うのは「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割のパターンには対応できます。
お礼
kkkkkm 様 連日の質問へ回答いただき、誠にありがとうございます。 『追記』のお気遣いにも感謝申し上げます。 最初にご教示いただいたコードをアレンジすることで、スムーズに動作できました。 重ねがさね、お手数をお掛けしました。 また機会がございましたら、お力添えのほど 何卒よろしくお願い申し上げます。