準・究極の選択

一回のループで次のオブジェクトの値も同時に取得するにはどのようなコードを書けばよいですか?

例えば、
ブックにシートが
Sheet1
Sheet2
Sheet3
あり、

Sub Sample1()
Dim s As Worksheet

For Each s In Worksheets
Debug.Print s.Name
Next
End Sub

のように、全てのシート名を取得する場合、
Sheet1とSheet2を1回のループで同時に取得する方法はありますか?


Sub Sample1()
Dim s As Worksheet

For Each s In Worksheets
Debug.Print s.Name
  Debug.Print s+1.Name
Next
End Sub

みたいな方法があるのか知りたいです。
よろしくお願いします。

A 回答 (3件)

なるほど。

シート自体を取得する事が目的じゃないことは判りました。

sub macro2()
 dim i
 for i = 1 to worksheets.count - 1
  msgbox worksheets(i).range("A1")
  msgbox worksheets(i + 1).range("A1")
 next i
end sub

といった具合のことですね。



>ws.Selectの部分で実行時エラー

回答したマクロがそこまで進んだという事は、ご質問の直接の回答としての「2枚のシートを取得する」のは問題なくできていたということです。
たとえば非表示のシートがあってselectできないとかの、ご質問とは無関係な要因と推定します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/21 23:24

一緒に取得して何をしたいのかイマイチ想像もつきませんが、たとえば



sub macro1()
 dim i as long
 dim ws as variant

 for i = 1 to worksheets.count - 1
  set ws = worksheets(array(i, i + 1))
  ws.select
  msgbox "OK"
 next i
end sub

といった具合で、wsに2枚のシートを取得するような事もできます。
    • good
    • 0
この回答へのお礼

>一緒に取得して何をしたいのかイマイチ想像もつきませんが、たとえば

次のシートの値も取得してifステートメントで判断したかったのです。

配列に入れて、次のインデックスを取得する方法なのですね。
しかし
せっかくご回答いただい多のですが、ws.Selectの部分で実行時エラー1004になってしまいました

お礼日時:2013/06/02 19:36

こんにちは。


worksheet.Next プロパティを使います。
"最後のシート"には"次のシート"がありませんから
条件分岐や全体の設計についてよく考えておいた方が良いです。
とりあえず、Error制御と条件分岐と2例。

Sub Re8116272a()
  Dim s As Worksheet
On Error Resume Next
  For Each s In Worksheets
    Debug.Print s.Name;
    Debug.Print , s.Next.Name
  Next
End Sub
 
 
または
 
 
Sub Re8116272c()
  Dim s As Worksheet
  For Each s In Worksheets
    Debug.Print s.Name;
    If s.Next Is Nothing Then
      Debug.Print
    Else
      Debug.Print , s.Next.Name
    End If
  Next
End Sub
    • good
    • 0
この回答へのお礼

Nextというのがあるのですね。
エラーの対応まで考えていただき、ありがとうございました。

お礼日時:2013/06/02 19:33

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