- ベストアンサー
繰り返しのマクロで変数について
Sheets("東京").Select Dim i x = Sheets("東京").Range("X1").Value For i = 1 To x 処理内容です Next i Sheets("千葉").Select Dim j x = Sheets("千葉").Range("X1").Value For j = 1 To x 処理内容です Next j このようなマクロを作っています 作業対象シートが複数ありまして (この例で言うと「東京」シートと 「千葉」シート) それらのシートに対してのマクロを まとめて記述したいのですが 同一マクロでは変数が同じものは使えないため わざわざ変数を複数使っています 「i.j」のように。 今後作業対象シートが増えていくたびに どんどんマクロが長くなっていくので うまく記述する方法はありませんでしょうか? 「処理内容です」の部分は まったく同じ内容です (変数以外) 宜しくお願い致します
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
変数 x が何度も使えて、i,j が使えない理由ってなんでしょうか? Sub sample() Dim shAry As Variant Dim i As Integer, cnt As Integer, x As Integer shAry = Array("東京", "名古屋", "大阪") For cnt = LBound(shAry) To UBound(shAry) Sheets(shAry(cnt)).Select x = Range("X1").Value For i = 1 To x '処理内容です Next j Next End Sub
その他の回答 (4)
- hana-hana3
- ベストアンサー率31% (4940/15541)
#2 訂正です。 >Next j Next i でした。
- fly_moon
- ベストアンサー率20% (213/1046)
変数は入れ物にすぎません。 Sheets("東京")で使用しても中身を入れ替えればSheets("千葉")でも同じものがしようできます。 例えば <処理内容> シートの1行目~10行目まで連番をふる <マクロ> Sub Renban() Dim r As Integer For r = 1 To 10 Range("A" & r) = r Next End Sub を各シートを選択してから行えば、選択されているシートのA列に連番がはいります。 これをシートを順に選択しながら行うとコードは一まとめにできます。 なので処理の部分はこういうマクロを作って、シートを替えるマクロを別に作って、その中から、処理のマクロを呼べばいいのです。 <シートをかえるマクロの例> Sub sheet_change() Dim ws As Worksheet For Each ws In Worksheets ws.Select Call renban Next End Sub これでBOOK内の全てのSheetのA列に10までの連番が振られます。もし処理したくないシートが存在するなら、Forの中にIfやSelectで分岐するか、処理するシートの名前を指定してやって、Callでよぶのがよいと思います。
お礼
回答ありがとうございます シート名を変える内容まで教えてくださって ありがとうございました いずれ使わせていただく事があるとおもいますので 勉強させてもらいますね 本当にありがとうございました
- kouzi_kouji
- ベストアンサー率32% (67/205)
シートをシート名ではなく、item番号を受ければ、可能です。 以下に、例を示します。 Sub シートの名前() Dim j As Integer Dim シート数 As Integer Dim シート名() As String シート数 = Sheets.Count ReDim シート名(シート数) For j = 1 To シート数 シート名(j) = Worksheets(j).Name Next j For j = 1 To シート数 x = Sheets(j).Range("X1").Value For j = 1 To x '処理内容です Next j End Sub
お礼
回答ありがとうございます シートカウントの命令があることを 初めて知りました 今後のために勉強させていただきます 本当にありがとうございました
- harukabcde
- ベストアンサー率15% (94/610)
シート名ではなく Sheet1、Sheet2 といったオブジェクト名でまわせばいいんじゃないでしょうか。
お礼
回答有難うございます 教えていただいた方法は最初に 思いついたのですが シート名を変えないでする方法は やっぱりないものでしょうか?
お礼
回答が遅くなってもうりわけありません 望むとおりの結果が得られました 素人の私にも分かりやすい記述で 勉強になりました ありがとうございます