[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロが、動かなくなった』(こまった)
下記のような、マクロコードを作成しました。
今年の1月に、作成し当初は動作していたのですが1年ぶりに
起動してみたら動作しなくなっていました。
エクセルのバージョンは、2016から365へ変更になりました。
そこらへんも動かなくなった原因なのでしょうか?
今日中に、修正したいです。
Dim 対象月 As Range
Dim 対象月分 As Range
Dim i, r
r = 2
For i = 2 To 13
For Each 対象月 In Worksheets("対象リスト").Range("A2:A13")
Worksheets("運転日誌(7173)様式").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Worksheets("対象リスト").Range("A" & i).Value
ActiveSheet.Range("A3") = Worksheets("対象リスト").Range("C" & r).Value
'ActiveSheet.Range("K2") = Worksheets("対象リスト").Range("C" & r).Value
i = i + 1
r = r + 1
Next
Next
r = 2
For i = 14 To 25
・・・続く
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
どういう意味? エラー発生?
そのへんちゃんと書かな。
(いそげ) 2022/12/27(火) 11:24:08
(いそげ) 2022/12/27(火) 12:02:45
また、全体が提示されていないのでよくわかりませんが、既にコメントがあるように無駄ループになっているとおもいます。
整理すると↓のようになるとおもいますので、落ち着いてコードを分析してみてはどうでしょうか?
Sub 連続シート作成()
Dim 対象月 As Range
For Each 対象月 In Worksheets("対象リスト").Range("A2:A13")
Worksheets("運転日誌(7173)様式").Copy after:=Worksheets(Worksheets.Count)
With Worksheets(Worksheets.Count)
.Name = 対象月.Value
.Range("A3").Value = 対象月.Offset(, 2).Value
End With
Next 対象月
End Sub
(もこな2) 2022/12/27(火) 12:12:28
と言う割にその後音沙汰なし。失礼極まりなし。
もしや新手の愉快犯か。
(行きずり) 2022/12/27(火) 13:17:32
Dim 対象月 As Range
Dim 対象月分 As Range
Dim i, r
r = 2
For i = 2 To 13
For Each 対象月 In Worksheets("対象リスト").Range("A2:A13")
Worksheets("運転日誌(1111)様式").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Worksheets("対象リスト").Range("A" & i).Value
ActiveSheet.Range("A3") = Worksheets("対象リスト").Range("C" & r).Value
'ActiveSheet.Range("K2") = Worksheets("対象リスト").Range("C" & r).Value
i = i + 1
r = r + 1
Next
Next
r = 2
For i = 14 To 25
For Each 対象月 In Worksheets("対象リスト").Range("A14:A25")
Worksheets("運転日誌 (2222)様式").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Worksheets("対象リスト").Range("A" & i).Value
ActiveSheet.Range("A3") = Worksheets("対象リスト").Range("C" & r).Value
'ActiveSheet.Range("K2") = Worksheets("対象リスト").Range("C" & r).Value
i = i + 1
r = r + 1
Next
Next
r = 2
For i = 26 To 37
For Each 対象月 In Worksheets("対象リスト").Range("A26:A37")
Worksheets("運転日誌 (3333)様式").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Worksheets("対象リスト").Range("A" & i).Value
ActiveSheet.Range("A3") = Worksheets("対象リスト").Range("C" & r).Value
'ActiveSheet.Range("K2") = Worksheets("対象リスト").Range("C" & r).Value
i = i + 1
r = r + 1
Next
Next
End Sub
エラー内容は、 「パスがみつかりません。\VBD840.tmp」
です。
(こまった) 2022/12/27(火) 13:36:37
For i = 2 To 13
For Each 対象月 In Worksheets("対象リスト").Range("A2:A13")
i = i + 1
Next 対象月
Next i
よく見ると↑のようになっているから、内側のループが回り切った段階で「i」が14になってしまい、外側のループは1回しか動作しないですよね。
よって、本当はこうしたかったのではありませんか?
Sub 研究用()
Dim i As Long
For i = 2 To 13
Worksheets("運転日誌(7173)様式").Copy after:=Worksheets(Worksheets.Count)
With Worksheets(Worksheets.Count)
.Name = Worksheets("対象リスト").Range("A" & i).Value
.Range("A3").Value = Worksheets("対象リスト").Range("C" & i).Value
End With
Next
End Sub
いずれにせよ、For 〜 Nextステートメントの中でカウンタ変数を勝手に加算したらおかしなことになると思いますので再考されてみてはどうでしょうか?
■2
>エラー内容は、 「パスがみつかりません。\VBD840.tmp」
どの箇所で発生しているのでしょうか?
ざっと見た感じ、そういったエラーが発生するようには見えませんが・・・・
(あと、コメントアウトしてる行がじゃまくさいです。いらないなら削除されては?)
■3
>全コードは、このようになります。
For i = 2 To 13
For Each 対象月 In Worksheets("対象リスト").Range("A2:A13")
For i = 14 To 25
For Each 対象月 In Worksheets("対象リスト").Range("A14:A25")
For i = 26 To 37
For Each 対象月 In Worksheets("対象リスト").Range("A26:A37")
整理すると↑のようになります。「■1」と被りますが、二重ループにする必要性がないと思いますので、再考されてみてはどうですか?
(もこな2) 2022/12/27(火) 14:13:15
Sub 連続シート作成()
Dim i
For i = 0 To 35
Select Case i \ 12
Case 0
Worksheets("運転日誌(1111)様式").Copy after:=Worksheets(Worksheets.count)
Case 1
Worksheets("運転日誌(2222)様式").Copy after:=Worksheets(Worksheets.count)
Case 2
Worksheets("運転日誌(3333)様式").Copy after:=Worksheets(Worksheets.count)
End Select
Worksheets(Worksheets.count).Name = Worksheets("対象リスト").Range("A2").Offset(i).Value
Worksheets(Worksheets.count).Range("A3") = Worksheets("対象リスト").Range("C2").Offset(i Mod 12).Value
Next
End Sub
(OSVLfxp7KN) 2022/12/27(火) 16:59:30
Sub test()
Dim c As Range
Dim s As String
For Each c In Worksheets("対象リスト").Range("A2:A37")
Select Case c.Row
Case Is > 25: s = "運転日誌 (3333)様式"
Case Is > 13: s = "運転日誌 (2222)様式"
Case Else: s = "運転日誌 (1111)様式"
End Select
Worksheets(s).Copy after:=Worksheets(Worksheets.Count)
With Worksheets(Worksheets.Count)
.Name = c.Value
.Range("A3").Value = c.Offset(, 2).Value
End With
Next
End Sub
こんな感じかなぁ。。。。
>エラー内容は、 「パスがみつかりません。\VBD840.tmp」
VBEのツールバーから、
ツール → オプション → 全般 → エラートラップ
は、「エラー発生時に中断」になってますか?
なってなかったら、変えてみたら、どこでどんなエラーが出るか説明してみてください。
(まっつわん) 2022/12/27(火) 17:51:09
Sub さんぷる()
Dim i As Long
For i = 0 To 35 Step 1
Select Case i
Case 0 To 11: Worksheets("運転日誌(1111)様式").Copy after:=Worksheets(Worksheets.Count)
Case 12 To 23: Worksheets("運転日誌(2222)様式").Copy after:=Worksheets(Worksheets.Count)
Case 24 To 35: Worksheets("運転日誌(3333)様式").Copy after:=Worksheets(Worksheets.Count)
End Select
With Worksheets(Worksheets.Count)
.Name = Worksheets("対象リスト").Range("A" & i + 2).Value
.Range("A3") = Worksheets("対象リスト").Range("C" & (i Mod 12) + 2).Value
End With
Next
End Sub
ほぼ、OSVLfxp7KNさん案の焼き増しですね
(もこな2) 2022/12/27(火) 21:03:09
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.