アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2000を使っています。
VBAでセル内に取り消し線が引いてある所の行を削除したいのですが
取り消し線を引いてあるセルを検出するコードがわかりません。
 どなたかわかりましたら、教えてください。

A 回答 (2件)

実際に取り消し線を引いたり消したりする動作をマクロ記録してみてください。


その記録されたコードにヒント(正解?)が書いてあります。
    • good
    • 2

こんなのではどうでしょうか?



その前に、質問についてですが・・・
>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
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!