こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
手順としては、問題文が示す順に処理するのが順当なところか。
Sub VBA_100Knock_014() Dim Ws As Worksheet Dim TargetSheetCount As Long ' 「社外秘」が含まれるシートの数を数える。 For Each Ws In Worksheets If Ws.Name Like "*社外秘*" Then TargetSheetCount = TargetSheetCount + 1 End If Next If TargetSheetCount = Worksheets.Count Then MsgBox "全てのシート名に「社外秘」が含まれているため" & vbNewLine & _ "処理を中断します。" Exit Sub End If Application.ScreenUpdating = False Dim r As Range ' 各シートの各セルについて、数式を値に置き換える。 For Each Ws In Worksheets For Each r In Ws.UsedRange If r <> vbNullString Then If r.HasFormula Then r = r.Text End If End If Next Next Application.DisplayAlerts = False ' 社外秘をシート名に含むシートを削除。 For Each Ws In Worksheets If Ws.Name Like "*社外秘*" Then Ws.Delete End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
全てのシート名に「社外秘」が含まれていれば、処理は中断しなければ
ならない。しかも中断は、数式を値に置き換える前が望ましい。
ということでブック内のシートを三周する、ちょっと面倒くさい感じの
コードになってしまった。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。