- ベストアンサー
エクセルの取り消し線を検出するコード
エクセル2000を使っています。 VBAでセル内に取り消し線が引いてある所の行を削除したいのですが 取り消し線を引いてあるセルを検出するコードがわかりません。 どなたかわかりましたら、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際に取り消し線を引いたり消したりする動作をマクロ記録してみてください。 その記録されたコードにヒント(正解?)が書いてあります。
その他の回答 (1)
- fumufumu_2006
- ベストアンサー率66% (163/245)
こんなのではどうでしょうか? その前に、質問についてですが・・・ >VBAでセル内に取り消し線が引いてある所の行を削除したいのですが これは「取り消し線が引いてあるセルがある行は削除する」という意味でしょうか? 取り消し線はセルに対して設定されるので、行に対しては「ない」「ある」「一部のセルにはある」の3種類になります。 また、「削除する」は「その行を削除する」と「その行を空白行にする」がありますが、「削除する」でいいのでしょうか? 以下は「取り消し線のあるセルを含む行は削除する」という設定です。 まず「あるセルに取り消し線が設定されているかどうか」はわかるけど、直接「取り消し線を引いてあるセルを検出する」方法は(たぶん)無いと思います。 で、行単位に調べて、取り消し線が引いてあるセルを含む行を削除します。 取り消し線の有無は、セルの場合は、Font.StrikethroughがTrueかFalseかでわかります。 これを行に対して行うと、試してみた結果、一部のセルだけTrueの場合はNullを返しました。 また、調べる都度に削除する場合は、下の行から削除しないと、調べている行や最終行が途中で変わってしまいます。 Sub sample() Dim r As Long Dim ws As Worksheet Set ws = Sheets("Sheet1") '対象シート 'UsedRangeの行単位に調べる(下から) For r = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1 To ws.UsedRange.Row Step -1 '一部のセルに取り消し線がある場合はnullを返す(試してみた結果から)ので、trueとnullの場合は削除対象 If IsNull(ws.Rows(r).Font.Strikethrough) Or (ws.Rows(r).Font.Strikethrough = True) Then ws.Rows(r).Delete shift:=xlUp End If Next End Sub