• ベストアンサー

繰り返しのマクロで変数について

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」のように。 今後作業対象シートが増えていくたびに どんどんマクロが長くなっていくので うまく記述する方法はありませんでしょうか? 「処理内容です」の部分は まったく同じ内容です (変数以外) 宜しくお願い致します

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

変数 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

ennkai
質問者

お礼

回答が遅くなってもうりわけありません 望むとおりの結果が得られました 素人の私にも分かりやすい記述で 勉強になりました ありがとうございます

その他の回答 (4)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

#2 訂正です。 >Next j Next i でした。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.4

変数は入れ物にすぎません。 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でよぶのがよいと思います。

ennkai
質問者

お礼

回答ありがとうございます シート名を変える内容まで教えてくださって ありがとうございました いずれ使わせていただく事があるとおもいますので 勉強させてもらいますね 本当にありがとうございました

回答No.3

シートをシート名ではなく、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

ennkai
質問者

お礼

回答ありがとうございます シートカウントの命令があることを 初めて知りました 今後のために勉強させていただきます 本当にありがとうございました

回答No.1

シート名ではなく Sheet1、Sheet2 といったオブジェクト名でまわせばいいんじゃないでしょうか。

ennkai
質問者

お礼

回答有難うございます 教えていただいた方法は最初に 思いついたのですが シート名を変えないでする方法は やっぱりないものでしょうか?

専門家に質問してみよう