Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » 取り消し線をExcel VBAで判定するには注意が必要

取り消し線をExcel VBAで判定するには注意が必要

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2403(ビルド17425.20000クイック実行)ベータチャネル

TextFrame2オブジェクトを経由したFon2.Strikeプロパティをご紹介しました。

Fon2.Strikeプロパティを使えば、図形内文字列に二重取り消し線も引けるのですが、これにより取り消し線が引かれているかをどうかをVBAで判定する場合、注意が必要になっています。

通常の取り消し線でも二重取り消し線でも、Font.Strikethroughプロパティの戻り値がTrueになってくれればありがたいのですが、

残念ながらそうではないためです。

[スポンサードリンク]

図形内文字列の取り消し線を判定するExcelマクロ

下図のように、
  取り消し線のない図形
  通常の取り消し線を引いた図形
  二重取り消し線を引いた図形
が存在するワークシートがアクティブな状態で、

以下のExcelマクロを実行してください。

Sub 図形内文字列の取り消し線を判定する()
 Dim shp As Shape
 For Each shp In ActiveSheet.Shapes
  With shp
   Debug.Print _
    .TextFrame.Characters.Text & vbTab & _
    .TextFrame.Characters.Font.Strikethrough & vbTab & _
    .TextFrame2.TextRange.Font.Strike
  End With
 Next
End Sub

アクティブシートの全図形にFor Each~Nextループを回し、
図形内に入力されている文字列、

  .TextFrame.Characters.Text & vbTab & _

Font.Strikethroughプロパティの戻り値、

  .TextFrame.Characters.Font.Strikethrough & vbTab & _

Font2.Strikeプロパティの戻り値を、

  .TextFrame2.TextRange.Font.Strike

それぞれDebug.Printしているマクロです。

マクロの実行結果

上記マクロを実行した結果、以下のように出力されます。

取り消し線なし False 0
取り消し線あり True 1
二重取り消し線 False 2

「取り消し線なし」「取り消し線あり」については問題ありませんが、二重取り消し線を引いた図形のFont.Strikethroughプロパティの出力結果に注目してください。

  .TextFrame.Characters.Font.Strikethrough & vbTab & _

二重取り消し線の場合、Font.StrikethroughプロパティがFalseになってしまうです。

取り消し線なし False 0
取り消し線あり True 1
二重取り消し線 False 2

Font.Strikethroughプロパティで判定できるのは、(二重取り消し線ではない)通常の取り消し線が引かれているかどうかだけということです。

Microsoftが、Font2オブジェクトを導入したのはExcel 2007のときですが、そのときに既存のFontオブジェクトには手を入れなかったということでしょう。
Microsoft側の方針(気持ち)を理解はできますが、二重取り消し線でもFont.Strikethroughプロパティの戻り値をTrueにしてくれても良かったのではないかと、私は感じます。

最終更新日時:2024-03-28 06:26

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 図形内文字列 » 取り消し線をExcel VBAで判定するには注意が必要

「図形内文字列」の記事一覧

検索


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

.