• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel2010条件付き書式後にVBAにて処理)

Excel2010 条件付き書式後にVBAでデータ削除

MarcoRossiItalyの回答

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

maru5353
質問者

補足

MarcoRossiItalyさん、何度も回答ありがとうございます 説明不足ですみません もっと簡単な方法があるはずですが、現在のスキルでは以下の仕様です 各年度の日別データを集計するシートを作成しております  1.1シートに1月分のデータを集計  2.1月分のデータは、各曜日ごとに集計  3.各曜日ごとの各作業員(常勤7名、非常勤2名)の作業結果(整数)を集計 ここで各年の祝祭日、各曜日の作業員の出欠に合わせ、本来「空欄」のはずの セルに間違って入力された数字をエラーチェックするため、条件付書式で赤色字に 変更する設定をしております (範囲内の全セルに、すべて条件付書式にて赤色字変更の設定をしました) 条件付書式の内容は(日付、曜日関数等を利用して「一致した場合」に変更します)、例えば、   A作業員は、毎火、土、日曜が休みなので、その日の曜日が、火、土、日曜なら赤色文字に   B作業員は、毎水もしくは木曜のみ勤務なので、その日の曜日が水、木以外なら赤色文字に   各作業員の休暇取得時は、その作業員名が消える設定で、その様な日の入力は赤色文字に よって当方のコードを実施すると全セルのデータが削除されてしまいます (当初は、「セルの設定」と思っていましたが、間違いです) 土日は作業できない環境なので、来週試してみます お時間あれば再度宜しくお願い致します

