電子書籍の厳選無料作品が豊富!

アクセスで重複したデータを入力したら以前入力した箇所がわかるようにしたいのですが。

アクセス初心者です。
エクセルで住所録を作成していましたが、データが多すぎて動きが遅くなってきたので、アクセスにデータを移しました。

エクセルではCOUNTIFを使って電話番号を重複して入力した場合にセルを赤くして重複した箇所を知る事が出来るように設定していました。

アクセスでも同じ様な設定にしたいのですがド素人のためまったくわかりません。
年月日・住所・電話番号の欄があります。

どなたか詳しい方教えて下さい。
ド素人でも理解できるように詳しく優しく教えていただけたらたすかります。
アクセス2010です。
お願いします。

A 回答 (5件)

#4です



進展した補足等が欲しかったのですが。

ご質問の内容が膨れただけのような気がします。

こういう状況で、こうやってみたが、うまくいかない。
そこに絞った噛み砕いた回答が出来ると思います。

色々わからない状況では、私なりに仮定して回答することになります。
(放置するかも)

環境に合わないものを回答されても、邪魔なだけだと思います。

噛み砕かず最低限のこと・・・以下に書いてみます。
邪魔だと思われたら、具体的な状況等を補足してください。

フォーム/条件付き書式を使います。

・テスト用新規 accdb を作成します。
・テーブル「TB1」を以下内容で作成します。
an  オートナンバ
電話番号 テキスト型、インデックス重複なし、IME オフ
備考 テキスト型

・テーブル「TB1」を元にフォームウィザードを利用し表形式で作成します。
フォームデザインでテキストボックス「電話番号」の名前を「txt電話番号」に変更します。
「txt電話番号」と「備考」のスクロールバーを「なし」に、
また、Enterキー入力時動作を「既定」に変更します。

テキストボックス「txt電話番号」の更新前処理を
[イベント プロシージャ] にし、右横の「...」をクリックします。

Private Sub txt電話番号_BeforeUpdate(Cancel As Integer)

End Sub

が表示されるので、その部分を以下と置き換えます。

Dim iNowAn As Long

Private Sub Form_Timer()
  Me.TimerInterval = 0
  Me.Dirty = False
  Me.Requery
  Me.Recordset.FindFirst "an=" & iNowAn
End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)
  Dim sSql As String

  Select Case DataErr
    Case 3022
      iNowAn = Me.an
      sSql = "DELETE * FROM TB1 WHERE 電話番号 = '" & Me.txt電話番号 & "' ;"
      CurrentDb.Execute sSql
      Me.TimerInterval = 50
      Response = acDataErrContinue
  End Select
End Sub

Private Sub Form_Load()
  Dim sS As String

  Me.txt電話番号.FormatConditions.Delete
  sS = "[txt電話番号]=''"
  With Me.txt電話番号.FormatConditions.Add(acExpression, , sS)
    .BackColor = RGB(255, 0, 0)
  End With
End Sub

Private Sub ResetFormatCondition()
  Dim sS As String

  sS = "[txt電話番号]=''"
  Me.txt電話番号.FormatConditions(0).Modify acExpression, , sS
End Sub

Private Sub Form_Current()
  Call ResetFormatCondition
End Sub
Private Sub Form_Undo(Cancel As Integer)
  Call ResetFormatCondition
End Sub

Private Sub txt電話番号_BeforeUpdate(Cancel As Integer)
  Dim sS As String

  sS = "[txt電話番号]='" & Me.txt電話番号.Text & "'"
  Me.txt電話番号.FormatConditions(0).Modify acExpression, , sS
End Sub

動きとして、電話番号入力時は自分を赤にします。
同じものが登録されていたら、そこも赤になります。
そのレコード登録時、重複していたらエラーが発生するので、
重複エラーなら登録済みのものを無条件で削除し登録します。

既にテーブル内に重複しているものがいっぱいある、とか
重複しているものがあったらそれを表示させて、とか
上記レベルの記述でよければ、確認してみていたので提示はできます。
    • good
    • 0
この回答へのお礼

ありがとうございました。早速試してみます。

お礼日時:2011/03/06 08:47

皆様、お疲れ様です。



2010ではなく、2007で確認したものになりますが、

> ド素人でも・・・
理解できるように努めてください。

以下に一例を
(それなりに動くと思います:後述の参照先のものとは異なります)


フォームを使用します。
テーブルを直接開いて、クエリを直接開いて・・・では、できません。

フォームの既定のビューは帳票フォームでも、データシートでも・・・
この時、部分的に色を変えるには、条件付き書式を使います。

フォームのレコードソースは、移したテーブル名そのものとします。
何かを元に並べ替えをするのなら、それなりの設定をします。
「電話番号」用のテキストボックスを「txt電話番号」名で作成し、
コントロールソースを「電話番号」とします。
この「電話番号」は、テキスト型で作成されているものとします。
また、「txt電話番号」の背景スタイルは普通になっていることを確認しておきます。

「txt電話番号」の更新前処理で、条件付き書式をVBAで設定しなおします。

