- 締切済み
アクセスで 重複してないか・・・・
アクセスで顧客管理をしているのですが、本人会員と家族会員とがいます。家族会員は10人まで登録できるようになっています。 NO 本人会員氏名 家族会員氏名1 家族会員氏名2・・・ 1 田中 太郎 田中 花子 田中 二郎・・・ 2 大橋 弘志 大橋 加奈子 大橋 武・・・ 3 中村 隆志 中村 明美 中村 幸子・・・ 以下続く・・・ となっている中に一度家族(父など)が登録しているのに家族会員(息子など)がまた本人会員になって登録している人がいないかチェック(抽出)をしたいのですがどうすれば良いのでしょうか? 例) NO 本人会員氏名 家族会員氏名1 家族会員氏名2・・・ 10 田中 二郎 田中 太郎 ←この方を見つけたいのです 宜しくお願いします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ja7awu
- ベストアンサー率62% (292/464)
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
- sgh
- ベストアンサー率61% (75/121)
select 本人会員氏名 from テーブル名 union all select 家族会員氏名1 from テーブル名 .. というユニオンクエリーを作って、重複クエリーを流す案はどうでしょうか?
お礼
すいません。会社を休んでいますので後でやってみます<(_ _)>
- ats8181oyaji
- ベストアンサー率38% (94/244)
項目のスペースを削除する方法(超初級) Aに田中 二郎とはいっているとすると 1.Aを頭から一文字ずつ見ていって、Bに移動させる 2.この時もし全角か半角のスペースだったら移動しない 上のような考え方だとできそうですよね。 結果はB=田中二郎 でもあなたのレベルがわからないので どこまで知りたいのか教えてください。 VBAでプログラムでするのか クエリでしたいのか などです。
補足
すいません、書き方が悪かったですね。スペースの消し方はわかります。 あんまり詳しくないのでできればクエリでできたらいいなと思ってます。
- comucom
- ベストアンサー率53% (17/32)
名前だけでは重複判断は無理かと思われます。 苗字と名前の間の半角・全角スペースや、同姓同名の方もいらっしゃると思いますので・・・ 同様に住所での重複判断もムリかと。(都道府県省略や、番地を全角・半角違いで入力しているなど) やるとすれば、本人会員に「電話番号」を持たせ(携帯番号不可)、その電話番号が重複入力できないようにするとか。(引越しされたり、変更があった場合を考慮しないとなりませんが) ファイルのレイアウトにもよるのですが、家族会員情報を別ファイルにもっているのであれば、上記電話番号+誕生日という2つのキーの組み合わせでも回避できるとおもいます。(同一ファイルだと、出来なくは無いと思いますが、かなり辛いかと。)
補足
早速の回答ありがとうございます。やはり無理ですよね・・・。 そしたらスペースを消して同姓同名でも良いから抽出するというやり方はどういう風にすれば良いですか?
お礼
すいません。会社を休んでいますので後でやってみます<(_ _)>