関連するQ&A

  • Excel2003 VBAにて条件付き書式のマクロを書きたいのですが、

    Excel2003 VBAにて条件付き書式のマクロを書きたいのですが、どうも上手くいきません。 1列おき(C列、E列、G列・・・)に条件付き書式を設定し、 条件は、 ・セルの値が”0”より大きい場合はフォント”赤”で表示。 ・セルの値が”0”より小さい場合はフォント”緑”で表示。 としたいと思いマクロを組んでみました。 Sub Color() Dim j, j0 Dim x Worksheets("sheet1").Active Application.ScreenUpdating = False j0 = 3 j = 300 For x = 3 To 100 Step 2 Range(.Cells(j0, x), .Cells(j, x)).Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="0" Selection.FormatConditions(1).Font.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ Formula1:="0" Selection.FormatConditions(2).Font.ColorIndex = 10 Next Application.ScreenUpdating = True End Sub デバックでステップインしていくと、ここで実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。がでます。 Selection.FormatConditions(1).Font.ColorIndex = 3 -------------------------------------------------------------------------------------- Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="0" Selection.FormatConditions(1).Font.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ Formula1:="0" Selection.FormatConditions(2).Font.ColorIndex = 10 -------------------------------------------------------------------------------------- この間は、マクロの自動記録で書かれてるので間違ってはいないハズなのですが、、、 お知恵を下さい。 よろしくお願いします。

  • Excel2010のバグ?(条件つき書式)

    test1は、A~X列に数字と条件付き書式をセットするマクロですが、途中のセルから色化けします。 原因がお分かりの方はご教授ください。どうもExcel2010のバグのように思われます。 バグならMicrosoftのどこに報告あるいは問い合わせれば良いでしょうか。 Sub test1() Dim aRow As Long Dim aCol As Long With ActiveSheet For aRow = 1 To 3 For aCol = 1 To 25 .Cells(aRow, aCol).Value = aCol Call SetFormatConditionOfColor(aRow, aCol, "=1") Next Next End With End Sub Public Sub SetFormatConditionOfColor(ByVal aRow As Long, ByVal aCol As Long, ByVal aFormula As String) With ActiveSheet.Cells(aRow, aCol) .FormatConditions.Delete '一致するセル .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:=aFormula With .FormatConditions(1) .Font.Color = 0 .Interior.Color = 13434879 End With '一致しないセル .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _ Formula1:=aFormula With .FormatConditions(2) .Font.Color = 16777215 .Interior.Color = 16767843 End With End With End Sub OS: MS WindowsXP Professional Service Pack3 Excel: Microsoft Office Professional Plus 2010 14.0.5128.5000(32ビット)

  • VBAで条件付き書式の文字色

    下記のコードを、条件付き書式で変化した文字色によって作動させたいのですが、変化した赤字を認識せずに作動しません。 どこを修正したら良いでしょうか? Private Sub CommandButton1_Click() Dim cell As Range For Each cell In Range("L28,P28,T28,X28,AB28,AF28,AJ28,AN28,AV30,BC30,BG30,BK30,BO30,BS30,CE28") If cell.Font.ColorIndex = 3 Then ' 赤文字の場合 ユーザフォーム1.Show ' ユーザフォーム1を表示する Exit Sub End If Next cell Range("CI28").Value = "ok" ' セル"CI28"に"ok"を入力する End Sub

  • excel2000 条件付書式5つ

    A1~J10に100個の数値があり、 行ごとの1位~5位にそれぞれ書式を あたえます。 マクロの記録機能を使って1位~3位を。 その後別で4位・5位を記録し、くっつけて みました。 つけたい書式は 以下のマクロの通りのセルのパターン・フォントの色です。 以下は記録したものをくっつけてつくったマクロです。 動作しません。 Sub 条件付書式5つ() Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,1)" Selection.FormatConditions(1).Font.ColorIndex = 2 Selection.FormatConditions(1).Interior.ColorIndex = 1 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,2)" Selection.FormatConditions(2).Font.ColorIndex = 2 Selection.FormatConditions(2).Interior.ColorIndex = 16 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,3)" Selection.FormatConditions(3).Interior.ColorIndex = 15 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,4)" Selection.FormatConditions(4).Font.ColorIndex = 2 Selection.FormatConditions(4).Interior.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,5)" Selection.FormatConditions(5).Font.ColorIndex = xlAutomatic Selection.FormatConditions(5).Interior.ColorIndex = 38 End Sub 初心者のためどうしたらいいのかまったく わかりません。 どうぞお願いします。

  • VBAを使って条件付書式のセルを保護したい

    VBAを使って =A2<>0の条件付書式の入ったセルが 黒塗りのときをロックしたいと思い セルの状態を調べたいのですが FormatConditionsを使えばいいのかと想うのですが 使い方がイマイチわかりません。 たとえば 黒で塗りつぶしたセルを探そうと想ったときは locked_col = RGB(0, 0, 0) cell_col = Worksheets("Sheet1").Cells(j, i).Interior.Color 'セルが黒塗りの場合ロックする If Not cell_col = locked_col Then Cells(j, i).Locked = False End If っていう風にはできないのでしょうか? 知恵をおかしください

  • エクセルについてです。マウスで選択した範囲に、条件付き書式設定で80点

    エクセルについてです。マウスで選択した範囲に、条件付き書式設定で80点以上のセルの背景を赤にする、というマクロを作成したいと思います。選択する範囲は毎回異なります。以下のマクロはマクロの記録で作成したものです。このRangeの部分をマウスで選択した範囲に変更したいのですが、どうしたら良いのでしょうか?範囲の取得はマクロを実行して、途中で「マウスで範囲を指定してください」というメッセージを表示させてからにしたいのですが。 Sub 背景を赤() Range("B13:E19").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="=80" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With End Sub

  • VBAで条件付書式

    アクセス2003なのですが 「色を青にして太字に」するにはどうすればいいでしょうか? Sub 条件付書式() With Form_フォーム1.テキスト2 .ForeColor = RGB(255, 255, 255) With .FormatConditions .Delete .Add(acExpression, , "[テキスト2]=""青にする""").ForeColor = 16711680 '青 End With End With End Sub で青にはなるのですが 青なおかつ太字にするにはどうすればいいでしょうか? FontStyle プロパティを使うのでしょうか? 書き方を教えてください。

  • 条件付書式をVBAでセルに設定するときのルール

    図のような列があります。 C列にこだわっているわけではないのですが、その左側にある列で計算をしているという意味で、A、B列はあけただけです。 で、IF文で計算してある条件に合致するとC列で「TRUE」を表示し、合致していない場合はそのときの計算結果を表示させています(IF文的に正しくないので、計算したままの値が計算結果として表示される)。 この結果の見せ方として、これまではC列に「条件付書式」を手動で設定し、文字がTRUEのとき字を青くする表示にしていたのですが、同様の処理を行うExcel Bookファイルが多いため、VBAで条件書式を設定しようとし、次のような記述を実行しました。 すると、図のような結果になりました。 ---------------------------------------------- Sub TestSample() Dim i As Long i = 20 '実際には最終行はBookによって異なるので、 ’行末検索させせていますが、とりあえずここでは20としておきます。 With ActiveSheet Range(Cells(2, 3), Cells(i, 3)).Select With Selection     FormatConditions.Add Type:=xlTextString, String:="TRUE", _     TextOperator:=xlContains     .FormatConditions(1).Font.Color = RGB(0, 50, 255) ’ーーA     .FormatConditions(1).Interior.TintAndShade = 0   ’ーーB End With End With End Sub ---------------------------------------------- 質問が2つあります。 1. 背景がいわゆる「色なし」ではなく白くなっていますが、背景「色なし」かつ「罫線でかこむ」には、どのような記述をすればよいでしょうか 2. FormatConditions.Add Type:~~~~ につづく別の行(Aのところ)に「FormatConditions.」と記述すると実行できません。 マクロで条件書式の自動記録をやって参考にしたところ、添値のような(1)が記録されることに気が付き、それを真似して FormatConditions(1). としたところ、動作しました。 最初だけFormatConditionsで、なぜAのところはFormatConditions(1).となるのか、またAとBはどちらも「FormatConditions(1).」でダブっているのに処理上エラーを返さないのか、理屈がわかりません。 (1)がつく意味と、AとBはどちらも(1)で(ダブっても)動作するのか(逆にいえば、なぜ最初のFormatConditionsだけ、番号がついていないのか、たぶんデフォルトで(0)の意味?) について、このへんの仕組みの解説をよろしくお願いします。

  • 条件付き書式の計算式と適用先範囲

    通常のExcel操作による条件付き書式も同じなのですが、VBAで書いているときに疑問が出たので、VBAで質問させていただきます。 図のようにA列とB列の値を比較し、A列とB列の値が同じでない場合、つまり「A列-B列」の値が0でないセルに赤い色をつけることにしました。A列が正で、B列が違っている場合色をつける、という考えかたの処理です。 不思議なのは、手動で条件付き書式画面からやっても、下のコードのVBAでやっても「--A」のところのように、比較式を「"=$A2-$B2<>0"」と、2行目で行っているだけ(比較はここだけ)なのです。 しかし実行結果は、A列とB列の値が同じではない行すべてのB列に色がついています。 B列のセルの同じ行のA列と値が異なる場合、赤い色をセルにつけるのが目的なので、結果としてはこのコード(条件付き書式)は正しく動作しています。 質問は、比較式が「--A」のところ=2行目にしかないのに、なぜ3行目~20行目も同様の効果が効いているのでしょうか。 この挿入している効果は条件付き書式であるため、B列のセル上の値を左の行(A列)と合致させると、ちゃんと赤い色は消えてくれます。 この謎が解けません。 ---------------------- Sub 左列と異なる値は赤に() '条件書式を挿入 With ActiveSheet Range("B2:B20").Select With Selection .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$A2-$B2<>0" ' --A .FormatConditions(1).Interior.Color = RGB(255, 200, 200) End With Range("A1").Select End With End Sub

  • エクセルVBAでクリックしたセルのみ書式を変えたいのです。

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Row <= 11 And Target.Column <= 11 Then With Selection .Interior.ColorIndex = 3 .Font.ColorIndex = 2 .Font.Bold = True End With End If End Sub これで出来るのですが、問題は別のセルに移動しても書式は変ったままなのです。(当り前ですが) 書式を変えるのはあくまで選択されている間だけにしたいのです。 どのようにすればよいのでしょうか? エクセル97です。