• ベストアンサー

Excelマクロ シート名を変数で指定

Excelマクロの初心者です。 Sheet1~50を、変数を用いて順に選択したく Dim i as Integer For i = 1 to 50 Sheets("Sheet"&i).Select Next i としたところ、 『実行時エラー'9':インデックスが有効範囲にありません』となってしまいます。 勉強不足なものでどこがいけないのか、どう修正すればよいかわからず困っています。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 インデックスで回していくときは、以下のように変えたほうがよいです。 >Dim i as Integer >For i = 1 to 50 > Sheets("Sheet"&i).Select >Next i   ↓ Dim i as Integer For i = 1 to Worksheets.Count 'またはシートの数  Worksheets(i).Select  '--処理--- Next i インデックスは、シート・タブの左から順番に数えていく方法です。 なお、Sheet と Worksheet は、同意義でありません。Sheet は、ワークシート、グラフシート、マクロシート・ダイアログシートの4つがあります。分かりきっていても、ワークシートの場合は、Worksheet と習慣づけるようにしたほうがよいです。

HAMUK0
質問者

お礼

ありがとうございます。 SheetとWorksheetの違いも分かっていなくて、もっと勉強しなきゃいけないなと思いました。 解決方法だけではなくアドバイスもいただけて、非常に感謝しています。 本当にありがとうございました。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

シート名は、 >Sheet1~50 で間違いないですか? 名前を変更しているけど、左端から1~50にあたるシートを選択なら、 Sheets(i).Select でもよいはずです。

HAMUK0
質問者

お礼

Sheets(i).Select にしたところ、できました!!! 上記のシート選択の作業を60回以上やらなければならなかったので、 本当に助かります。 本当に本当にありがとうございました。

