Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
作成済の条件書式を変更したにも関わらず希望する結果が得られません・・。
投稿日時: 18/11/19 23:57:25
投稿者: FANTA66

いつも参考にさせていただいてます。
 
先日「同一の列内の重複したデータを素早く見つけ出したい」という質問をいたしました。
そして、simple 様。WinArrow 様。お二人様のおかげでコードの事も少しばかり理解ができて
以下のコード表記で目的が達成できたのですが・・・、
事情が変わり、「重複を確認⇒色をつける範囲」を変える必要が出てきたため、
以下のコードの列を"C8"から"C9"へ変更しました。
 
新たに"C9"の列で重複データを探し出してくれ結果は良好なのですが、
なぜか、元々設定をしていた"C8"でも同様に重複を探し出してしまいます。
試しにほかの列で試したのですが、同様に重複を検出してしまいます。
今では試した結果、四か所で重複確認をしてしまい処理結果を得られるまでの
時間が増えてしまいました。
 
以下がそのコードです。
 
Sub 会員番号の重複データに色を付ける条件付き書式()
    Worksheets("Sheet1").Activate
     
    Dim rng As Range, uv As UniqueValues
        Set rng = Range("C8", Range("C8").End(xlDown))
        Set uv = rng.FormatConditions.AddUniqueValues
            uv.DupeUnique = xlDuplicate
            '条件付き書式で会員番号が重複した場合に会員番号に色付けをする。
            uv.Font.ColorIndex = 26
End Sub
 
私は初心者なのでこんな質問で申し訳ございません。
どうかよろしくご教授をお願い申し上げます。
 
 
 

回答
投稿日時: 18/11/20 09:32:28
投稿者: WinArrow
投稿者のウェブサイトに移動

条件付き書式をmacroで再設定する場合は、
設定されている範囲(オブジェクト)で、削除する方が安全です。

回答
投稿日時: 18/11/20 14:07:26
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示してあるコードから推察すると
元々の「重複」という意味が
セルC8〜Cxxの範囲内で「重複」している
というように解釈できます。
 
ですから
セル範囲の先頭セルが「C8」だろうと「C9」だろうと
「重複」はおなじ場所になります。
しかも同じ文字色になります。
 
しかし、
>新たに"C9"の列
という意味がよくわかりません。
 
ひょっとすると
セルC8と重複するセルと
セルC9と重複するセル
を別々に認識したいということなのかな?
もし、そのようなことでしたら、
条件付き書式の条件式が全く変わってきますが・・・・
 
 

投稿日時: 18/11/20 15:43:26
投稿者: FANTA66

WinArrow様。
いつも早々にご回答をくださいましてありがとうございます。
 
まず、ごめんなさい。自分で書いた質問に誤りがありました。
目的は、【ひとつの商品に同じ人の申込がある場合に注意を促す】というのが目的です。
また、ご指摘の通り、C8からCxxの列の範囲内で重複を確認したいと考えてます。
 
あらためまして状況を以下に書きます。コードは以前の質問を参照ください。
 
先日、教えていただいた
Set rng = Range("C8", Range("C8").End(xlDown))の部分にある二箇所のセルを
"C8"を"D8"への置き換えしました。
結果、"D8"の列で重複が確認できるようになりました。
しかしながら、"C8"でも列の重複を確認していて、結果としては、
"C列"と"D列"のそれぞれで同じように重複を探しにいってしまってます。
 
さらに、試しに「氏名」のセル"E8"に対象セルを変更しても、
"C列"、"D列"、そして「氏名」の"E列"の三箇所で同様になってしまいました。
 
 
あらためまして、以上のような状況でございます。
ほかに同様のコードはありません。素人といたしましては
何がどうなっているのか・・・。という状態です。
 
大変申し訳ございませんでした。あらためましてよろしくお願い申し上げます。
 
 
 

回答
投稿日時: 18/11/20 16:30:31
投稿者: WinArrow
投稿者のウェブサイトに移動

