Excelで取消線がついたセルを簡単に探す方法
Excelで作業しているとき、古くなった内容を取消線で削除しておき、新しい内容を追記するようなことはありませんか?
取消線を引いて古い内容を残しておくと、過去の経緯が分かりやすくなるので、後から見返したときに、内容が妥当なのかどうかが分かりやすくなるというメリットがあります。
一方で、取消線があるセルは、検索機能を使って探し出すことはできません。また、背景色をつける場合と比べると、パッと見でどこが取り消されたのかが分かりにくいというデメリットがあります。
そこで、この記事では、取消線があるセルを簡単に探す方法を紹介します。
Excelのマクロ(VBA)機能を使用して、以下の2パターンで取消線があるセルを探す方法を取り上げます。
- 取消線があるセルに色をつける方法
- 取消線があるセルの一覧を別シートに出力する方法
それでは、それぞれの方法の具体的な内容を見ていきましょう。
取消線があるセルに色をつける方法
最初は、取消線があるセルに色をつける方法です。
VBAのコード
以下のVBAのコードを使用します。
Option Explicit
Sub color_strikethrough_cell()
'変数宣言
Dim cell As Range
'選択されたセルひとつひとつに対して判定処理を実施。
For Each cell In Selection ' --- ①-1
If cell.Font.Strikethrough = True Then ' --- ②-1
cell.Interior.Color = 255
ElseIf cell.Font.Strikethrough = False Then ' --- ②-2
'Null
Else ' --- ②-3
cell.Interior.Color = 65535
End If
Next cell ' --- ①-2
End Sub
VBAのコードを使用してマクロを作成する方法
上記のコードを使用して、以下の①〜③の手順でExcelマクロを作成します。
①Alt + F11キーを押して、VBA Editorを起動します。
②画面左にある「プロジェクトウィンドウ」で右クリックし、「挿入」→「標準モジュール」を選択します。
③右側にあるコードウィンドウにコードを貼り付けます。
④「×」ボタンを押して、VBAのウィンドウを閉じます。
ここまでで、マクロの作成は完了です。
マクロの使用方法
このマクロを使用するには、以下の手順を実施します。
①取消線を探したい範囲を選択します。
②Alt + F8キーを押して、「マクロ」ウィンドウを開きます。
③実行するマクロの名称を選択し、「実行」を押下します。
実行すると、以下のような結果になります。
(参考)VBAのコード解説
簡単に、コードの解説をしましょう。
Option Explicit
Sub color_strikethrough_cell()
'変数宣言
Dim cell As Range
'選択されたセルひとつひとつに対して判定処理を実施。
For Each cell In Selection ' --- ①-1
If cell.Font.Strikethrough = True Then ' --- ②-1
cell.Interior.Color = 255
ElseIf cell.Font.Strikethrough = False Then ' --- ②-2
'Null
Else ' --- ②-3
cell.Interior.Color = 65535
End If
Next cell ' --- ①-2
End Sub
①-1と①-2でFor Each〜Nextループを行なっています。
Selectionというのが選択されたセル範囲を指しており、その中から1セルずつ取り出してcellという変数に格納しています。そして、変数cellに格納された1つ1つのセルに対して、①-1〜①-2に書かれている処理を実行しています。
②-1〜②-3では、Strikethroughというプロパティの中身を確認しています。
これは、取消線がついているかどうかという情報を保持するプロパティであり、取消線の状況に応じて以下のような値になります。
セル全体に取消線がついていない場合:False
セルの一部に取消線がついている場合:Null
セル全体に取消線がついている場合:True
②-1〜②-3で条件分岐を行い、Strikethroughの値に従って背景色をつける処理が書かれています。
取消線があるセルの一覧を別シートに出力する方法
次に取り上げるのは、取消線があるセルの一覧を別シートに出力する方法です。
VBAのコード
まずは、使用するVBAのコードを示します。
Option Explicit
Sub output_strikethrough_cell()
'選択されているのがセル以外の場合は処理を行わない。
If TypeName(Selection) <> "Range" Then ' --- ③
MsgBox ("セルを選択して実行してください")
Exit Sub
End If
'変数宣言
Dim cell As Range
Dim selected_cells As Range
Dim i As Integer
Dim result_sheet As Worksheet
'選択されたセルを退避する。
Set selected_cells = Selection ' --- ④
'シートを作る。
Set result_sheet = Worksheets.Add ' --- ⑤
'変数初期化
i = 1
'選択されたセルひとつひとつに対して判定処理を実施。
For Each cell In selected_cells ' --- ①-1
If cell.Font.Strikethrough = True Then ' --- ②-1
result_sheet.Cells(i, 1).Value = cell.Address(False, False)
result_sheet.Cells(i, 2).Value = cell.Value
result_sheet.Cells(i, 3).Value = "全体"
i = i + 1
ElseIf cell.Font.Strikethrough = False Then ' --- ②-2
'Null
Else ' --- ②-3
result_sheet.Cells(i, 1).Value = cell.Address(False, False)
result_sheet.Cells(i, 2).Value = cell.Value
result_sheet.Cells(i, 3).Value = "一部"
i = i + 1
End If
Next cell ' --- ①-2
End Sub
VBAのコードを使用してマクロを作成する方法
取消線があるセルに色をつける方法と同様ですので、「取消線があるセルに色をつける方法」の「VBAのコードを使用してマクロを作成する方法」を参照してください。
マクロの使用方法
こちらも同じく取消線があるセルに色をつける方法と同様です。「取消線があるセルに色をつける方法」の「マクロの使用方法」を参照してください。
なお、実行するマクロの名称は「output_strikethrough_cell」になります。
また、実行すると、新しいシートが作成され、以下のような結果が出力されます。
(参考)VBAのコード解説
Option Explicit
Sub output_strikethrough_cell()
'選択されているのがセル以外の場合は処理を行わない。
If TypeName(Selection) <> "Range" Then ' --- ③
MsgBox ("セルを選択して実行してください")
Exit Sub
End If
'変数宣言
Dim cell As Range
Dim selected_cells As Range
Dim i As Integer
Dim result_sheet As Worksheet
'選択されたセルを退避する。
Set selected_cells = Selection ' --- ④
'シートを作る。
Set result_sheet = Worksheets.Add ' --- ⑤
'変数初期化
i = 1
'選択されたセルひとつひとつに対して判定処理を実施。
For Each cell In selected_cells ' --- ①-1
If cell.Font.Strikethrough = True Then ' --- ②-1
result_sheet.Cells(i, 1).Value = cell.Address(False, False)
result_sheet.Cells(i, 2).Value = cell.Value
result_sheet.Cells(i, 3).Value = "全体"
i = i + 1
ElseIf cell.Font.Strikethrough = False Then ' --- ②-2
'Null
Else ' --- ②-3
result_sheet.Cells(i, 1).Value = cell.Address(False, False)
result_sheet.Cells(i, 2).Value = cell.Value
result_sheet.Cells(i, 3).Value = "一部"
i = i + 1
End If
Next cell ' --- ①-2
End Sub
①-1〜①-2で選択されたセルひとつひとつに対してループ処理をしていること、そして、②-1〜②-3でStrikethroughというプロパティに基づいて判定処理をしていることは、「取消線があるセルに色をつける方法」と同様です。
③の処理では、現在選択されているのがセルかどうかを判定し、セル以外の場合は処理を終了するように制御しています。Excelでは、セル以外にも、オブジェクトやイメージなどを選択される可能性があるので、そのような場合に想定外の動きをしないよう③の処理を入れています。
④ではSelection(=選択されたセル範囲)を別の変数「selected_cells」に退避しています。これは⑤で新しくワークシートを作成した際に、Selection(=選択されたセル範囲)が新しいシートのセルに切り替わってしまい、その結果、元々選択していたセルを参照できなくなってしまうためです。
「取消線があるセルに色をつける方法」と同じようにFor EachループをSelectionに対して実施してしまうと、元々選択されていたセルではなく、新しいシートのセルに対して処理が行われてしまいます。ですので、For Each文では「selected_cells」に対して処理を行うように記載しています。
おわりに
この記事では、取消線が付けられているセルを簡単に識別できるようにする方法を2つ紹介いたしました。
通常の検索機能では対象とならないセルについても、VBAを使用することによって簡単に探せるようになります。
今回は取消線がついたセルを題材にしましたが、他にも、背景色がついたセルやフォントサイズが他と違うセルなど、いろいろな応用が可能な方法です。
ぜひ、ご自身の作業効率化+スキルアップに役立ててみたください。