• ベストアンサー

複数シートの選択

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

noname#11836
noname#11836

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

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

もっと簡単なやり方があるかもしれませんが・・・ Sub mac2() Dim nm(1 To 2) As String ar(1) = VBAProject.Sheet2.Name ar(2) = VBAProject.Sheet5.Name Worksheets(nm).Select End Sub でいかがでしょう?

その他の回答 (4)

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

ok20050706 さん、こんにちは。 >#1さんの方法で処理できました。 私は、#1 のfly_moonさんのコードは試してみませんでした。私は、あくまでも、擬似的なコントロール配列から、シートを指定する以外、直接、VBAProject を取る方法は、まったく考えていませんでした。 私は、単に、オブジェクト名は取れても、そのまま使えないということを書いたまでですから、直接、#1の fly_moonさんのコードとは関係がありません。誤解されるような書き方をしてすみません。 なお、オブジェクトを配列にするのは、変数をコレクション型にしますが、その変数を使いまわししなければ、無駄が多いような気がします。

noname#11836
質問者

お礼

こちらこそ、理解不足で申し訳ございませんでした。 今後の参考にさせていただきたいと思います。 ありがとうございました

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

>?????(Array(?,?)).Select では無理なんではないでしょうか。 オブジェクトブラウザで見てみると、VBAProjectのメンバに複数のクラスをまとめて扱えそうなクラスが存在していないように思います。 あと、Array関数で扱えるのはバリアント型なのでオブジェクト型を入れられないし・・・ 私の解る範囲はここまでです。ご参考になれば幸いです。

noname#11836
質問者

お礼

回答ありがとうございました。 #1、#2のコードで行いたいと思います。

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

こんにちは。 >オブジェクトで指定したいのですが オブジェクトではなくて、オブジェクト名(コードネーム)でよいかと思います。 コードネーム名を変更できるのは、VBE画面の手動のプロパティでしかできません。VBA等では、値のみしか取得できません。故意に変更しなければ、問題はないはずです。(プロジェクト自体をロックしたら、もちろん、コードネームは変更できません。) また、コードネーム(=VBAProjectのシートネーム)を取れても、シート・オブジェクトとシート名が同じなら、Select できますが、違えば、直接指定できません。 以下は、その都度、シートIndexを取るようにしています。 サンプルコード Sub Sheet_CodeNames()  Dim ws As Object, i As Long  Dim myCNameSheet As Variant  Dim myShIndexes As Variant  'ここは、プロパティで調べて、オブジェクト名を入れます。  myCNameSheet = Array("Sheet1", "Sheet3")  myShIndexes = myCNameSheet  For Each ws In Sheets   For i = LBound(myCNameSheet) To UBound(myCNameSheet)    If myCNameSheet(i) = ws.CodeName Then     myShIndexes(i) = ws.Index    End If   Next i  Next ws  Worksheets(myShIndexes).Select End Sub

noname#11836
質問者

補足

>オブジェクトではなくて、オブジェクト名(コードネーム)で >よいかと思います。 おっしゃるとおりオブジェクト「名」です。 >また、コードネーム(=VBAProjectのシートネーム)を取れても、 >シート・オブジェクトとシート名が同じなら、Select できますが、 >違えば、直接指定できません もうすこし、詳しく教えてください <実際> オブジェクト名:Sheet2 シート名 :aaa シート位置 :左から3番目 です。 この場合なのですが、 #1さんの方法で処理できました。 >違えば、直接指定できません のケースに当てはまりますか?

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

すいません。#1です。 >ar(1) = VBAProject.Sheet2.Name >ar(2) = VBAProject.Sheet5.Name 違ってました。 nm(1) = VBAProject.Sheet2.Name nm(2) = VBAProject.Sheet5.Name です。

noname#11836
質問者

お礼

ありがとうございます Sub mac3() ?????(Array(?,?)).Select End Sub というのができるかなと思ったのですが やはり、VBAProject.???.nameを使ってシート分回さないと無理なのでしょうか。

