Excelで「完了した項目に取り消し線を入れたい」「特定の条件で自動的に線を引きたい」と思ったことはありませんか。
手作業で取り消し線を設定するのは面倒ですが、VBA(Visual Basic for Applications)を使えば、クリックひとつで処理を自動化できます。
この記事では、Excel VBAで取り消し線を設定・解除する方法、条件付きで自動的に取り消し線を入れるサンプルコードまで、初心者にもわかりやすく解説します。
Excelの取り消し線とは?
Excelの「取り消し線」とは、文字の中央に横線を引く装飾のことです。
ToDoリストや進捗管理表などで「完了したタスク」を見やすく区別するのに使われます。
たとえば、
☑ 企画書作成(取り消し線付き)
☐ 会議資料作成(未完了)
のようにすると、完了と未完了が一目でわかります。
通常は、[ホーム] → [フォント] → [取り消し線] のボタンを押すか、Ctrl + 5のショートカットで設定します。
しかし、これを毎回手作業で行うのは非効率です。ここで登場するのがVBAによる自動化です。
VBAで取り消し線を設定する基本コード
VBAでは、セル内の文字に取り消し線を設定するには、Font.Strikethroughプロパティを使います。
基本構文
Range("A1").Font.Strikethrough = True
このコードを実行すると、A1セルの文字に取り消し線が付きます。
取り消し線を解除するには、次のように書きます:
Range("A1").Font.Strikethrough = False
複数セルにまとめて取り消し線を設定する
複数のセルに一括で取り消し線を付けたい場合、次のように範囲指定して書くことができます。
Sub StrikeThroughRange()
Range("A1:A10").Font.Strikethrough = True
End Sub
また、選択中のセルに対して取り消し線を設定したい場合は、Selectionを使います。
Sub StrikeThroughSelection()
Selection.Font.Strikethrough = True
End Sub
これで、ユーザーが選んだセルだけに取り消し線を付けることができます。
条件によって自動で取り消し線をつける(If文活用)
たとえば、
「B列の値が『完了』ならA列に取り消し線を引く」
というような条件を設定することもできます。
サンプルコード
Sub AutoStrikeThrough()
Dim i As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
For i = 2 To lastRow
If Cells(i, "B").Value = "完了" Then
Cells(i, "A").Font.Strikethrough = True
Else
Cells(i, "A").Font.Strikethrough = False
End If
Next i
End Sub
このコードは、B列の「完了」状態を見て、対応するA列に取り消し線を引くものです。
タスク管理表などに使うと便利です。
チェックボックスと連動して取り消し線をつける
「チェックボックスをONにしたら取り消し線を引く」仕組みも、VBAで簡単に実現できます。
手順
- [開発]タブ → [挿入] → [フォームコントロール] → [チェックボックス]を挿入
- 右クリック → [マクロの登録]で次のコードを登録
サンプルコード
Sub CheckBoxStrikeThrough()
With Range("A1")
.Font.Strikethrough = Not .Font.Strikethrough
End With
End Sub
これで、チェックボックスをクリックするたびにA1セルの取り消し線がON/OFF切り替わります。
セル内容の変化で自動的に取り消し線をつける(イベントVBA)
手動でマクロを実行しなくても、セル内容が変わったタイミングで自動で取り消し線を付けることも可能です。
以下のコードを**シートモジュール(例:Sheet1)**に書き込みます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("B2:B20")
If Not Intersect(Target, rng) Is Nothing Then
Application.EnableEvents = False
If Target.Value = "完了" Then
Target.Offset(0, -1).Font.Strikethrough = True
Else
Target.Offset(0, -1).Font.Strikethrough = False
End If
Application.EnableEvents = True
End If
End Sub
このコードでは、B列に「完了」と入力した時、自動的に左隣(A列)の文字に取り消し線を付けます。
条件を変更すれば、「済」「done」「〇」などにも対応可能です。
取り消し線を部分的に設定する方法
セル内の一部の文字だけに取り消し線を付けたい場合は、Charactersプロパティを使います。
サンプルコード
Sub PartialStrikeThrough()
Dim c As Range
Set c = Range("A1")
'「完了」という文字の部分だけに取り消し線を設定
c.Characters(Start:=3, Length:=2).Font.Strikethrough = True
End Sub
このようにすれば、セル全体ではなく「特定の部分」にだけ線を引くことも可能です。
報告書の修正箇所を示す時などにも応用できます。
取り消し線を使った便利な応用例
1. ToDoリストの自動整理
「完了」にチェックを入れたタスクに自動で取り消し線を引くことで、未完了の項目をすぐ確認できます。
2. 修正履歴の表示
修正前の内容に取り消し線を入れ、横に修正後の内容を追加すれば、変更点が明確になります。
3. 売上管理表のキャンセル表示
「キャンセル済み」や「返品済み」の行に取り消し線を引いておけば、データの状態を視覚的に管理できます。
取り消し線を解除するマクロ
設定した取り消し線を一括解除したい場合は、次のコードを使います。
Sub RemoveAllStrikeThrough()
Range("A1:A100").Font.Strikethrough = False
End Sub
範囲を広げて全体を対象にしたり、条件を追加して柔軟に変更できます。
VBAを使うときの注意点
- ファイル形式を「.xlsm」で保存
VBAを含む場合は、マクロ対応形式で保存しないとコードが失われます。 - イベント無限ループに注意
Worksheet_Changeイベントでは、セルの書き換え時に再度イベントが発生しないよう、Application.EnableEvents = False/Trueを必ずセットで使いましょう。 - バックアップを取っておく
自動で文字装飾を行う処理は、思わぬ範囲に影響を与えることがあります。
元に戻せるようにバックアップを取るのがおすすめです。
まとめ
Excel VBAを使えば、取り消し線の操作を自動化して作業効率を大幅にアップできます。
Font.Strikethrough = Trueで設定、Falseで解除If文やイベントを使えば条件付きで自動化できる- 一部の文字にだけ取り消し線を付けることも可能
タスク管理や修正履歴、在庫管理など、さまざまな場面で活用できます。
ぜひ今回紹介したコードをコピーして、自分のExcelファイルに応用してみてください。


コメント