• 締切済み

2つのエクセル 同一人物の番号を一方に揃えたい

二つのエクセルシートがあります。 それぞれ、個人番号と氏名が入っているのですが、 同じ氏名の人に違う番号が付いています。 A表 1 山田太郎    B表 20001 山田太郎 のような感じで、1000人分くらいです。 (中には、B表にのみ番号と名前がある人もいます) 同じ名前の人について、B表の番号を、A表の番号に変えたいのですが、 何かいい方法はありませんか? 知人に聞いたところ、「名前でソートをかけて、 一つ一つ手入力すれば?」と言われたのですが、 B表の方は、ある給与ソフトからタブ区切りで 出力したもののためか、うまく50音順に並びませんでした。 よろしくおねがいします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

実際のシートでやらないとうまくいくか判りませんが VLOOKUP関数を使う方法 Sheet1に  1 山田太郎  のA列の番号を空き列にコピー貼り付けして  1 山田太郎・・・1 のようにする。(VLLOKUP関数は持ってくる項目列は名前より右列である必要あり。MATVH関数を使う手もあるがrVLOOKUP関数を使ってみる。) Sheet2の名前(漢字)によってSheet1の番号を引いて新しい列を作る。すなわちSheet2で 20001 山田太郎 のC列とかで =VLOOKUP(B1,Sheet1!$B$1:$C$1000,2,FALSE) と入れる。Sheet1で番号のコピー先を ここではC列と仮定。番号は氏名から数えて次の列なので2、 C$1000の1000は人数(行数)以上指定。 ーー Sheet1 1 山田太郎 1 3 木村研 3 結果Sheet2で 20001 山田太郎 1 20002 鈴木次郎 #N/A 20002 木村研 3 20005 近藤三郎 #N/A 式を複写して、Sheet2のA列とC列の両番号を身極める。チェックを質問者が全行行う。この過程を略してはなら無い。 (1)(Sheet1とSheet2の両方にある氏名分) そしてShee2でA列とC列を見て、Sheet2のA列の番号を採用した行はSheet1のA列を修正する。 これでSheet1とSheet2の両方にある氏名は、Sheet1のA列に正しい状態にする。 (2)(Sheet1に無い氏名) Sheet1に無い氏名はSheet2では#N/Aになるから Sheet2でフィルタで#N/A分をとらえて、Sheet1の最後の次行以下に貼り付ける。 それにはSheet2でA-C列を範囲指定して、#N/Aでフィルタして 次に編集ージャンプーセル選択ー可視セルで#N/Aの行だけとらえてコピーし、Sheet1の最後の行の下に貼り付ける。 C列の#N/Aを抹消。 これで Sheet1、Sheet2にあり Sheet1にしかない Sheet2にしかない が揃う。 ーー やる過程で 同姓同名(Sheet1で関数で出す方法はあるがここでは略) 1字違い(近藤次郎と近藤次朗で一方が間違いらしいなど) などを見つけて対策を講じる。

kuiny
質問者

お礼

ご丁寧な回答、ありがとうございました。 がんばってやってみます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

参考に,A表にしかいない人やB表だけに載っている人もいたりと,ごちゃごちゃの場合。 添付図: A表とB表を,名前と番号A・Bの順で配置 統合結果のシートを開き,データメニュー(データタブ)の統合でA表とB表のセル範囲を追加,上端行左端列にチェックしてOKすると,名前のリストの結合からそれぞれの表の数字の寄せ集めまで自動で行ってくれます。 採用の番号は D2: =IF(C2="",B2,C2) のような具合にしてみます。 #この方法は,番号が数字になっている場合に利用できます。

kuiny
質問者

お礼

図表までつけていただき、ありがとうございました。 がんばってやってみます。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

A表のみの人をどうするのか 同姓同名や 姓名と名前の間にスペースの有無などは無視しますが 仮に、A表がシート1 B表がシート2だとします。 シート2 番号   氏名 20001 山田太郎 ・・・ と入っている 3列目に =COUNTIF(シート1!B:B,B2) と入れて下までコピーしておけば、同じ名前の人の数が出ます。 (同じ名前がなければ 0ですね) 4列目に =MATCH(B2,シート2!B:B,0) と入れて下までコピーしておけば、同じ名前があれば、その行番号がでます。 (なければエラー、複数あれば、最初の人) 5列目に =IF(C2=0,A2,IF(C2=1,INDEX(シート2!A:A,D2),"名前の重複あり")) とすれば、 同じ名前がなければ そのまま 1列目の番号 一人であれば シート2の番号 重複して名前があれば メッセージ となります。 番号が出たら、5列目をコピー、そのまま値を形式を指定して貼り付け 値に チェック入れて OK すれば 関数で得られた値がそのまま番号になります。 もちろん、一つの列に式を書くことも可能ですが、一つづつ理解しながら進めてください。

kuiny
質問者

お礼

回答ありがとうございました。

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

 今仮に、 A表の番号が入力されている列がSheet1のA列で、 A表の氏名が入力されている列がSheet1のB列で、 B表の番号が入力されている列がSheet2のA列で、 B表の氏名が入力されている列がSheet2のB列 であるものとします。  まず、Sheet2をコピーしたSheetを作成して下さい。  次に、適当な列の1行目のセルに次の数式を入力して下さい。 =IF($B1="","",IF(COUNTIF(Sheet1!$B:$B,$B1)=0,$A1,INDEX(Sheet1!$A:$A,MATCH($B1,Sheet1!$B:$B,0))))  次に、上記の数式を入力したセルをコピーして、同じ列の2行目以下に貼り付けて下さい。  すると、その列にA表の番号が表示されます。  次に、上記の数式を入力したセルが存在している列全体をコピーして下さい。  次に、コピーしたデータを、[形式を選択して貼り付け]機能を使用して、Sheet2のA列に「値のみ」貼り付けて下さい。  最後に、Sheet2のコピーシートに保存されている、項目名等をコピーして、Sheet2の同じセル番号のセルに貼り付ければ完成です。

kuiny
質問者

お礼

回答ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 A表をSheet1、B表をSheet2で見出し行なし、各表のA列を番号列、B列を名前としています。 (1)Sheet2の空き列(仮にD列)のD1に=IF(COUNTA(A1:B1)=2,IF(COUNTIF(Sheet1!B:B,B1),INDEX(Sheet1!A:A,MATCH(B1,Sheet1!B:B,0)),A1),"")として下方向にコピー (2)Sheet2のD列をコピー→A列を選択→形式を選択して貼り付け→値を選択→OK (3)D列を削除

kuiny
質問者

お礼

回答ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

シート1のA列に,A表の番号を列記 シート1のB列に,A表の名前を列記 シート2のA列に,B表の名前を列記 シート2のB列に,B表の番号を列記 (列の並びを入れ替えます) シート1のC2セルに =IF(COUNTIF(Sheet2!A:A,B2),VLOOKUP(B2,Sheet2!A:B,2,FALSE),A2) と数式を記入して下向けにリスト下端までコピー シート1のC列をコピー シート1のA1に形式を選んで貼り付けの値にマークしてOK C列を削除して終わり。

kuiny
質問者

お礼

早速の回答、ありがとうございました。 こんな関数があるんですね。

関連するQ&A