状況を正しく説明していますか?
 
>作成済の条件書式を変更したに
 
この説明は、すでに設定されている条件付き書式を変更した
と解釈します。
 
あなたの説明では、
新しく、D列(D8〜Dxx)に「C8〜Cxx」と同じ条件付き書式を設定したい
と読むことができます。
つまり、C8〜Cxxに設定してある条件付き書式は、
「そのまま」というように解釈してよいのか?
C8〜Cxxには、何も設定されていないのか?
 
そのあたりをきちんと説明してください。

回答
投稿日時: 18/11/20 16:41:22
投稿者: Suzu

ご自身の提示されているコードは、
 
条件付き書式の 条件 及び 条件に合致した場合の書式 を 追加 する
命令です。
条件付き書式 を 編集 するコマンドではありません。
ですのでマクロを実行する度に、条件付き書式が追加されます。
 
セルに複数の条件付き書式が設定されていた場合、編集する為には、編集対象となる
条件付き書式を探し出す事が必要となり、とても面倒です。
 
ですので、WinArrow さん は、18/11/20 09:32:28 に

引用:
条件付き書式をmacroで再設定する場合は、
設定されている範囲(オブジェクト)で、削除する方が安全です。

と仰っています。
 
手動で、「ホーム」-スタイルの「条件付き書式」-「ルールの管理」で【条件付き書式の管理】が表示されます。
 
その中に、複数の条件式があるのではありませんか?

投稿日時: 18/11/20 16:50:15
投稿者: FANTA66

何度もわかりにくくてすみません。
 
どのように説明申し上げるのが良いのか・・。文才がなく大変申し訳ございません。
元々、C8〜Cxxに設定してうまく動作している条件付き書式は取り止めです。
代わりにD8〜Dxxだけで重複の処理をしたいと考えております。
そのときに、同じコードのセル部分だけ入換をしたのですが、
結果として、消したはずのC8〜Cxxの設定を残したまま、
新たに設定したD8〜Dxxの両方とも設定が出来上がってしまうのです。
 
どうぞよろしくお願い申し上げます。

回答
投稿日時: 18/11/20 17:34:27
投稿者: WinArrow
投稿者のウェブサイトに移動

>結果として、消したはずのC8〜Cxxの設定を残したまま、
この説明おかしくない?
 
消したはずの「C8〜Cxx」に残っていて、
 
では?
 
どのような方法で消したのですか?
どのような方法で、「消えている」ことを確認しましたか?

回答
投稿日時: 18/11/20 18:17:32
投稿者: WinArrow
投稿者のウェブサイトに移動

条件付き書式を削除するコードの例
 
方法1
 
ジャンプ機能で条件付き書式が設定されているセルを選択し、
選択されているセルに設定されている条件付き書式を削除する処理
 
    ActiveCell.SpecialCells(xlCellTypeAllFormatConditions).Select
    Selection.FormatConditions.Delete
 
 
方法2
シート全体を対象に条件付き書式を削除する処理
    ActiveSheet.Cells.FormatConditions.Delete
 

投稿日時: 18/11/20 18:17:55
投稿者: FANTA66

皆様。よくわかりました!!本当にありがとうございました!!!!
 
誠に申し訳ございません。
 
Suzu様に"手動で、「ホーム」-スタイルの「条件付き書式」-「ルールの管理」で【条件付き書式の管理】が表示されます。 "と教えていただき、さっそく確認してみたところ「条件の削除」ができました。
こういったところに残っているものとは思ってもいませんでした。
 
WinArrow 様に教えていただいた"条件付き書式をmacroで再設定する場合は、
 設定されている範囲(オブジェクト)で、削除する方が安全です。 "という部分の意味が
全く理解できていませんでした。
 
皆様、本当にありがとうございました。
以前にもご指摘いただいたコードの意味をもっと勉強してゆきたいと思います。
 
またよろしくお願い申し上げます。