• ベストアンサー

VBAで複数シート選択

エクセルVBAで複数のシートを選択する場合、 Sheets(Array("AAA", "BBB", "CCC")).Select  と書くと思いますが、マクロを回してみないことにはシート名や枚数が特定できない場合、どのように記述したらいいのでしょうか? たとえば、新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。 よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。#2のお礼に関して、 Sub test01() n = 2 m = 3 Sheets(n).Select For i = n + 1 To n + m - 1 Sheets(i).Select False Next i End Sub でどうですか。

merlionXX
質問者

お礼

imogasiさん、いつもありがとうございます。 Sheets(i).Select Falseで、順次セレクトできるんですね! これならわざわざシート名を配列に入れていかなくても、都度選択していけばいいということがわかりました。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sub test01() Dim sh As Worksheet For Each sh In ActiveWorkbook.Worksheets MsgBox sh.Name ' 処理 Next End Sub でどうですか。 問題にしているある1つのシートは、処理を除外する場合がありますが、If文でシート名を 判別して、スキップしてください。

merlionXX
質問者

お礼

ありがとうございます。 For Nextは一番最初に考えたのですが、Sheets(n)~Sheets(n+x)に該当する場合、すべて選択するという処理の書き方が分からないのです。 よろしかったらご教示お願いできませんでしょうか?

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

> 新たに追加されたSheets(n)~Sheets(n+x)を選択するような場合です。 要は、シート名の配列を渡せば良いわけで。 サンプルです。 Sub Test1() Dim sh() As String Dim i, n, x n = 5 x = 2 ReDim sh(n To n + x) For i = LBound(sh) To UBound(sh) sh(i) = Sheets(i).Name Next Sheets(sh).Select End Sub

merlionXX
質問者

お礼

ありがとうございます。 ReDim?また新たな疑問が湧いてきましたが、なんとか追加されたシートインデックスを(n To n + x)にいれて目的を達することができました。

