目障りなエラーチェックマークを除去する

目障りなエラーチェックマークを除去する

状況

セルに数字を文字列で書き込んだ場合、

f:id:akashi_keirin:20190829170610j:plain

このように実に目障りなことになる。

セルの左隅の緑色のスピードくじを一掃したい。

スピードくじを一掃するメソッド

おなじみMicrosoft DocsのRange.Errors propertyの項によると、RangeオブジェクトのErrorsプロパティからErrorsオブジェクトを取得して、そのItemプロパティを操作すれば良いらしい。

Itemプロパティ参照時に指定するインデックスはXlErrorChecks列挙体を用いる。今回のように「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」が表示される場合は、同じくMicrosoft DocsのXlErrorChecks列挙体の項によると、xlNumberAsTextを用いれば良いっぽい。

上記の点を踏まえ、他のエラーチェックマークにも対応できるようにコーディングした。

リスト1
Public Sub removeErrorMarks( _
       ByVal targetRange As Range, _
       ByVal errorCheckType As XlErrorChecks)    '……(1)'
  Dim targetCell As Range
  For Each targetCell In targetRange    '……(2)'
    With targetCell    '……(3)'
      .Errors.Item(errorCheckType).Ignore = True
    End With
  Next
End Sub

まず、(1)の

Public Sub removeErrorMarks( _
       ByVal targetRange As Range, _
       ByVal errorCheckType As XlErrorChecks)

で引数を設定。

Rangeオブジェクトとチェックするエラーの種類を表すXlErrorChecks型の値を受け取る。

(2)からの5行

For Each targetCell In targetRange
  With targetCell
    .Errors.Item(errorCheckType).Ignore = True
  End With
Next

では、受け取ったRangeオブジェクトのセル一つ一つを巡回して処理。

(3)の

With targetCell    '……(3)'
  .Errors.Item(errorCheckType).Ignore = True
End With

で、ErrorsオブジェクトのItemプロパティを参照してErrorオブジェクトを取得し(オブジェクト ブラウザーに「Property Item(Index) As Error 」と書いてある。)、そのIgnoreプロパティの値をTrueにする。

「無視する」をTrueにすることによって、目障りなスピードくじを除去するのだ。

実行

次のコードで実行。

スト2
Private Sub testRemoveErrorMarks()
  Call removeErrorMarks(Selection, xlNumberAsText)
End Sub

選択範囲の「このセルにある数値が、テキスト形式か、またはアポストロフィで始まっています。」スピードくじを一掃するコードだ。

f:id:akashi_keirin:20190829170619g:plain

ご覧のとおり。

おわりに

え? 「ファイル」メニューから「オプション→数式」に進んで、

f:id:akashi_keirin:20190829170614j:plain

このチェックをオフにすればいいじゃん、ってか?

うるせえ、黙ってろ!

わしも今気づいたのじゃw