• ベストアンサー

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

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

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

  • ベストアンサー
回答No.2

こんにちは。 > 右からループするにはどうすればいいですか? 基本的には、 For Each...Next ステートメントで逆順のループをさせることは出来ませんので、 既出の回答のようにFor...Next ステートメントで インデックスを逆順でループすることになります。 なぜ「右からループ」させたいのか、という説明があれば、 そう少し他の話が出来るのかも知れませんが、 私個人の経験から 何度も繰り返し頻繁に「右からループ」する必要があるという理由で、 ブックを開いた時に、逆順のコレクションを用意するようにして、 総当たりで「右からループ」を簡単に出来るようにした実践コード がありましたので、参考としてあげてみます。 「右からループ」の理由、実務からの要求ではなくて、 基本技術の学習が目的、ということでしたらば、 インデックスを逆順でループするのが普通のやり方です。 何か不足があるようでしたら、補足をお願いします。 ' ' /// 〓 以下、ひとつの標準モジュールに併記する場合 〓 w9100377 Option Explicit Private colWsk As New Collection ' ' 全ワークシートを逆順でCollectionオブジェクトに格納 Private Sub Auto_IOpen() Dim i As Long   With Worksheets     For i = .Count To 1 Step -1       colWsk.Add .Item(i), CStr(i)     Next i   End With End Sub ' ' 逆順の全ワークシートが格納されているCollectionオブジェクトを総当たりループ Sub main() ' 「右からループ」 Dim wks As Worksheet   If colWsk.Count = 0 Then Call Auto_IOpen   For Each wks In colWsk     Debug.Print wks.Name   Next End Sub ' ' ///

FHWLTDIHX
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

どうぞ~ For i = Worksheets.Count To 1 Step -1 Debug.Print Worksheets(i).Name Next

FHWLTDIHX
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連する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 みたいな方法があるのか知りたいです。 よろしくお願いします。

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

    Sub Sample() Dim s As Worksheet 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的にどちらを使った方がいいでしょうか?

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

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

  • 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) になってしまいます。 なぜでしょうか? 全てのブック名を取得することはできないのですか?

  • ブックのすべてのシート名を取得するコード

    何が間違いなんでしょうか? エクセル2003です。 ブックのすべてのシート名を取得するコードを考えてるのですが なぜか一番左のシート名しか取得できません。 コードは↓です。 ----------------------------------- Sub test01() Dim x As Workbook For Each x In Workbooks Debug.Print ActiveSheet.Name Next End Sub ----------------------------------- できないので「Workbooks」の部分を「ThisWorkbook」に変えてみたところ 実行時エラーになってしまいました。 ご教授よろしくお願いします。

  • アクセス For Eachの時点 絞る

    For Eachの時点で、コマンドボタンのみに絞ることは可能ですか? Sub Sample() Dim myFormName As String Dim ctl As Control myFormName = "フォーム1" For Each ctl In Forms(myFormName).Controls Debug.Print ctl.Name Next ctl End Sub これでフォーム上の全てのコントロール名を取得できますが ループの時点でコマンドボタンのみを抽出できますか? For Each ctl In Forms(myFormName).Controls If ctl.ControlType = acCommandButton Then Debug.Print ctl.Name End If Next ctl こうすれば、コマンドボタンのみ絞れますが コントロールの数が多すぎて、処理に時間がかかります。 なので For Each ctl In Forms(myFormName).Controls の部分の、ループの時点でコマンドボタンを絞りたいのですが 絞れる方法があれば教えてください。

  • 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だとエラーになるようです どうすればリセットできますか?

  • パワポ vba 全てのスライドをループする

    エクセルなら 全てのシートをループして作業する場合は For Each s In Worksheets Next でできますが、 パワポで全てのスライドをループして 各スライドで作業したい場合は、 どのようなコードになるのでしょうか?

専門家に質問してみよう