• 締切済み

Excelで名簿管理しております。

Excelで名簿管理しております。 入力の際、重複チェックを行いながら作業をしていきたいのですが [入力したいデータ]:田中 ○○○ C      A   B   C 1  名前 住所  所属 2  田中 ○○○ A 3  山田 ▲▲▲ B とあるとします。 入力したいデータが、すでに入力されているデータの 名前と住所と一致しているのですが、所属が異なるため 別のデータとみなします。 そして、このような時    A   B   C 1  名前 住所  所属 2  田中 ○○○ A・C ← 3  山田 ▲▲▲ B というように 「C」を後につける処理をするマクロが あればと思い、ご助力をいただきたく質問させて頂きました。 何か案がございましたら、宜しくお願いします。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 関数と作業列を使用する方法です。  今仮に、データの入力用SheetをSheet1、集計した表の表示用SheetをSheet2、作業用SheetをSheet3とします。  まず、データ入力前に、Sheet1のA2セルを選択し、メニューの[データ]→[入力規則]とクリックして、「データの入力規則」ウィンドウを開いて下さい。  次に、[設定]タグをクリックした後、「入力値の種類」欄を[ユーザー設定]とした上で、「数式」欄に次の数式を入力して下さい。 =SUMPRODUCT((INDIRECT("A1:A999")=INDEX($A:$A,ROW()))*(INDIRECT("B1:B999")=INDEX($B:$B,ROW()))*(INDIRECT("C1:C999")=INDEX($C:$C,ROW())))<2  続いて、[OK]ボタンをクリックしてから、Sheet1のA2セルをコピーして、A列~C列のデータを入力する予定の範囲に、「形式を選択して貼り付け」機能を利用して、入力規則を貼り付けて下さい。  これで、重複したデータを入力する事を防止します。  次に、Sheet3のB2セルに次の数式を入力して下さい。 =IF(OR(Sheet!1$A2="",Sheet1!$B2=""),"",SUMPRODUCT((Sheet1!$A$1:$A1=Sheet1!$A2)*(Sheet1!$B$1:$B1=Sheet1!$B2))+1)  次に、Sheet3のA2セルに次の数式を入力して下さい。 =IF($B2=1,ROW(),"")  次に、Sheet3のC2セルに次の数式を入力して下さい。 =IF(ISNUMBER($B2),IF($B2>1,INDEX($C:$C,SUMPRODUCT((Sheet1!$A$1:$A$999=Sheet1!$A2)*(Sheet1!$B$1:$B$999=Sheet1!$B2)*(VALUE("0"&$B$1:$B$999)=$B2-1)*ROW(C$1:C$999)))&"・","")&Sheet1!$C2,"")  そして、Sheet3のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、Sheet2のA2セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!A:A,SMALL(Sheet3!$A:$A,ROWS($1:1))))  次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR($A2="",$B2=""),"",INDEX(Sheet3!$C:$C,SUMPRODUCT((Sheet1!$A$1:$A$999=$A2)*(Sheet1!$B$1:$B$999=$B2)*(Sheet3!$B$1:$B$999=SUMPRODUCT((Sheet1!$A$1:$A$999=$A2)*(Sheet1!$B$1:$B$999=$B2)))*ROW(C$1:C$999))))  次に、Sheet2のA2セルをコピーして、Sheet2のB2セルに貼り付けて下さい。  そして、Sheet2のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  後は、Sheet1のA列~C列の2行目以下に、各データを入力すれば完成です。

すると、全ての回答が全文表示されます。
回答No.2

まずストーリーをきちんとされたほうがいいと思います それがきちんとしていないとトラブルだらけのものになってしまいます 入力はあなたではなく不特定多数者が行うのですか? コード番号の事を挙げましたが それは少しおいておいて 名前が完全に一致する同姓同名というのはほとんど居ないでしょうから ほぼ名前のみで重複をチェックできますね 次に 重複レコードがひっかかったらそのレコードをすべて表示させ 入力者に判断させるという手法にて行うほうがいいでしょう 名前においても漢字ではなくカタカナやひらがなの入力フィールドを設け ここで重複チェックをさせます 処理の流れを日本語で1行ごと簡潔に順序だてて書いてみてください それができないとプログラムを書くことはできません それができたら そのコードについてアドバイスします

すると、全ての回答が全文表示されます。
回答No.1

ひとつだけ、 データベースの設計に問題がありますね すべてコード番号で管理するようにすればそういう問題はなくなります 名前と住所で重複をチェックしたとしましょう 同じはずなのに違うという結果になることもあります それは住所の番地などで全角半角の入力を間違えたり、 共同住宅の場合部屋番号の表記方法など人によってまったく同じにならない為です コード番号で管理すればそれがなくなるのと 処理が簡単になります

zemdama
質問者

補足

回答ありがとうございます。 おっしゃる通りだと思います。 表記方法の違いや、全・半角などについては入力規則などを用いて 統一をはかってはいますが、そもそも人が作業を行うので変換ミスなどの 人為的ミスも大いに考えられます。 ゆえに、当質問においては複数の項目で重複チェックをして一方の項目で スルーされても他方でひっかかればと思い、質問のような例をあげました。 下手なたとえだった為、申し訳なく思っております。 すいませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A