関連するQ&A

  • VBA 複数シート選択について

    Sub test() Dim i As Integer i = ActiveWorkbook.Worksheets.Count Worksheets(Array(2, i)).Select End Sub シート2とシートi の選択ではなく、2~iまでの複数シート を選択するにはどのように書くのかご教示下さい。

  • VBAで複数シート選択

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

  • 複数のシートに 転記

    Sub べんきょう()   Worksheets(Array(1, 3)).Select   Range("3:3").Activate   ActiveCell.ClearContents  End Sub シート1,3の3行目のデータを消したい もしくは Sub べんきょう()   Worksheets(Array(1, 3)).Select   Range("3:3").Activate   ActiveCell.Interior.color = xlNone  End Sub シート1,3の3行目の色を消したい うまくいかなくて困ってます…。 どなたかどうかご指導よろしくです。

  • 【VBA】 超初心者です 複数のシートに転記したい

    Sub べんきょう() Worksheets(Array(1, 3)).Select Range("A1").value = 20 End Sub もしくは Sub べんきょう() Worksheets("sheet1").Select Worksheets("sheet3").Select False Range("A1").value = 20 End Sub でやってもsheet1にしか転記されないんです!! ご指導よろしくお願いします!

  • アクティブでないシートのセルを選択

    Excel VBAでアクティブでないシートのセルをSelectすることはできないのでしょうか。 Selectメソッドというのは,もともとそういうものなのでしょうか。 エラー: 「RangeクラスのSelectメソッドが失敗しました。」 コード Sub aaa() With Worksheets("Sheet2") .Range(.Cells(44, 1), .Cells(48, 21)).Select End With End Sub

  • ActiveX コントロールでのセル選択

    Excel VBA独学中の初心者です。 目的:ActiveX コマンドボタンをクリックして他のSheetのセルを選択する 環境例:シートが2個(Sheet1、Sheet2) Sheet2にActiveXコントロールのコマンドボタンを置く 【プログラム1】:コマンドボタンには次のようなVBAコードを記述 ---------------- Private Sub 別シートセル選択_Click() Worksheets(1).Activate Range("A5").Select End Sub ---------------- 結果:この時次のようなエラーが出ました。 '実行時エラー'1004 'アプリケーション定義またはオブジェクト定義のエラーです。 -------------------------------- -------------------------------- 【プログラム2】:コマンドボタンには次のようなVBAコードを記述 ---------------- Private Sub 別シートセル選択_Click() Worksheets(1).Activate Worksheets(1).Range("A5").Select End Sub ---------------- 結果:OK ---------------- ---------------- ところが次の【比較1】【比較2】の場合、「Range("A5").Select」だけでOKでした。 ---------------- 【比較1】 コントロールの存在するSheetのセルを選択する場合は「Range("A5").Select」だけでOKでした。 ---------------- 【比較2】 Subマクロで記述する場合も「Range("A5").Select」だけでOKでした。 プログラムは以下 -------- Sub セル選択() Worksheets(1).Activate Range("A5").Select End Sub ---------------- 【質問】 ActiveX コントロールを置いているSheetとは別のSheetのセルを選択する時は、選択しようとするセルの「Sheet名」から記述しなければならないのでしょうか。 「Range("A5").Select」だけでOKだった【比較1】【比較2】との違いを教えていただきたくお分かりの方宜しくお願いします。 (用語の使い方に誤りがありましたらすみません。)

  • 初歩的な質問です!sheetの選択

    よろしくお願いします! エクセル2003,Sheet1を右クリック>コードを表示を選択して、下のように記述したところ、予想と違う動作をしました。 sheet1,2のそれぞれのA1セルに各々のsheet名を入力したかったのですが、失敗した原因はどうしてでしょうか。activateをselectにしても変わりませんでした。 初歩的なことだと思いますが、どうぞよろしくお願いします! Sub macro() Worksheets("sheet1").Activate Cells(1, 1) = "sheet1です。" Worksheets("sheet2").Activate Cells(1, 1) = "sheet2です。" End Sub

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • Excelシートを複数選択するvbaについて

    タイトルのvbaを作成していますが、インデックスエラーとなりうまく選択できません。 社員番号をシート名にしたシートが複数あります。 ここでは、2番目のシートから仮に060001~060100までとします。 (社員番号は6桁で整理しています。) 1番目のシートには、別途、条件に一致した社員番号リストを作成しています。 (シート名が6桁のため、セルの書式設定で"000000"をしています。) A1=060002 A2=060005 A3=060088 この社員番号リスト(A1、A2、A3)に一致するシートを別ブックにコピーするのが目的ですが、まずは、選択するところから始めたところ、インデックスエラーにより選択できません。 シート名と配列にしたリストの型がよくないと思い、文字列に直すなどを試してみましたがうまくいかず、結局どのように直していいのかわかりませんでした。 ご教示いただけないでしょうか? よろしくお願いいたします。 以下に、実行したプログラムを記載させていただきます。 Option Base 1 Sub Sample() Dim Sh As Worksheet Dim ArrShName() As String Dim i As Long ReDim ArrShName(1) For i = 1 To 3 ReDim Preserve ArrShName(i) ArrShName(i) = Cells(i, 1) Next i ' Worksheets(Array("060002", "060005", "060088")).Select Worksheets(ArrShName).Select End Sub

  • 複数シートの印刷設定について

    はじめまして、こんにちは。 複数シートの印刷について教えて下さい。 印刷したいエクセルブックにはシートが6枚あり、その中から4枚のシートをVBAを使って印刷できるようにしたいと思っています。 ですが、シート4については必ずある訳でなく、無い場合もあるので”シート4があれば、シート4も印刷する”という風にしたいと思うのですが、どのように書けばいいのでしょうか。 vntSelSheet = Array("シート1", "シート2", "シート3" ,"シート4" ) Worksheets(vntSelSheet).Select Worksheets(vntSelSheet).PrintOut

専門家に質問してみよう