dポイントプレゼントキャンペーン実施中!

指定した範囲で、条件付き書式を使って赤くしたセルをVBAで削除して上方向にシフトさせたいのですが、
ネットに落ちている情報などを頼りに作ったものの正常に動作しません。

修正していただけると幸いです、初心者の為できればどの部分が間違っていたかお教え頂けたらと思います。
ご協力よろしくお願いいたします。

SUb 赤消す()
Dim Rng As Range

For Each Rng In Range("A1:H30").Select
If Rng.interior.ColorIndex=3 Then Rng.Slection.Delete:=xlup
Next
End Sub

A 回答 (3件)

こんにちは!



条件付き書式で色付けさえれている場合、お示しのコードでは反応しないと思います。
(手動で色付けであれば大丈夫)

Excel2010以降をお使いだと条件付き書式にも対応できる「DisplayFormatオブジェクト」があります。
一例です。

Sub Sample1()
 Dim c As Range, myRng As Range
  For Each c In Range("A1:H30")
   If c.DisplayFormat.Interior.ColorIndex = 3 Then
    If myRng Is Nothing Then
     Set myRng = c
    Else
     Set myRng = Union(myRng, c)
    End If
   End If
  Next c
   If Not myRng Is Nothing Then '//←念のため//
    myRng.Delete shift:=xlUp
   End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました❗無事にファイルが作成できました。

お礼日時:2019/09/30 12:19

今のExcelは楽に出来るのですね。



お古だと『セルの塗りつぶしによる色の判定』と『条件付き書式によって塗られた色の判定』は違うものでした。
条件付き書式の結果を判定させる場合は、その条件が成立する『値・数式』などで判定してましたね。
なので『目的のセルの色』は判定条件に入らず面倒くさいものでした。

確か昔そんな質問を別サイトで見かけたのですが、10年も前なので見つからなかった・・・
    • good
    • 0

こうですね。


SelectやSelectionは不要です。
Deleteにおける xlUp は Shift の値として指定します

Sub 赤消す()
  Dim Rng As Range

  For Each Rng In Range("A1:H30")
    If Rng.Interior.ColorIndex = 3 Then
      Rng.Delete shift:=xlUp
    End If
  Next

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます、勉強になりました。また宜しくお願いします!

お礼日時:2019/09/30 12:20

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A