- ベストアンサー
マクロでシート名「1」から繰返し処理したい
VBAの繰り返し処理でWorksheets名が「1」から「100」の時はどう書くのでしょうか。 (「集計表」など他のシートも混じっているので左から1番目~100番目ではない) For i = 1 To 100 Worksheets(i).Select とすると名称「1」のシートでなく最左1番目からと見なされます。 Worksheets("i").Select と書くと「i」名のシートと見なされ変数と認識されません。 「積算1」の様に他の字を混ぜると不思議と認識されます。 Worksheets("積算" & i ).Select の時はOKでした。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
要は下記を実行すればわかります。 Sheet1-->1 Sheet2-->2 Sheet3-->3 とシート名変更。 ーーー 下記を実行。 Sub test01() For i = 1 To 3 n = Trim(Str(i)) Sheets(n).Select MsgBox "シート名確認" Next i End Sub
その他の回答 (4)
確実な方法です。 for ~ next にしていませんが、改造してください。 Dim i As Long Dim i_Txt As String i = 1 i_Txt = Str(i) Worksheets(Right(i_Txt, Len(i_Txt) - 1)).Select
お礼
たびたび有り難うございます。 やってみます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 For i = 1 To 100 Worksheets(CStr(i)).Select Next なお、Str関数は、もともと、VBの関数で、スペースが入ってしまいます。その場合は、Trim を使えばよいのです。
お礼
Wendyさん、こんばんは。レスが遅れ申し訳ありません。 "Cstr"というのが有るんですね。さすがに良くご存知で・・。 使わせていただきます。 有り難うございました。
Str 関数を使うことで解決すると思うのですが... ただし、注意が必要なのは Str 関数で数値を文字列に変換する際、 正の値を変換すると先頭にスペースが入りますので、ちょっと弄る必要があります。 Worksheets(Right(Str(i),len(Str(i))-1).Select こんな感じでいかがでしょうか?
- Zero_0
- ベストアンサー率35% (72/201)
sheets(i).select では、iは数値としてみてしまいます。 sheets("i").selectでは、シート名をiと見ます。 シート名は文字ですから、上記の方法ではダメです。 sheets(i & "").select としてやってください。 正式な方法ではないですができると思います。
お礼
ほかの件でトラブルがあったもので、レスが遅くなり大変失礼しました。 これアイデアですね。 「Worksheets("積算" & i ).Select」の時はOKと分かったら、自分で気がつかなきゃダメですよね。 (^_^;
お礼
imogasiさんには以前も確かお世話になったような・・。 また別の面から有り難うございます。