質問: 2 To Sheets.count Sheets(Sheets(i).Name).Select '数字ではないシート名は対象外 Range("B20").CurrentRegion.Select 'B20の周りのデータが入ったセルを選択(A20:C20) **Selection.Resize(, Selection.Column.count - 1).Select '選択範囲をA20:B20に** Selection.Offset(0, 1).Select '選択範囲をB20:C20にする Selection.Copy '選択範囲のデータをコピー Worksheets("X").Range("A" & i).Select 'Xシートの"A2"を選択 Selection.PasteSpecial xlPasteValues'形式を選択して貼り付け(値のみ) Next i End Sub (文字列ではない)1のシートのB20セルを選択 その周りにあるデータが入っているセルを拡張(A20:C20) その一番右のセルの選択を解除、選択範囲を一つ右にずらす(B20:C20) (B20:C20)をコピー、XシートのA2シートへ型式を選択して貼り付け(値のみ) **というプロシージャになっていますでしょうか?** ```
回答: `Sheets(Sheets(i).Name).Select '数字ではないシート名は対象外` だとシート名が数字以外の場合でも対象になってしまいますよね。 数字のシート名だけを対象にしたいなら、IsNumeric関数でチェックすべきだと思います。 あと、 Activate や Select を使用しない方法にしましょう。 Selectすると遅くなるだけでなく、コードが読みづらくなるし、想定外に選択箇所が変更されてエラーの原因になりやすいです。 コード例 ``` Sub LightCount2() Dim wsX As Worksheet Set wsX = Worksheets.Add(after:=Worksheets(Worksheets.Count)) wsX.Name = "X" Dim i As Long For i = 2 To Sheets.Count - 1 With Worksheets(i) If IsNumeric(.Name) Then '数字ではないシート名は対象外 Dim rng As Range Set rng = .Range("B20").CurrentRegion 'B20の周りのデータが入ったセル範囲 Set rng = rng.Resize(, rng.Columns.Count - 1).Offset(0, 1)'セル範囲を変更 wsX.Range("A" & i).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value '値の代入 End If End With Next i End Sub ```