dポイントプレゼントキャンペーン実施中!

たとえばSheet1とSheet2を一度に選択する場合、
Sub Macro6()
Sheets(Array("Sheet1", "Sheet2")).Select
End Sub
と書くと思います。
ワークシートを変数で書く場合は
Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet
Sheets(Array(ws1.Name, ws2.Name)).Select
End Sub
と、いちいち名前で指定しなければならないのでしょうか?
それとももっと別の書き方があるのでしょうか?

A 回答 (5件)

> この場合、仮にシート1つだけなら


> ws(1).Move
> で大丈夫ですよね?ところが複数になると
> Sheets(Array(ws(1).Name, ws(2).Name)).Move と、わざわざNameで名前を指定するしかないんでしょうか?

この辺はわたしも詳しくないのですが、ws(1)やws(2)はオブジェクト型変数ですから、Array関数ではまとめられないのではないでしょうか?
どうしてもオブジェクト変数のまま使用したいのなら
ws(1).Select
ws(2).Select False
ActiveWindow.SelectedSheets.Move となると思います。
ならば
Sheets(Array(ws(1).Name, ws(2).Name)).Move の方がよほど簡単ですよね。
    • good
    • 0
この回答へのお礼

> ならば
> Sheets(Array(ws(1).Name, ws(2).Name)).Move の方がよほど簡単ですよね。

たしかにそのとおりでしたね。
ありがとうございます。

お礼日時:2011/08/15 22:13

No.3です!


コードを見させていただきました。

Sheet1・Sheet2のSheet名が同じ、またはあるきまったセルの値をSheet名にするのであれば
Sheet名を指定せずにできそうな感じですが、
コードを拝見する限りにおいては
Sheet1を「回答」というSheet名に!
Sheet2を「詳細」というSheet名にするにあたり、規則性がないようなので
はやりそれぞれのSheet名を指定するのが間違いないような気がします。

この程度しか判りませんが、Sheet名を指定せずにできる方法があればごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/08/14 21:06

こんばんは!


的外れならごめんなさい。

Sheet1とSheet2を選択した後、何かの操作をする訳ですよね?
考え方として、両Sheetを一気に!というのではなく、Sheet1の操作が終わればSheet2の操作に!という方法にすればどうでしょうか?

仮にSheet1・Sheet2のA1セルにABCDと表示するコードは↓のような感じで大丈夫だと思います。

Sub test()
Dim i As Long
For i = 1 To 2
Worksheets(i).Cells(1, 1) = "ABCD"
Next i
End Sub

※ この場合Sheet名は一切関係なく、Sheet見出しの左側から1番目・2番目のSheetのA1セルに
ABCDと表示されるはずです。

参考にならなかったら読み流してくださいね。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
実は、だいぶ略しましたが以下のようなことをしております。

Sub ファイル作成()
Dim ws(2) As Worksheet
Dim myPth As String, dp As String
Static myS As Long

myS = myS + 1
myPth = ThisWorkbook.Path & "\" & Format(Date, "YYYYMMDD") & "(" & Format(myS, "00") & ")"
MkDir myPth

Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
Set ws(0) = Sheets("Sheet2")
Set ws(1) = Sheets(Sheets.Count)
Set ws(2) = Sheets.Add(After:=Sheets(Sheets.Count))

With ws(2)
'略
.Range("AF2").Value = ws(0).Range("B1").Value
dp = .Range("AF2").Value
End With

With ws(1)
'略
.Range("A1").Value = dp
End With

MsgBox dp & "を作成しました。"

Sheets(Array(ws(1).Name, ws(2).Name)).Move
Sheets(1).Name = "回答"
Sheets(2).Name = "詳細"
ActiveWorkbook.SaveAs Filename:=myPth & "\" & dp & ".xls"
ActiveWindow.Close
End Sub

この場合、仮にシート1つだけなら
ws(1).Move
で大丈夫ですよね?ところが複数になると
Sheets(Array(ws(1).Name, ws(2).Name)).Move
と、わざわざNameで名前を指定するしかないんでしょうか?

お礼日時:2011/08/11 13:20

記述方法は様々だと思いますが、他の方法では



インデックス番号で指定する方法
Sheets(Array(ws1.Index, ws2.Index)).Select

すべて選択したいなら、
Sheets.Select

こんな方法もあります。
ws1.Select
ws2.Select False


>と、いちいち名前で指定しなければならないのでしょうか?

すべて選択する場合以外では、いちいち名前で指定するのが普通です。
    • good
    • 0
この回答へのお礼

> すべて選択する場合以外では、いちいち名前で指定するのが普通です。

そうなんですか・・・・・・。
せっかくws1,ws2とオブジェクトで変数を指定したのに、わざわざその名前を取得しなければならないことに違和感がありました。
ありがとうございます。

お礼日時:2011/08/10 22:50

一例です。


シートのインデックス番号はどうでしょうか。
Sheets(Array(1, 2)).Select

以外ならば、For Each Sh In ThisWorkbook.Worksheets~Nextで必要なシート名を判定して配列を作成するぐらいでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回は変数を使う場合の質問なのでシートのインデックス番号とは異なります。

お礼日時:2011/08/10 22:45

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A