
VBAビギナーのmaruです
Excel2010のワークシート上の範囲(Range(”E12:K120“))内の
各セルに条件付き書式(複数あり)にてフォント色を赤く(RGB 255,0,0)
変更したセル内のデータ(数字)のみ削除(””)するVBAを行いたいのですが
以下のコードでは、「セルの書式」で設定したフォント色で削除されてしまい
条件付き書式で変更された赤文字に反映されません
ご教授お願い致します
Private Sub CommandButton4_Click()
'データ入力セル内の赤文字の削除
Dim rd As Range
For Each rd In Range("E12:K120")
For i = 1 To rd.FormatConditions.Count
If rd.FormatConditions(i).Font.Color = RGB(255, 0, 0) Then
rd.Value = ""
End If
Next
Next
End Sub
以上、宜しくお願い致します
No.7ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
VBAで条件付き書式のフォント色を調べる → 指定色の場合データを消去
という操作は
条件付き書式の条件を当てはめて、該当する場合にデータ消去!
という方法が一般的だと思いますが、
Excel2010からは
「DisplayFormatオブジェクト 」
というものが追加されているようですので、
見た目のフォント色(セル色)で区別ができるようです。
Sub Sample1()
Dim c As Range
For Each c In Range("E12:K120")
If c.DisplayFormat.Font.Color = RGB(255, 0, 0) Then
c.ClearContents
End If
Next c
End Sub
としてみてはどうでしょうか?m(_ _)m
この回答への補足
tomo04さん 回答ありがとうございます
見た目のフォント色で操作できると実現できるかもしれないです
本日は作業できない環境なので、明日試してみます
tom04さん 回答ありがとうございました。
条件付き書式で黒色→赤色に変更された文字のみ選択して
削除できました!
回答して頂いたすべての皆様に感謝致します!
これでエラーの減少および作業の効率化が図れそうです
(PCに使われる側から、僅かですがPCを使う側になれそうです)
ありがとうございました。
No.8
- 回答日時:
No.6 です。
No.7 さんの DisplayFormat オブジェクトが良さそうですね。当初の方針どおり、設定済みの条件付き書式を利用して対象セルを特定するという場合は。
手元に試せる環境がないのですが、問題ないようでしたら、回答 No.6 よりも No.7 を優先してください。条件によらないセルの書式で赤字に設定している箇所は、ないというお話でしたね?ある場合は、そのセルの値まで消えてしまうかもしれませんね。
これは動詞の display ではなく、名詞の display のようですね。画面での表示状態を表すオブジェクトということのようです。
No.6
- 回答日時:
No.3 です。
>当方のコードでは、各セルに設定した条件付き書式のルールに文字色を赤くする設定があるセルのみが、削除されることが分かりました
そのとおりです。
>以下のコードでは、「セルの書式」で設定したフォント色で削除されてしまい条件付き書式で変更された赤文字に反映されません
>文字色が、条件に合わないセル(赤文字以外)も前記設定があると削除されてしまい……
「『条件』に合わないのに『設定』があると削除されてしまう」とは、条件付き書式の条件式に適合する(TRUE である)セルのみ値を削除したいのに、FALSE、つまり変色していないが条件付き書式が設定されているセルまで消えるというのは、望んでいない動作だという意味ですか?
お示しのコードでは処理(値を消すこと)の対象とするセルを、条件付き書式のフォントの色「のみ」で特定しています。したがって当然、TRUE か FALSE かは、処理の結果に全く影響しません。
ということは、両者を区別するには、基本的には対象セルを絞り込む条件をもう少し追記してあげればいいということになります。
ただ、一口に条件付き書式と言っても、指定の値を含む…とか上位または…とか、いろいろ種類があるので、それによって取るべき対応も変わってきそうです。
下のコードは、文字色として RGB(255, 0, 0) を指定してあり、なおかつ条件式(論理式)を条件とする書式の場合です。
通常、「コード内においても条件付き書式の条件式と同様の手続をなぞって場合分けをする」ことで、各セルを処理するというほうが普通の方法かもしれません。ただ条件付き書式(FormatCondition オブジェクト)から条件式を取得して処理に利用するということも一応は不可能でないことを示す意味で、下に載せます。ですから、お勧めという意味ではありません。
また、条件式に相対参照が含まれ、複数のセルを含む範囲に 1 つの条件式を設定している場合は、アクティブセルの位置によって、適切にアドレスを Offset させてあげなければならないといった問題もあります。「=a1=3」という条件式があって、先にマクロで A1 セルに記入されていた「3」が消えると、同一の条件で書式を指定していた B1 では「=b1=3」ではなく「=a1=3」で判定されてしまうことによって値が消えない…といった現象です。話がどんどん複雑になるので、下のコードではその対応は省きます。
Private Sub CommandButton1_Click()
Dim rd As Range, i As Integer
For Each rd In Range("E12:K120")
For i = 1 To rd.FormatConditions.Count
With rd.FormatConditions(i)
If (.Font.Color = RGB(255, 0, 0)) * Evaluate(.Formula1) Then rd.ClearContents
End With
Next i
Next rd
End Sub
この回答への補足
MarcoRossiItalyさん、何度も回答ありがとうございます
説明不足ですみません
もっと簡単な方法があるはずですが、現在のスキルでは以下の仕様です
各年度の日別データを集計するシートを作成しております
1.1シートに1月分のデータを集計
2.1月分のデータは、各曜日ごとに集計
3.各曜日ごとの各作業員(常勤7名、非常勤2名)の作業結果(整数)を集計
ここで各年の祝祭日、各曜日の作業員の出欠に合わせ、本来「空欄」のはずの
セルに間違って入力された数字をエラーチェックするため、条件付書式で赤色字に
変更する設定をしております
(範囲内の全セルに、すべて条件付書式にて赤色字変更の設定をしました)
条件付書式の内容は(日付、曜日関数等を利用して「一致した場合」に変更します)、例えば、
A作業員は、毎火、土、日曜が休みなので、その日の曜日が、火、土、日曜なら赤色文字に
B作業員は、毎水もしくは木曜のみ勤務なので、その日の曜日が水、木以外なら赤色文字に
各作業員の休暇取得時は、その作業員名が消える設定で、その様な日の入力は赤色文字に
よって当方のコードを実施すると全セルのデータが削除されてしまいます
(当初は、「セルの設定」と思っていましたが、間違いです)
土日は作業できない環境なので、来週試してみます
お時間あれば再度宜しくお願い致します
No.5
- 回答日時:
提示コードの問題は、
「条件を満たすかどうかチェックせずに、書式の設定のみで判断しようとしている」点です。
rd.FormatConditions(i).Font.Color を見てますが、
「条件を満たせば赤」という設定であれば、ここには「赤」が設定されています。
条件を満たすかどうか、条件式を評価しなければなりません。
Formula1プロパティなどがこれにあたります。
ただ、
ver2003までは、この条件式を評価して判断する事ができましたが、
2007以降は仕様変更のため、この作業はかなり煩雑になります。
例えば
Dim r As Range
Dim f As FormatCondition
For Each r In Range("E10:K120")
For Each f In r.FormatConditions
Debug.Print r.Address, f.Formula1, f.Font.Color
Next
Next
こんなコードを実行し、
f.Formula1 の式を評価する事で条件を満たしている事を判断できるか、確認してみてください。
対象セルが違うのに、f.Formula1のアドレスに変化がなかったりする場合は、相対関係が正しく捉えられません。
>..ご指摘の
>部分を当環境に合わせ、変更しながら実施しておりますが、
>エラーが生じております、..
どう変更して、どこでどのようなエラーが出ているのか提示があれば
追加でアドバイスもできるかもしれません。
ただ、「条件付き書式」以外で、手動で「赤」に設定したセルがあると
結果としての書式のみでは判断できませんよね。
別のアプローチが必要になります。
>エラーチェックとして条件付き書式を設定し、文字色が赤くなったセルをエラーデータ
>として削除します
エラーチェックのロジックが事前にわかっているのなら、
このチェックを行うコードをVBAで書けば良いです。
必要なら一次チェックでフォントを赤にして、
確認メッセージを出した後削除するとか。
「条件付き書式」にこだわらなくてもよいかと。
この回答への補足
end-uさん 何度も回答ありがとうございます
時間がなく、エラーの詳細を失念しました
デバックウィンドウで確か「Objectのエラー」が出ていたと思います
土日は作業できない環境なので、来週詳細をチェックします
お時間あれば再度宜しくお願い致します
No.4
- 回答日時:
質問です。
その範囲の中に「条件付書式で設定したわけではない」のに、赤い文字はあるんでしょうか。
ないのなら、フォントの赤で条件を絞って消しても良いかと思います。
この回答への補足
TAKA_Rさん 回答ありがとうございます
設定した範囲内のデータは、以下の3種類のみです
1.黒文字(自動設定でRGB(0,0,0))の数字(正の整数)
2.条件付書式で赤文字となった数字(正の整数)
3.空
ご指摘の方法を試すと(以下のコード)、
条件付書式で赤文字となったセル内の数字は、赤色(RGB255,0,0)と認識されないようで
ディスプレイ上では赤文字に変更されているのですが、削除できません
Dim rd As Range
For Each rd In Range("E12:K120")
If rd.Font.Color = RGB(255, 0, 0) Then
rd.Value = ""
End If
Next
No.3
- 回答日時:
お示しのコードに大きな問題はないように思います。
次の 3 点を確認してみてください。●開発タブのデザインモードがオンになっている場合は、オフにしてから再度、コマンドボタンをクリック。
● Font と Interior プロパティを錯覚していないか。
● VBE で「ツール > オプション > 変数の宣言を強制する」(Option Explicit)をチェックしている(お勧め)という場合は、変数 i の宣言文を入れてください。
この回答への補足
MarcoRossiItalyさん、回答ありがとうございます
●開発タブのデザインモードがオンになっている場合は、オフにしてから再度、コマンドボタンをクリック。
#何度も試しましたが、効果ありません
● Font と Interior プロパティを錯覚していないか。
#確かに文字色です(背景色ではありません)
● VBE で「ツール > オプション > 変数の宣言を強制する」(Option Explicit)をチェックしている
(お勧め)という場合は、変数 i の宣言文を入れてください。
#変数iを宣言しましたが、効果ありません
当方のコードでは、各セルに設定した条件付き書式のルールに文字色を赤くする設定が
あるセルのみが、削除されることが分かりました
よって
文字色が、条件に合わないセル(赤文字以外)も前記設定があると削除されてしまい
解決しておりません
No.2
- 回答日時:
'-----------------------------------------------------------
'【ver2007以降】
Sub test() 'ActiveSheetに対して処理。
Dim ws As Worksheet
Dim tmp As String
Dim buf As String
Dim n As Long
Dim r As Range
Dim ri As Range
Application.ScreenUpdating = False
'作業用mhtファイル名を設定。 _
同名既存ファイルがあれば上書きするので注意。
tmp = Application.DefaultFilePath & "\temp.mht"
Set ws = ActiveSheet
ActiveWorkbook.PublishObjects.Add( _
xlSourceSheet, tmp, _
ws.Name, "", _
xlHtmlStatic).Publish True
'Format検索
With Application.FindFormat
.Clear
.Font.Color = vbRed
End With
With Workbooks.Open(tmp)
With .Sheets(1).Range("E12:K120")
'対象セルを"#n/a"に変換してまとめて取得してるので _
直値のエラー表示がある場合は別の手法を。
.Replace What:="*", _
Replacement:="#n/a", _
LookAt:=xlPart, _
SearchFormat:=True
On Error Resume Next
Set r = .SpecialCells(xlCellTypeConstants, xlErrors)
On Error GoTo 0
End With
If Not r Is Nothing Then
For Each ri In r
'VBEイミディエイトウィンドに対象セルアドレスを書き出し。 _
↓本番では必要なし。
Debug.Print ri.Address(0, 0)
'ws.Range(ri.Address).ClearContents '■この行を活かせば削除
Next
End If
.Close False
End With
'作業用mhtファイル削除。
Kill tmp
Set r = Nothing
Set ws = Nothing
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------
上記、昔書いた事があるコードを焼き直ししたものです。
mhtファイルに吐き出すと条件付き書式の結果が固定される事を利用してます。
>VBAビギナー..
だとちょっと厳しいかもしれませんが
内容を理解した上で活用できそうだったらどうぞ。
この回答への補足
end-uさん 回答ありがとうございます。
ビギナーなもので、end-uさんのコードを貼り付けご指摘の
部分を当環境に合わせ、変更しながら実施しておりますが、
エラーが生じております、今後も勉強しながら試して見ます
再度質問する際にも、宜しくお願い致します
No.1
- 回答日時:
その様な場合は、条件付き書式で色が付いているセルを削除するのではなく、どの様な条件を満足した場合に、その条件付き書式によって色が付くのかを調べて、その条件を満たしているセルを削除する様なVBAにされた方が良いと思います。
この回答への補足
kagakusukiさん 回答ありがとうございます。
エラーチェックとして条件付き書式を設定し、文字色が赤くなったセルをエラーデータ
として削除します マンパワーで削除できますが、自動化出来ればと思いコードを
ネットから流用して試してみました
当方のコードでは、各セルに設定した条件付き書式のルールに文字色を赤くする設定が
あるセルのみが、削除されることが分かりました
よって
文字色が、条件に合わないセル(赤文字以外)も前記設定があると削除されてしまい
解決しておりません
kagakusukiさんの仰るとおり、根本的に考え直さないと無理ですかね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
Excelで社歴管理をしており4年...
-
Excelで表を作り、自動で今月の...
-
ある倍数だけを塗りつぶす方法 ...
-
excel:条件付き書式の適用範囲...
-
エクセル 条件付書式で時刻の...
-
Excel2010 日付列を結合した予...
-
色のリンクは出来ますか?【エク...
-
エクセルの条件付き書式による...
-
EXCELで条件式を使ってセルを黒...
-
エクセルで
-
【Excel】ガントチャートの作成...
-
Excelの塗りつぶしの反映
-
左列の文字の色と同じ文字の色...
-
日付の書式なしコピーについて
-
未来の日付日欄を無色(空白)...
-
エクセルで毎年同じ月が来ると...
-
excel関数・網掛けの個数を数える
-
住所録で特定の県名を非表示に
-
vba 条件付き書式を一般書式に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セルを結合したA4とA5の条件付...
-
Excelで社歴管理をしており4年...
-
Excelで表を作り、自動で今月の...
-
ある倍数だけを塗りつぶす方法 ...
-
excel:条件付き書式の適用範囲...
-
色のリンクは出来ますか?【エク...
-
左列の文字の色と同じ文字の色...
-
エクセル 条件付書式で時刻の...
-
Excelの塗りつぶしの反映
-
スプレッドシートにて、条件付...
-
【Excel】ガントチャートの作成...
-
Excel2010 日付列を結合した予...
-
エクセルで
-
エクセルの小計のみに色をつけ...
-
条件付き書式のやり方。隣のセ...
-
エクセルの折られたセルを戻したい
-
条件付き書式設定で色をつけた...
-
excelの条件付き書式のルールに...
-
未来の日付日欄を無色(空白)...
-
Excelで、期限切れのリストが一...
おすすめ情報