|
ももたんさん、こんにちは。
あたくし作のツールバーソフト「ピカつーる」の機能です。よかったら、お試し下さい。
エラーの場合は、セル色と文字色を同じにしてなんも起きてない様に見せてます。
Sub 演算エラー非表示()
Dim 初期セル As Range
Dim セル As Range
Dim 設定数 As Integer
Dim I As Integer
Dim 数式 As String
Dim FrgA As Integer
Dim FrgB As Integer
Dim カウント As Long
On Error GoTo errout
メッセージ = "セルの値が↓の様な演算エラーとなった場合、文字色を変更し非表示とします。" & vbLf & _
" ( #N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? )" & vbLf & "" & vbLf & _
"条件付き書式を用いて実行します。" & vbLf & _
"(既に3ヶの書式が設定されているセルは実行されません。)" & vbLf & "" & vbLf & _
"次の3つのうちのいずれかを選択して下さい。" & vbLf & "" & vbLf & _
"《 はい 》 … シート内すべての数式セルを非表示モードにする。" & vbLf & _
"《 いいえ 》 … 非表示モードを解除する。" & vbLf & _
"《 キャンセル 》 … 何もせず、閉じる。"
スタイル = vbYesNoCancel + vbQuestion + vbDefaultButton1 + vbApplicationModal
タイトル = " 【 演算エラー非表示設定 】"
YESNO = MsgBox(メッセージ, スタイル, タイトル)
FrgA = 0
FrgB = 0
If (YESNO = vbYes) Or (YESNO = vbNo) Then
Application.ScreenUpdating = False '画面固定
If ActiveSheet.ProtectContents Then FrgA = 1
If YESNO = vbYes Then FrgB = 1
If YESNO = vbNo Then FrgB = 2
Set 初期セル = Selection
ActiveSheet.Unprotect
Cells.SpecialCells(xlCellTypeFormulas, 23).Select
カウント = 0
For Each セル In Selection
設定数 = セル.FormatConditions.Count
If 設定数 > 0 Then
For I = 1 To 設定数
数式 = セル.FormatConditions(I).Formula1
If (Len(数式) >= 9) And (Left(数式, 9) = "=ISERROR(") Then
セル.FormatConditions(I).Delete
カウント = カウント + 1
Exit For
End If
Next
End If
If FrgB = 1 Then
設定数 = セル.FormatConditions.Count
If 設定数 < 3 Then
セル.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ISERROR(" & セル.Address() & ")=TRUE"
If セル.Interior.ColorIndex = xlNone Then
セル.FormatConditions(設定数 + 1).Font.ColorIndex = 2
Else
セル.FormatConditions(設定数 + 1).Font.ColorIndex = _
セル.Interior.ColorIndex
End If
End If
End If
Next
初期セル.Select
Set 初期セル = Nothing
Application.ScreenUpdating = True '画面固定解除
If FrgA = 1 Then ActiveSheet.Protect
If FrgB = 1 Then
MsgBox "エラー非表示モードにしました。", vbInformation
ElseIf FrgB = 2 Then
If カウント = 0 Then MsgBox "エラー非表示に設定されてませんでした。", vbInformation
If カウント > 0 Then MsgBox "通常の状態に戻しました。", vbInformation
End If
End If
Exit Sub
errout:
MsgBox Error(Err.Number), vbExclamation
End Sub
|
|