関連するQ&A

  • 複数シートの選択

    エクセルVBAで複数シートの選択をしたいのです。 シート名やシートの位置が変更される可能性があるので オブジェクトで指定したいのですが 記述方法が分かりません。 ##シートの位置 Sub mac1() Worksheets(Array(2,5)).Select End Sub ##シート名 Sub mac2() Worksheets(Array("aaa","あああ")).Select End Sub

  • vbaで全てのシートを選択状態にしたい 印刷

    マクロの記録で、全てのシートを選択すると、 Sheets(Array("シート1", "シート2")).Select というのが取得できるのですが、 このコードはシート名が増えたり、シート名が変更されると、使えなくなってしまいます。 全てのシートを選択状態にして、印刷をするvbaをしたいのですが、 シートが増えても使えるvbaコードはありますか?

  • A~B間にある全てのシートを選択する記述を教えてください

    VBAの基本がまったくわかっていない初心者です。 マクロで、あるブックの左から3つ目のシートが“A”、末尾が“B”という名前のシートで、そのAからB間のシート全てを選択したいのですが、方法が分かりません。自動記述で選択すると、 Sheets(Array("Sheets1","Sheets2")).Select などとなりますが、シートの数も名前も不定ですので名前では指定できません。 このサイトなどで調べて Sheets(Sheets(3):Sheets.Count).Select などとやってみましたがエラーになります。 丸投げで恐縮ですが、記述のしかたを教えていただけないでしょうか。 よろしくお願いいたします。

  • VBA 存在しないシートを選択した時にエラーメッセージを表示するには?

    マクロのコードに Sheets("AAA").Select と記述していますが、あるブックに対しマクロを実行したとき、AAAというシートがないときは、AAAというシートがないというダイアログを表示したいのですが、そのようなことが出来ますか? 存在しないシートを選択した時にエラーメッセージを表示するには?

  • VBAでのエラーです・・。

    最近VBAマクロを本を片手に勉強しています。シートを選択するVBAを作っていて次のような記述ができないのか考えています。 dim A as String A = "sheet2,sheet3" Sheets(Array(A)).select とやると、Arrayの行で「インデックスが・・・」というエラーで落ちます。Arrayを変数で指定することができないのですが・・。なにか記述に問題があるのでしょうか?(変数Aに"sheet2", "sheet3"と値が入るようにしても結果はNGでした・・。) 宜しくお願いします。

  • VBAの定義と印刷について

    VBAで下記の様に定義をして印刷していますが、sheet"AAA","BBB"と同じく 新しいsheet"DDD"もの一緒に印刷したい場合の定義はどうなるのでしょう!教えて頂けますでしょうか。 よろしくお願いします。 別sheetの"sheet1"A列 AAA,BBB,CCC          B列 1,2,3  として印刷フラッグがある。 VBAでは Sub sheet1印刷() CNT = 4 CNT1 = 1 CNT2 = 1 TAKE = 0 CK = 30 Do Until CNT2 = CNT Do Until CNT1 = 4 If Sheets("sheet1").Cells(CNT1, 1) = Sheets("sheet1").Cells(CNT2, 3) Then TAKE = Sheets("sheet1").Cells(CNT1, 2) Select Case TAKE Case 1: Sheets("AAA").PrintOut Copies:=1 Case 2: Sheets("BBB").PrintOut Copies:=1 Case 3: Sheets("CCC").PrintOut Copies:=1 End Select CNT1 = 1 Exit Do Else: CNT1 = CNT1 + 1 End If Loop CNT2 = CNT2 + 1 Loop End Sub

  • VBAで全シートを一括選択したい

    VBAを勉強し始めたばかりの初心者です。 エクセルで非表示に切り替えられているシートを 一括で表示に切り替えできるマクロを作成しているのですが 「全シートの選択」方法がわかりません。 ひとつずつのシートなら 下記のマクロでうまくいくのですが・・・ 2行目の「("Sheet3")」を全シートに切り替えれば うまくいくかなって思っているのですけど 方法がわかりません。 よい方法をご存知の方、よろしくご教授願います。 Sub Macro1() Sheets("Sheet3").Visible = True Sheets("Sheet1").Select End Sub

  • VBA 一個前のシートのデータをコピーして貼付

    (1) Private Sub Workbook_Open()に、マクロの記録で作成した(2)を組み込んで処理をしたいのですが、一つ前のファイルを選択する記述・一つ前のシートを指定する記述が判りません。 ●御教示いただきたい事項 ・(1)で開かれた時、ファイルはマスター.xls が開いていますが、 ファイル名 ccc.xlsが開いた状態にする記述のしかた。     ・(2)が各シートで実行される、共通の記述のしかた。 (1) Private Sub Workbook_Open() Workbooks.Open Filename:="C:\Documents and Settings\aaa\My Documents\bbbマスター\マスター.xls" End Sub (2)  ファイル名 ccc.xlsにマクロの記録で作成 Sub Macro4()     Range("J11").Select     'Sheets("7月")のセル J11 Sheets("6月").Select  Range("I7").Select Selection.Copy Sheets("7月").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

  • 複数のシートにまたがる列の削除について

    こんばんは、複数のシートを選択して特定の列を削除するVBAについて質問させてください。Sheet1とSheet2のA~C列を削除したく、以下のVBAを入力しましたが、削除されるのはSheet1のA~C列のみでSheet2に同様の処理が行われません。 手作業でやると複数のシートを選択のうえ列の削除ができるので、VBAでできないということはないと思うのですが、どのように記述すればよいのでしょうか・・・?!どなたかご教授よろしくお願いいたします! Sheets(Array("Sheet1","Sheet2")).Select Range("A:C").Delete Shift:=xlToLeft

  • VBAで、エクセルワークシート上の図を選択・削除したい

    VBAで、ワークシート上の図をすべて選択して削除するのは、どのように書いたら良いでしょうか?実際の図は一つなのですが、オートマクロで記述すると、 ActiveSheet.Shapes.Range(Array("Picture 3").Select のように、番号が変わってしまいます。

専門家に質問してみよう