重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセルVBAで複数シートの選択をしたいのです。

シート名やシートの位置が変更される可能性があるので
オブジェクトで指定したいのですが
記述方法が分かりません。



##シートの位置
Sub mac1()
Worksheets(Array(2,5)).Select
End Sub


##シート名
Sub mac2()
Worksheets(Array("aaa","あああ")).Select
End Sub

A 回答 (5件)

もっと簡単なやり方があるかもしれませんが・・・



Sub mac2()

Dim nm(1 To 2) As String

ar(1) = VBAProject.Sheet2.Name
ar(2) = VBAProject.Sheet5.Name

Worksheets(nm).Select

End Sub

でいかがでしょう?
    • good
    • 0

ok20050706 さん、こんにちは。



>#1さんの方法で処理できました。

私は、#1 のfly_moonさんのコードは試してみませんでした。私は、あくまでも、擬似的なコントロール配列から、シートを指定する以外、直接、VBAProject を取る方法は、まったく考えていませんでした。

私は、単に、オブジェクト名は取れても、そのまま使えないということを書いたまでですから、直接、#1の fly_moonさんのコードとは関係がありません。誤解されるような書き方をしてすみません。

なお、オブジェクトを配列にするのは、変数をコレクション型にしますが、その変数を使いまわししなければ、無駄が多いような気がします。
    • good
    • 0
この回答へのお礼

こちらこそ、理解不足で申し訳ございませんでした。

今後の参考にさせていただきたいと思います。

ありがとうございました

お礼日時:2005/07/22 08:48

>?????(Array(?,?)).Select


では無理なんではないでしょうか。

オブジェクトブラウザで見てみると、VBAProjectのメンバに複数のクラスをまとめて扱えそうなクラスが存在していないように思います。

あと、Array関数で扱えるのはバリアント型なのでオブジェクト型を入れられないし・・・

私の解る範囲はここまでです。ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

#1、#2のコードで行いたいと思います。

お礼日時:2005/07/22 08:46

こんにちは。


>オブジェクトで指定したいのですが

オブジェクトではなくて、オブジェクト名(コードネーム)でよいかと思います。

コードネーム名を変更できるのは、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

この回答への補足

>オブジェクトではなくて、オブジェクト名(コードネーム)で
>よいかと思います。
おっしゃるとおりオブジェクト「名」です。


>また、コードネーム(=VBAProjectのシートネーム)を取れても、
>シート・オブジェクトとシート名が同じなら、Select できますが、
>違えば、直接指定できません
もうすこし、詳しく教えてください

<実際>
オブジェクト名:Sheet2
シート名 :aaa
シート位置 :左から3番目
です。

この場合なのですが、
#1さんの方法で処理できました。

>違えば、直接指定できません
のケースに当てはまりますか?

補足日時:2005/07/20 15:47
    • good
    • 0

すいません。

#1です。

>ar(1) = VBAProject.Sheet2.Name
>ar(2) = VBAProject.Sheet5.Name

違ってました。

nm(1) = VBAProject.Sheet2.Name
nm(2) = VBAProject.Sheet5.Name

です。
    • good
    • 0
この回答へのお礼

ありがとうございます

Sub mac3()
?????(Array(?,?)).Select
End Sub

というのができるかなと思ったのですが
やはり、VBAProject.???.nameを使ってシート分回さないと無理なのでしょうか。

お礼日時:2005/07/20 15:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!