一回のループで次のオブジェクトの値も同時に取得する方法

このQ&Aのポイント
  • 一回のループで複数のオブジェクトの値を取得する方法について教えてください。
  • 特定のコードを使用して、一つのループで複数のオブジェクトの値を同時に取得する方法について知りたいです。
  • 複数のオブジェクトの値を一度に取得する方法を教えてください。
回答を見る
  • ベストアンサー

一回のループで次のオブジェクトの値も同時に取得する

一回のループで次のオブジェクトの値も同時に取得するにはどのようなコードを書けばよいですか? 例えば、 ブックにシートが 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 みたいな方法があるのか知りたいです。 よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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できないとかの、ご質問とは無関係な要因と推定します。

UKUMUZLSBTYA
質問者

お礼

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

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

一緒に取得して何をしたいのかイマイチ想像もつきませんが、たとえば 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枚のシートを取得するような事もできます。

UKUMUZLSBTYA
質問者

お礼

>一緒に取得して何をしたいのかイマイチ想像もつきませんが、たとえば 次のシートの値も取得してifステートメントで判断したかったのです。 配列に入れて、次のインデックスを取得する方法なのですね。 しかし せっかくご回答いただい多のですが、ws.Selectの部分で実行時エラー1004になってしまいました

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 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

UKUMUZLSBTYA
質問者

お礼

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

関連するQ&A

  • ブック内のシート名を右から取得したい

    Sub Sample() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name Next End Sub このコードを実行すると、左からシート名をひとつずつ取得しますが 右から取得して書き出すにはどうすればいいでしょうか?

  • 右からループするにはどうすればいいですか?

    Sub test() For Each s In Worksheets Debug.Print s.Name Next End Sub これでシート名を取得する際は左から取得されますが 右からループするにはどうすればいいですか?

  • どちらを使った方がいいでしょうか?

    Sub test1() Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next End Sub Sub test2() Dim ws As Variant For Each ws In Worksheets Debug.Print ws.Name Next End Sub どちらも問題なく実行されますが、 VBA的にどちらを使った方がいいでしょうか?

  • Worksheet Worksheets オブジェ

    「Worksheetオブジェクト」と「Worksheetsオブジェクト」は何が違うのでしょうか? 使い方もいまいちわかりません。 この二つを使う時は、 Sub test1() Dim w As Worksheet For Each w In Worksheets Debug.Print w.Name Next End Sub とするときなのですが、 なぜ、変数の宣言をする時は、Worksheetを使い、 ワークシートの数を数える時は、Worksheetsを使うのでしょうか?

  • 「.Name」がエラーになる理由は?

    Sub 全てのシート名を取得する() Dim w As Worksheet Dim 行 As Long 行 = 1 For Each w In Worksheets Debug.Print w.Name 行 = 行 + 1 Next End Sub Sub 全てのブック名を取得する() Dim wb As Workbooks Dim 行 As Long 行 = 1 For Each wb In Workbooks Debug.Print wb.Name 行 = 行 + 1 Next End Sub 標準モジュールに ふたつのプロシージャーを作ったのですが 「全てのシート名を取得する」は問題なく動作しますが 「全てのブック名を取得する」は「.Name」の部分が 「コンパイルエラー メソッドまたはデータ メンバが見つかりません。」 (Error 461) になってしまいます。 なぜでしょうか? 全てのブック名を取得することはできないのですか?

  • Workbookオブジェクトに格納できない

    一つのアプリケーション内で、 2008.xlsx 2009.xlsx のファイルを開いているのですが 2009.xlsxの標準モジュールから 2008.xlsxをWorkbookオブジェクトに格納するにはどうすればいいですか? 例えば、2008.xlsxの全てのファイル名を取得したい場合、 Sub Sample() Dim w As Workbook Dim s As Worksheet Set w = Windows("2008.xlsx") For Each s In Worksheets Debug.Print s.Name Next End Sub を実行しようとすると、 型が一致しません。(Error 13)になります。

  • 任意でsの値にシート名を入れることは可能でしょうか

    Sub test() Dim s As Worksheet For Each s In Worksheets Next End Sub このようなシート名を左からループする際に、任意でsの値にシート名を入れることは可能でしょうか? 例えば、 s="シート3" などです。

  • AddItem をクリアしたい

    UserForm1.ListBox1.AddItem をクリアしたいです。 エクセルのユーザーフォームに全てのシート名を追加してるのですが Sub a() Dim s As Worksheet For Each s In Worksheets UserForm1.ListBox1.AddItem s.Name Next End Sub を実行する度に追加されてしまいます。 Sub a() Dim s As Worksheet UserForm1.ListBox1.AddItem Null For Each s In Worksheets UserForm1.ListBox1.AddItem s.Name Next End Sub のように、最初にリセットしてから追加したいのですが どうもNULLだとエラーになるようです どうすればリセットできますか?

  • シート上のOLEオブジェクトのタイプを取得する

    シート上のOLEオブジェクトのタイプを取得するvbaは? Sub Sample() Dim i As Integer For i = 1 To ActiveSheet.OLEObjects.Count Debug.Print ActiveSheet.OLEObjects(i).Type Next i End Sub これだとエラーになります。 テキストボックスとかコマンドボタンとかの情報を取得するには どうすればいいでしょうか?

  • 変数が増えてしまうのはなぜだか教えてください。

    こんにちは、マクロ初心者ではないつもりですが、基本ができていないのか、以下のSubで、変数の値が増えてしまいます。i = 3のままだと思っていたのですが、シートが移動するにつれてiの値が増えてしまうのは何故でしょうか。教えてください。 Sub tes() Dim i As Integer Dim ws As Worksheet i = 3 Debug.Print i For Each ws In Worksheets ws.Select For i = 1 To i Debug.Print i Cells(i, i) = i Next Next End Sub 新規のブックに書きました。Sheetは1~3です。

専門家に質問してみよう