質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • Excel

    1404questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

Excel重複データのチェック

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 654

jal0994

score 10

エクセルで特定の列のセルにデータを入力した時に、同じ列内に重複データがある場合、
重複データの行の色を変えて、更に可能であれば、アラートで「●個目の重複データです」と表示させたいのですが、実現できなくて悩んでおります。

条件付き書式を使ったのですが、行全体の色を変えれませんでした。

もし解決策などございましたら、ご教示いただければと思います。


イメージ説明


メールアドレスのaaa@gmail.comを入力した瞬間に色が変わって、アラートで「●個目の重複データです」と表示

イメージ説明

②既に重複データがあるデータを登録する場合も同じ挙動

イメージ説明

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

ご要望の機能は関数だけでは難しいと思いますので、プログラムを作成しました。

これを使用すれば、ご要望の機能が実装されます。

[使いかた]
ご要望の機能が欲しいブックを開いた状態で、Alt + F11 キーを押下。
以下の画面が開きます。

VBE

左側の「プロジェクト -VBAProject」と記載されたところにて、ご要望の機能の機能を実装したいシートをダブルクリックします。
その後、右側のテキストエディタに下記のソースコードを貼り付けます。

ソースコード中に
「【TODO】 重複チェックを実施したい範囲に変更して下さい」
と記載された箇所がありますので、これはご自身の機能を実装したい列などを指定して下さい。

※わからないことがあれば引き続きコメント頂けたら回答させて頂きます。

' 変数宣言を強制(バグ防止のため)
Option Explicit

' 指定したセルの重複チェック(この関数はセルの値が変更される度に発火)
Private Sub Worksheet_Change(ByVal target As Range)

    ' 定数宣言
    ' 【TODO】 重複チェックを実施したい範囲に変更して下さい
    ' 例)B列の重複チェックをしたい場合は"B:B"
    Const TARGET_RANGE As String = "B:B"

    ' 変数宣言
    Dim vars As Range
    Dim var As Range
    Dim counter As Long
    Dim i As Long

    ' 変更されたセルが重複データチェック対象でない場合は処理終了
    If Intersect(target, Range(TARGET_RANGE)) Is Nothing Then
        Exit Sub
    End If

    ' チェック対象行を取得
    Set vars = Intersect(Columns(target.Column), Range(TARGET_RANGE))

    ' 重複データ数を初期化
    counter = 0

    ' 重複チェック対象を走査
    For i = vars.Cells(1).Row To GetLastRow(target)
        With vars.Cells(i, 1)
            If target.Text = .Text And target.Address <> .Address Then
                counter = counter + 1
                Rows(.Row).Interior.ColorIndex = 40
            End If
        End With
    Next

    ' 変更したセルの色を最新化
    If counter = 0 Then
        Rows(target.Row).Interior.ColorIndex = False
    Else
        counter = counter + 1
        Rows(target.Row).Interior.ColorIndex = 40
    End If

    ' メッセージ出力
    If counter <> 0 Then
        MsgBox counter & "個目の重複データです", vbExclamation + vbOKOnly, "警告"
    End If

End Sub

' 最終行取得
Private Function GetLastRow(ByRef pRange As Range) As Long
    GetLastRow = Cells(Columns(pRange.Column).Rows.Count, pRange.Column).End(xlUp).Row
End Function

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/24 18:12

    連絡が遅れてしまい、申し訳ございません。
    細かくプログラムを作成していただき、本当にありがとうございます。
    やはり実現させるにはプログラムを組むしかないんですね。
    記載していただいたプログラムで期待どおりの動きができたんで本当に助かりました!
    また機会がありましたら、ご教示いただければと思います。

    キャンセル

+1

条件付き書式設定で対処できます。

イメージ説明

条件書式設定で、「式を使用して、書式設定するセルを決定」を選択し、
下の様な式を入れれば、可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/24 18:17

    ご回答いただきありがとうございます。
    期待する動きとしては、重複データがあった場合、データを入力しているセルだけでなく、行全体の色を変えたいという事でした。
    こちらの方法も参考にさせていただきます!
    ありがとうございます!

    キャンセル

0

課題:    異常な値を入力させたくない(何個目かの重複かを知らせられれば、重複をなくせるのでは?的なことでしょうか)
解決策(案):色を変えて目立つようにしてユーザーのポカヨケをしたい
ということでしょうか?

・解決策
解決方法は少し異なりますが、入力規則+Countifで対応できると思います。

重複登録をしようと(入力規則を違反)する場合、そもそも値を更新することすらできないため、ポカヨケとしてはこれだけで十分だと思います。参考までに、色を変える方法では、ユーザーに気づかせるのみで、気づかないリスクまでは排除しきれません。


もし、色を変えるやりかたをするのであれば、隣の列に「先頭行~対象の行」までの範囲に対してcountifを実施、その行に条件付き書式で2以上の整数であれば色を変える、のような処理が必要になりますね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/24 18:07

    連絡が遅れてしまい申し訳ございません。
    課題としては、重複データは入力可能にして、重複データを入力した瞬間に、「〇個目の重複データです」とアラート表示させて、重複データの行全体の色を変える事を目的としていました。
    baseballyama様から回答いただいた様に、プログラムを組んで実行するしかないようなので、プログラミンを組んで解決したいと思います。
    回答いただき、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Scene BuilderでCSSファイルと画像ファイルを読み込んだが、NetBeans上で反映され...

    Scene BuilderでCSSファイル読み込んで、ボタンが平面的になるボタンを作成し、 画像をファイルから読み込んで挿入し、Scene Builderでプレビューすると↓のよ

  • 解決済

    Blender Game Engineでマテリアルを透過したい

    Blenderでゲーム開発をしようとしているものです。 Blender Renderで透過処理したマテリアルをBlender Gameに反映させたいと思っているのですが、透過でき

  • 解決済

    ACCESS クエリでの一部重複?の除外方法について

    前提・実現したいこと こんにちは、質問タイトルが適格でないかもしれませんが宜しくお願いいたします。 通販事業をしており、商品の仕入から販売までのデータベースをACCESSの

  • 解決済

    Monacaでtimepickerの実装

    前提・実現したいこと MonacaでiOS/Andriod両方に対応しているアプリケーションを開発していて、アラーム機能を実装しようと思い、Monacaでtimepickerのよ

  • 解決済

    atom自動補完やり方

    これのプログラミング版になります 今いろいろ調べているのですが、atom自動補完ができません。宜しくお願い致します。 リンク内容 autocomplete-p

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    pycharmのpython console部分の色の変更

    プログラムには関係ないんですが・・・ 長時間PCの画面を見てると目が疲れてしまうので、色を変えてみようと思って 色を変更してみたのですが、python consoleの部分の色

  • 解決済

    ASUS ZenPadで、Camera2APIで、1分動画を2時間分撮影したいです。

    Nexsus 5Xでは、1分動画を、2時間ぶん、撮影することができました。 しかし、ZenPadでは、エラーが出ます。 このようなエラーが繰り返して表示されます。 参

同じタグがついた質問を見る

  • Excel

    1404questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。