VBAでシート名が「売上」「操作」のシートは常時あります。 VBAを実行したら「集計」「集計(1)」・・・・・・・「集計(5)」まで 自動で増えるように作っています。
VBAでシート名が「売上」「操作」のシートは常時あります。 VBAを実行したら「集計」「集計(1)」・・・・・・・「集計(5)」まで 自動で増えるように作っています。 集計と名の付くファイルはその時の状況で集計(4)までしかシートが増えないこともありますが集計(5)までしか増えません。 そして、その集計と名の付くシートのC3のセルに連番を自動で振りたいです。 シート「集計」には1 「集計(1)」には2、「集計(2)」には3という感じです。 自分で考えたコード Sub test() Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "集計" Then Worksheets("集計").Range("C3").Value = 1 ElseIf ws.Name = "集計(1)" Then Worksheets("集計(1)").Range("C3").Value = 2 ElseIf ws.Name = "集計(2)" Then Worksheets("集計(2)").Range("C3").Value = 3 ElseIf ws.Name = "集計(3)" Then Worksheets("集計(3)").Range("C3").Value = 4 ElseIf ws.Name = "集計(4)" Then Worksheets("集計(4)").Range("C3").Value = 5 ElseIf ws.Name = "集計(5)" Then Worksheets("集計(5)").Range("C3").Value = 6 End If Next End Sub 実行したらできたのですが、もっと短くすっきりしたコードがあれば 勉強のため、教えてください。 例えば、シート(5)以上も増える場合があるようなケースにも対応できる コードとかあれば教えていただきたいです。
Visual Basic | Visual Basic・57閲覧
ベストアンサー
Sub Example() Dim ws As Worksheet For Each ws In Worksheets If ws.Name Like "集計([1-9])" Then ws.Range("C3") = Replace(Replace(ws.Name, "集計(", ""), ")", "") End If Next End Sub
<レベル1> >If ws.Name = "集計" Then >Worksheets("集計").Range("C3").Value = 1 >ElseIf ws.Name = "集計(1)" Then >Worksheets("集計(1)").Range("C3").Value = 2 <レベル2> If ws.Name = "集計" Then ws.Range("C3").Value = 1 ElseIf ws.Name = "集計(1)" Then ws.Range("C3").Value = 2 <レベル3> Dim 値 If ws.Name = "集計" Then 値 = 1 ElseIf ws.Name = "集計(1)" Then 値 = 2 (中略) End If ws.Range("C3") = 値
質問者からのお礼コメント
解答ありがとうございます。 何種類も解答していただき助かります。 自分では考えつかないようなコードを教えていただき レベルアップできるよう日々勉強しようと思います。
お礼日時:5/24 23:19