Private Sub txt電話番号_BeforeUpdate(Cancel As Integer)
  Dim sS As String

  Me.txt電話番号.FormatConditions.Delete
  If (Len(Me.txt電話番号.Text) > 0) Then
    sS = "[txt電話番号]='" & Me.txt電話番号.Text & "'"
    With Me.txt電話番号.FormatConditions.Add(acExpression, , sS)
      .BackColor = RGB(255, 0, 0)
    End With
  End If
End Sub

上記では「電話番号」を入力/変更したものが、自分を含め他にもあったら
その部分が「赤」に変わります。(自分は常に「赤」に)

テーブル上の「電話番号」の重複を許す/許さないはご自由に。

ただ、このままだと背景色「赤」を戻すタイミングがないので、
例えば、レコード移動時に条件付き書式を解除(削除)します。

Private Sub Form_Current()
  Me.txt電話番号.FormatConditions.Delete
End Sub

また、Undo 時にも条件付き書式を削除するようにすればよいと思います。

フォームをデータシートで表示する際、
テキストボックス「txt電話番号」にラベルが付いていなかった場合、
項目(フィールド)の表示部分は「txt電話番号」になります。
「電話番号」の表示にするには、テキストボックス「txt電話番号」に
ラベルを付加し、そのラベルの標題を「電話番号」とします。

上記では条件付き書式を、事あるごとに削除していますが、
条件1を設定しておいて、その条件式を更新していく方法もあります。
キーワードは、Modify
更新の方が画面のチラつきは改善されると思います。

また、条件式を固定にし、参照先の内容を変更する方法もあります。
参照先は非連結の不可視のテキストボックスを使います。
そのテキストボックスに、入力のあった「電話番号」を設定/削除して処理させます。
画面のチラつきは上記より改善されたと思います。

これに近いのが以下


アクセスで重複したデータを入力したら以前入力した箇所がわかるようにしたいので…
http://detail.chiebukuro.yahoo.co.jp/qa/question …

access2007で重複した箇所を赤くして知らせる方法を教えて下さい。
http://detail.chiebukuro.yahoo.co.jp/qa/question …


本件については解消されたようですが

[Tips]マルチポストが嫌われる理由~なぜマルチポストは問題か?
http://stakasaki.at.webry.info/200512/article_3. …


今回のご質問は、真剣なものになりますか?
時には女性、時には男性、単に複数の方で使われているHNだったのでしょうか・・・

実際の環境がわかれば、噛み砕いた記述はできると思います。
どのような表示上で行いたいのか、
どのようなタイミングで色付け/解除したい等、補足してください。

なお、お持ちの参考書の条件付き書式の説明部分を補足してもらえると、
その方法を使った、また、それに近い方法での説明が出来るかもしれません。

まずは、参考書の条件付き書式部分を読み直してみてください。
    • good
    • 0
この回答へのお礼

30246kiku様
ありがとうございます。
会社で使う物です。情報入力と言う名前で、ID・年月日・氏名・市・住所・電話番号・備考という項目があります。この中で、住所と電話番号を入力した時に重複を知りたいのです。(電話番号が分からない時がありますので、住所でも重複を知りたい)重複が分かった時点で古いデータは消去して新しい情報だけを残します。後から検索して調べるのではなく、入力した時点で知りたいです。
どうかよろしくお願いいたします。

お礼日時:2011/03/04 09:20

>mitarashi さんの質問に答えましょう。

会話が成り立っていません。
>>フォームはお使いなのでしょうか?
>私の質問にも
>電話番号の重複は許す?許さない?
    • good
    • 0

私はmitarashiさんのように優しくはありません。


>ド素人でも理解できるように詳しく優しく
は甘えだと思います。
まずは、
mitarashi さんの質問に答えましょう。会話が成り立っていません。
>フォームはお使いなのでしょうか?
私の質問にも
電話番号の重複は許す?許さない?

フォームで無いと条件付き書式も使えませんし色々と不自由です。
優しくはないけど詳しくなら教えられるかも?
    • good
    • 0
この回答へのお礼

甘えとだとはわかっているのですが本を2冊買って読んでも全く理解出来ないんです・・・。
出来れば詳しく教えていただけませんか?
出来るだけ優しくお願いいたします。。。

お礼日時:2011/03/02 09:02

そもそも重複入力を防止するには、


テーブルをデザインビューで開いて、目的のフィールド名を選択し、下側に表示されるフィールドプロパティで、
インデックスを「はい(重複なし)」に設定します。
こうすると、重複した値を入力しようとしても警告が発せられて、入力できません。

エクセルのように、重複データを表示したい場合、帳票フォームであれば「条件付き書式」で、重複した値に表示をする事が可能です。フォームはお使いなのでしょうか?
参考URLを添付いたします。
http://detail.chiebukuro.yahoo.co.jp/qa/question …
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

ただ全くのド素人な者ですので、理解が出来ません。
入力はエクセルの様な画面で入力しています。
要はエクセルと同じ様に重複入力した場合に、入力したセルと重複しているセルが
赤く塗り潰される又は文字が赤くなる様にしたいのですが・・・。

初めてアクセスを扱うため、専門用語も知らずにお聞きしています。
『初めての人がそんなの出来る訳がない』と言われるのを承知でお願いしています。

もしよかったら詳しく御指導下さい。

お礼日時:2011/03/01 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!