• ベストアンサー

エクセルの取り消し線を検出するコード

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

質問者が選んだベストアンサー

  • ベストアンサー
  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

実際に取り消し線を引いたり消したりする動作をマクロ記録してみてください。 その記録されたコードにヒント(正解?)が書いてあります。

その他の回答 (1)

回答No.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

関連するQ&A

  • エクセルの取り消し線が引けない!!

    いくつかのセルをドラッグして(列ごと、行ごとに一括でという感じです)取り消し線を引こうとしたのですが、一つのセルだけ取り消し線ができなかったので、その一つのセルだけ「セルの書式設定」で確認したところ、「取り消し線」のチェックボックスにはちゃんとチェックがついてるんです。でも表示は取り消し線が入ってないんです。どうしてでしょうか?どうしたら取り消し線をつけることができるでしょうか。 ちなみに、そのセルの文字は数字のみです。かなは一切ありません。

  • Excel VBA 文字列の一部の取り消し線の判別

    ExcelのVBAでセルの中の文字列の一部に 取り消し線があるかどうかを知るにはどのように記述すればよいでしょうか。 例えば、A1セルの中にAAA,BBB,CCCと入力されていて BBBにだけ文字飾りの取り消し線が設定されているような場合、 以下のコードではELSEになってしまいます。 If ThisWorkbook.Sheets("Sheet1").Range("A1").Font.Strikethrough = True Then MsgBox ("このセルには取り消し線があります") Else MsgBox ("このセルには取り消し線はありません") End If

  • Excel 2007 VBAについて質問します。

    Excel VBAの初心者です。 行の非表示と表示についてお聞きしたいのです。 ExcelのSheet1の1行目(1行全体)のみを、シート上のセルをWクリックをして 非表示にしたり表示させたりするのには、どの様なコードを書いたらいいでしょうか? VBA初心者の為、分かりやすい回答をお願いします。

  • エクセルで1行目が空白の場合、列を削除したい

    こんにちは!質問をお願いします。 エクセルで表を作成していますが、1行目が空白のセルがある場合に、その列を削除したいのですが、VBAでどのようなコードにすればよいでしょうか? ※上記のD列を削除し左詰めにしたい。(空白セルはAからBBまでの間で、特定の位置以降で発生します。) ※ちなみに1行目には、=N というようにほかのセルを参照し、文字の入力があれば表示するようにしています。 初心者につき、うまく説明できていないかもしれませんが、よろしくお願いいたします。

  • エクセルのCOUNTA関数について

    エクセルのCOUNTA関数について COUNTA関数の 文字列に 取り消し線を入れたセルを、無視するようにしたいです。VBAによる標準モジュールのコードを教えてください。質問番号:3526540に似ています。質問番号:3526540は、SUMの場合でした、COUNTAでのコードを教えてください。

  • エクセル VBAコードの書き方を教えてください。

    エクセル VBAコードの書き方を教えてください。 今回は、VBAで掛け算をしたいのですが、 コードが間違っているためか実行ができません。 VBAコードのどこに不備があるか教えてください。 <条件> *最終行(H列で判断)を選択し、  I2(2行、I列)~I最終行(最終行,最終行のI列)までの  範囲を計算したい。 *たとえば、I2であれば、F2×G2×H2×0.01の値を代入したい。  I最終行であれば、F最終行×G最終行×H最終行×0.01の値 EX) 添付ファイルの場合、I2=500、I4=125、にしたい。 <参考> Sub SURYO() Dim r As Long With Sheets("Sheet1") For r = 2 Cells(r,9).value = Cells(r,6) * Cells(r,7) * Cells(r,8) Next End With End Sub よろしくお願いします。

  • エクセルで

    アクティブ・セルの行の色を変える(どのセルを選んでも、選んだ瞬間にその行の色を変える)には、VBAでマクロを組むしかありませんか??エクセルの機能だけでは無理でしょうか?マクロを組むとしたら、どんな感じになるのでしょう?

  • エクセル非表示VBA

    こんばんわ。 エクセル初心者で勉強中です。 今下記画像のようなデータをエクセル2007で作成しています。 データは2行目から1000行目位まであるとします。 そこで質問なのですが、黄色の行のように その行のすべてのセルの値が空白の場合、行を 非表示にしていくコードはあるのでしょうか。 現在目視で非表示にしているので、できればVBAで素早くしたいのですが。 よろしくお願いします。

  • ワードの表から値を取得するマクロコードは

    ワードVBA初心者です。ワードのドキュメントの表から指定のセルの値を取得するコードを教えてください。エクセルならばX=Cells(1,2).Valueで1行2列のセルの値が取得できますが。ご教授宜しくお願いいたします。

  • エクセル2003で取り消し線を自動で付けたい

    エクセル2003で セルA1に文字列を入力したら セルB1からB10、C1からC10までの中から A1の文字列と同じ文字列に取り消し線が自動で付くようにたいのですが どのような方法があるでしょうか?