人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です
エクセルでB列に2行目から6桁の英数文字が毎日追加されていきます
ABC123
BCD321
AB12CD
ABC123 ←赤く表示
過去に同じものがあれば(重複文字)追加された文字が赤く表示されるマクロをお願いします
よろしくお願いします

●質問者: inosisi
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Silvanus
●60ポイント ベストアンサー

このマクロは、データの追加・更新等の度に実行する必要は無く
対象となるワークシートに対して一度実行すればOK(な筈)です。

Option Explicit

Sub Inoshishi1352369175()

With Range("B3:B65535") ' A
 With .FormatConditions
 .Delete
 .Add Type:=xlExpression, Formula1:= _
 "=NOT(ISERROR(MATCH(RC,R2C:R[-1]C,0)))" ' B
 End With
 .FormatConditions(1).Font.Color = rgbRed
End With

End Sub

データの格納位置等に変更がある場合は、
上記コードの行末に「A」「B」という注釈がある行を変更します。
「A」の行にある"B3:B65535"の部分には
データ格納範囲から「先頭行を除いたもの」を指定して下さい。
つまり、この場合は「B2」を除き「B3」からにします。
最終行(ここでは65535)は、実際にデータ格納範囲が取り得る最小の
値にした方が良いですが、それ程パフォーマンスには影響しないと思います。
「B」の行にある"R2C"の数字の"2"は、データ格納範囲の先頭行を
表しています。この場合は「B2」なので「2」となります。


Silvanusさんのコメント
「対象となるワークシートに対して一度実行すればOK(な筈)」と書きましたが 対象となる範囲の条件付き書式を消去してしまう様な処理を施した場合は 話は別です。その場合は再度マクロを実行し直して下さい。

inosisiさんのコメント
ありがとうございました うまくいきました

inosisiさんのコメント
3行目が赤く表示されるのは対象データの始まりの意味でしょうか

inosisiさんのコメント
非常に価値ある回答をいただきました

Silvanusさんのコメント
3行目が必ず赤くなっちゃいますか!? あらら…orz、検証し直さないと!

Silvanusさんのコメント
自分でもう一度検証してみましたが3行目が赤くなることはありませんでした。 可能性として考えられるのは、既に他の方法で当該セルが赤色に設定されている ケースです。このマクロでは「条件付き書式」という機能を用いています。 特定の条件に該当した場合に、特定の書式を設定するというもので、 ここでは「上方に同じ内容のセルがあった場合、セルの文字を赤色にする」 条件付き書式を設定している訳ですが「上方に同じ内容のセルが無い場合は 黒色(or自動色)にリセットする」機能は付けていないのです。 よって、条件付き書式でなく普通に文字を赤色にする書式設定が 残っていれば、条件に合わなくても当然赤色になってしまいます。 これを回避するにはB列を予め黒色(or自動色)に書式設定いただければOKですが、 マクロに「黒色(or自動色)にリセットする」ルーティンを 実装した方が宜しいですか?

inosisiさんのコメント
いえ大丈夫です支障ない場所です B3をB2に変更すると色もB2に移動します

inosisiさんのコメント
質問ですが複数のsheetがある場合はどうなりますか 現在やりたい別ファイルのSheetを開いてマクロを実行しましたらうまくいったのですが sheet名を指定した方が良いのですか

inosisiさんのコメント
複数Sheetがある場合は該当するSheetにマクロ記述したほうが良いのでしょうか

Silvanusさんのコメント
複数のシートに記述する必要は全くありません。 いのししさんが二つ上のコメでお書きになっている通り、 処理を施したいシートを開いた状態で 当該のマクロを実行していただければ結構です。

inosisiさんのコメント
行数を指定できるのが良かったです

Silvanusさんのコメント
そう言っていただけて幸いです!

2 ● きゃづみぃ
●40ポイント
Private Sub Worksheet_Change(ByVal Target As Range)
 c = Target.Column
 Target.Font.ColorIndex = 0
 If c <> 2 Then Exit Sub
 b = Target.Value
 For a = 2 To Target.Row - 1
 If Cells(a, "B").Value = b Then
 Target.Font.ColorIndex = 3
 Exit Sub
 End If
 Next a
End Sub


該当シートに記述してください。


inosisiさんのコメント
ありがとうございました うまくいきました

inosisiさんのコメント
非常に価値ある回答をいただきました
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