Home » ExcelVBA Rangeオブジェクト » セルの一部でも取り消し線が引かれているかをVBAで判定する

セルの一部でも取り消し線が引かれているかをVBAで判定する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2205 ビルド15225.20204 Microsoft Store)

「vba 取り消し線 判定」
「EXCEL vba 取り消し線 判別」
といった検索キーワードをきっかけにして、セル全体に取り消し線が引かれているかどうかを判定するExcel VBAのコードをご紹介しました。
セルを表すRangeオブジェクトから取得したFontオブジェクトのStrikethrouphプロパティを使って、

セル全体に取り消し線が引かれているかどうかを判定するコードです。

しかし、セルの一部に取り消し線が引かれている場合は、Rangeオブジェクトから取得したFont.Strikethrougpプロパティでは判定できません。

[スポンサードリンク]

セルの一部でも取り消し線が引かれているか判定するExcelマクロ

セルの一部でも取り消し線が引かれているかどうかを判定するには、以下のようなコードです。

Sub セルの一部でも取り消し線が引かれているかを判定する()
 With ActiveCell
  Dim i As Long
  For i = 1 To Len(.Value)
   If .Characters(i, 1).Font.Strikethrough Then
    MsgBox "取り消し線が引かれています。"
    Exit Sub
   End If
  Next

  MsgBox "取り消し線は引かれていません。"
 End With
End Sub

Characters.Font.Strikethroughで取り消し線の判定ができる

Fontオブジェクトに用意されているStrikethroughプロパティを使うのは同じですが、

Fontオブジェクトを取得する経路が違います。
セル全体の取り消し線の場合はRange.Fontプロパティを使いましたが、

セルの一部の場合は文字列を表すCharactersオブジェクトのFontプロパティです。

セルに入力されている文字列の長さだけFor~Nextループを回して、

With ActiveCell
 For i = 1 To Len(.Value)

Rangeオブジェクトに用意されているCharactersプロパティを使って

セル内文字列を1文字ずつ順番に取得し、

 For i = 1 To Len(.Value)
  If .Characters(i, 1).Font.Strikethrough Then

CharactersオブジェクトのFontプロパティで取得したFontオブジェクトのStrikethroughプロパティで取り消し線が引かれているか判定しています。

 For i = 1 To Len(.Value)
  If .Characters(i, 1).Font.Strikethrough Then

取り消し線が引かれているときに、上記のExcelマクロでは、メッセージを表示してSubプロシージャを終了しています。

  If .Characters(i, 1).Font.Strikethrough Then
   MsgBox "取り消し線が引かれています。"
   Exit Sub

For~Nextループが最後まで実行されたということは、そのセル内では一部にも取り消し線が引かれていないということですから、その旨のメッセージを表示しています。

 Next

 MsgBox "取り消し線は引かれていません。"
End With
[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セルの一部でも取り消し線が引かれているかをVBAで判定する

Home » ExcelVBA Rangeオブジェクト » セルの一部でも取り消し線が引かれているかをVBAで判定する

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.