• 締切済み

アクセスで 重複してないか・・・・

アクセスで顧客管理をしているのですが、本人会員と家族会員とがいます。家族会員は10人まで登録できるようになっています。 NO 本人会員氏名 家族会員氏名1 家族会員氏名2・・・ 1 田中 太郎  田中 花子   田中 二郎・・・ 2 大橋 弘志  大橋 加奈子  大橋 武・・・ 3 中村 隆志  中村 明美   中村 幸子・・・ 以下続く・・・ となっている中に一度家族(父など)が登録しているのに家族会員(息子など)がまた本人会員になって登録している人がいないかチェック(抽出)をしたいのですがどうすれば良いのでしょうか? 例) NO 本人会員氏名 家族会員氏名1 家族会員氏名2・・・ 10 田中 二郎  田中 太郎 ←この方を見つけたいのです 宜しくお願いします

みんなの回答

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

VBAでの処理で良ければ、こんな感じで如何でしょうか。 標準モジュールに次のコードを貼り付けて、2行目を実際のテーブル名にして 実行すれば、会員と家族のクロス重複がMsgBoxにあるだけ繰り返し表示されます。 スペースを除いて比較しようと考えましたが、今はそのままです。 必要なら、追加しますが・・・ お使いのAccessのバージョンは? VBEのメニューから[ツール]-->[参照設定]で「Microsoft DAO x.x Object Library」に チェックを入れ、「Microsoft ActiveX Data Object x.x Libraly」があれば、それより 優先順位を上に設定します。 Sub 会員重複Chk() Const TblName = "会員名簿TBL" '<--- テーブル名指定 Dim Db As Database Dim Tb1 As DAO.Recordset Dim N As Integer, S As Integer Dim Num As Long, Num2 As Long Dim Fld2 As String, Kname As String Dim Kaiin As String, Kaiin2 As String Dim Bmark As String, Bmark2 As String Set Db = CurrentDb Set Tb1 = Db.OpenRecordset(TblName, dbOpenDynaset) Do Until Tb1.EOF   Bmark = Tb1.Bookmark   Num = Tb1.Fields(0)   Kaiin = Tb1.Fields(1)   For N = 2 To Tb1.Fields.Count - 1     Tb1.FindFirst Tb1.Fields(N).Name & "='" & Kaiin & " '"     Do Until Tb1.NoMatch       If Kaiin = Tb1.Fields(N) Then         Bmark2 = Tb1.Bookmark         Num2 = Tb1.Fields(0)         Kaiin2 = Tb1.Fields(1)         Fld2 = Tb1.Fields(N).Name         Kname = Tb1.Fields(N)         Tb1.Bookmark = Bmark         For S = 2 To 11           If Kaiin2 = Tb1.Fields(S) And Num < Num2 Then             MsgBox "[No.] " & Num & " " & Kaiin & " [" & _             Tb1.Fields(S).Name & " ] " & Tb1.Fields(S) & vbCrLf & _             vbCrLf & "[No.] " & Num2 & " " & Kaiin2 & _             " [" & Fld2 & " ] " & Kname, vbOKOnly + _             vbExclamation, "会員-家族重複登録"             Exit For           End If         Next S         Tb1.Bookmark = Bmark2       End If       Tb1.FindNext Tb1.Fields(N).Name & "='" & Kaiin & " '"     Loop   Next N   Tb1.Bookmark = Bmark   Tb1.MoveNext Loop Tb1.Close Set Tb1 = Nothing MsgBox "重複チェック完了!!" End Sub

chiharuhotei
質問者

お礼

すいません。会社を休んでいますので後でやってみます<(_ _)>

  • sgh
  • ベストアンサー率61% (75/121)
回答No.3

select 本人会員氏名 from テーブル名 union all select 家族会員氏名1 from テーブル名 .. というユニオンクエリーを作って、重複クエリーを流す案はどうでしょうか?

chiharuhotei
質問者

お礼

すいません。会社を休んでいますので後でやってみます<(_ _)>

回答No.2

項目のスペースを削除する方法(超初級) Aに田中 二郎とはいっているとすると 1.Aを頭から一文字ずつ見ていって、Bに移動させる 2.この時もし全角か半角のスペースだったら移動しない 上のような考え方だとできそうですよね。 結果はB=田中二郎 でもあなたのレベルがわからないので どこまで知りたいのか教えてください。 VBAでプログラムでするのか クエリでしたいのか などです。

chiharuhotei
質問者

補足

すいません、書き方が悪かったですね。スペースの消し方はわかります。 あんまり詳しくないのでできればクエリでできたらいいなと思ってます。

  • comucom
  • ベストアンサー率53% (17/32)
回答No.1

名前だけでは重複判断は無理かと思われます。 苗字と名前の間の半角・全角スペースや、同姓同名の方もいらっしゃると思いますので・・・ 同様に住所での重複判断もムリかと。(都道府県省略や、番地を全角・半角違いで入力しているなど) やるとすれば、本人会員に「電話番号」を持たせ(携帯番号不可)、その電話番号が重複入力できないようにするとか。(引越しされたり、変更があった場合を考慮しないとなりませんが) ファイルのレイアウトにもよるのですが、家族会員情報を別ファイルにもっているのであれば、上記電話番号+誕生日という2つのキーの組み合わせでも回避できるとおもいます。(同一ファイルだと、出来なくは無いと思いますが、かなり辛いかと。)

chiharuhotei
質問者

補足

早速の回答ありがとうございます。やはり無理ですよね・・・。 そしたらスペースを消して同姓同名でも良いから抽出するというやり方はどういう風にすれば良いですか?

関連するQ&A