関連するQ&A

  • エクセルのマクロでシートの選択について

    よろしくお願いします WinXP SP3でEXCEL 2003を使用しています ブック名がtest.xls シートが("目次", "1", "2", "3", "4", "5") とあります ここでは仮に"5"までシートがありますが本来は変数であり、n + 1のように扱いたいです 以下のマクロで"目次"以外の全てのシートを選択しました ~~~~~ Sub Macro1() Dim i As Integer i = 2 Sheets(i).Select For i = i To 6 Sheets(i).Select False Next i End Sub ~~~~~ このマクロですとArrayを使わずとも、"目次"以外のシートを選択できますが For i = i To 6 の6を7以上にするとエラー終了します そこで以下の条件にてシートの選択を行いたいのですが方法がわからず困っております 1・シートの数が多くても"目次"以外のシートを全て選択したいです 2・iがシートの数を超えた場合はエラー終了せず、マクロを終了させたいです 3・Sheets(Array( "1", "2", "3", "4", "5")).Select のようなマクロは組みたくないです 大変恐縮ですが、教えていただけますでしょうか できればマクロをVBEにコピー&ペーストするだけで実行できるような 状態にしていただきますと非常に幸いです 何卒、よろしくお願いいたします

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

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

  • シート名変更マクロ

    「1」というシートのH4にコピー数を入力し、「1」の後ろに挿入するマクロがあります。できたシートの名前は「1(2)」「1(3)」となってしまいます。このシート名を挿入した数の通し番号(「2」「3」に変更することはできるのでしょうか?挿入するシートの数は決まっていません。 Sub シートのコピー() Dim i As Integer Dim n As Integer n = Worksheets("1").Range("H4").Value For i = 1 To n Worksheets("1").Copy Before:=Worksheets(Sheets.Count) Next i End Sub

  • Excelマクロ シート名を変数で選択

    Excelマクロの初心者です。 シート名が「1月」・・・「12月」のある(変数定義された)部分を コピー貼付けしたいのですが、 Worksheet(N & "月").Select の行でコンパイルエラーになります。 何がいけないのでしょうか、ご存知の方教えてください。 Sub Dim Namae As String Dim N As Integer For N = 1 To 12 Worksheet(N & "月").Select Cells.Find(What:=Namae, LookIn:=xlValues, LookAt:=xlWhole).Offset(1, 0).Resize(RowSize:=405, ColumnSize:=4).Select Selection.Copy Windows("別ファイル").Activate Sheets("XXX").Cells(3, 1 + N * 5).Select Selection.PasteSpecial Paste:=xlPasteValues,   Operation:=xlNone, SkipBlanks _   :=False, Transpose:=False Next End Sub

  • VBAでのマクロ実行中のオーバーフローについて

    以下のマクロ実行時にたまにオーバーフローが出てしまい マクロが止まってしまうときがあります。 毎回出るのであれば、原因を突き止めやすいのすが、 出なくなると全く出なくなりとても困っています。 もしわかる方がいらっしゃいましたら、御教授して頂けると 幸いです。 内容:データが元々10個単位であり、Sheet1に500×10、 Sheet2に500×10のデータを2次元配列に格納する。 Dim RES_CAM1(1 To 4000, 1 To 10) As Integer Dim RES_CAM2(1 To 4000, 1 To 10) As Integer Sub Macro10() ' ' Dim i, j As Integer .................................................... .................................................... Sheets("Sheet1").Select For i = 1 To 500 For j = 1 To 10 RES_CAM1(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆ Next j Next i Sheets("Sheet2").Select For i = 1 To 500 For j = 1 To 10 RES_CAM2(i, j) = Cells((i - 1) * 10 + j, 19) ← ☆ Next j Next i .................................................... .................................................... End Sub 上記☆のところでオーバーフローで止まったりします。。。

  • 一定の規則でエクセルに並んでいる表を、別シートに元のSheetに設定されているNO順で貼り付ける

    少しややこしいマクロなのですが、 Sheet1に表が左から順に飛び飛びで並んでいます。 1番目の表の1行目の項目値がNO.1で、2番目の表の1番目がNO.2、3番目の表の1番目がNO.3で。。。。と続いていき、最後の表の1行目までいくと、一番始めの表の2行目に続きます。 それを別シートにNO順に1つの表として完成させるマクロをVBAで作りたいと思っています。 調べ回って途中まではやってみたのですが、一向に進まないので教えて下さい(*_ _) 以下はエラーになったマクロです。 Sub CopyCell() Dim CopySource, PasteDist As Range Dim i As Integer Dim j As Integer Dim k As Integer For i = 1 To 7 For j = 1 To 7 For k = 2 To 33 Step 8 Set CopySource = Sheets(1).Range(Cells(i, k), Cells(i, k + 6)) Set PasteDist = Sheets(2).Range(Cells(j, 1), Cells(j, 7)) PasteDist = CopySource Next k Next j Next i End Sub

  • エクセルVBAの質問 開いているもう一つのブックのシート名をすべて取得する方法

    おはようございます。 現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを 開いているもうひとつのブックのシート名を マクロ実行しているシート“しーと1”のJ3セル以降に並べる というように変更したいのですが、下のコードを少し変更して 対応できるでしょうか?教えていただけたら助かります。 Sub シート名() Dim i As Integer Dim mySheetCnt As Integer Dim mySheetNam As String Application.ScreenUpdating = False Columns("J:J").Select Selection.ClearContents Range("J2").Select ActiveCell.FormulaR1C1 = "項目名" mySheetCnt = ThisWorkbook.Sheets.Count For i = 2 To mySheetCnt mySheetNam = Sheets(i).Name Sheets("しーと1").Cells(i, 10) = mySheetNam Next i Application.ScreenUpdating = True MsgBox "シート名更新しました。" End Sub

  • Excel マクロ:変数を複数使う場合

    マクロ初心者です。 For文で、変数を2つ定義し、それぞれが1つずつ増えてくれるような マクロを組みたいのですが、うまくいきません。 例えばA列の並んだ数字を、B列に一個とばしで入力するとして・・・ 例) Dim i As Integer Dim j As Integer For j = 2 To 10 Step 2 For i = 1 To 9 Cells(j, 2).Value = Cells(i, 1).Value Next i, j ではだめですよね。iが1つ増える時に、jも1つ増える、 というようにVBAを組むことが可能なのでしょうか? ど素人な質問ですみませんが、教えてください。

  • 変数が増えてしまうのはなぜだか教えてください。

    こんにちは、マクロ初心者ではないつもりですが、基本ができていないのか、以下のSubで、変数の値が増えてしまいます。i = 3のままだと思っていたのですが、シートが移動するにつれてiの値が増えてしまうのは何故でしょうか。教えてください。 Sub tes() Dim i As Integer Dim ws As Worksheet i = 3 Debug.Print i For Each ws In Worksheets ws.Select For i = 1 To i Debug.Print i Cells(i, i) = i Next Next End Sub 新規のブックに書きました。Sheetは1~3です。

  • エクセルのシートをマクロで並び替えたいです。

    以前に、Q&Aがあったので、下記の物を入れてみましたが、シート名に会社名を入れている為、前(株)○○となると、全て(株)で集まってしまいます。 エクセル2003を使っています。 Sub SortSheets() Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move after:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub ご理解いただけますでしょうか? お分かりになられる方宜しくお願い致します。

専門家に質問してみよう