• ベストアンサー

複数シートの選択

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

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

  • ベストアンサー
  • 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

専門家に質問してみよう