- ベストアンサー
エクセル関数で同姓同名を簡単に知る方法はある?
- エクセルの1列に約2000名分の氏名が入力されています。同姓同名を即座に知る方法を探しています。エクセルの関数を使って出来ないでしょうか?
- 同じ姓と名前を持つ人をすばやく見つけるには、エクセルの関数が役に立つかもしれません。関数を使って同姓同名の人を検索する方法を紹介します。
- エクセルに2000人の氏名が入力されています。同じ漢字の姓と名前を持つ人を見つけるために、エクセルの関数を使用することができます。どのようにすれば効率的に検索できるかについて説明します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例えば,B列に =IF(COUNTIF(A$1:A$2000,A1)>1,A1,"") という式をいれるとか...
その他の回答 (3)
- eden3616
- ベストアンサー率65% (267/405)
No3のVBA出力結果に関する捕捉です。 B列に出力される値は、その行番号を含まない他に重複する名前が出てくる行番号をカンマ区切りで結合したものになります。 B列に適用しているハイパーリンクにはその行の次に同じ名前がでてくる行へのリンクを設定しています。 1行目の「井土 ユリカ」を例にすると、B1にはB725へ、B725にはB1999へ、B1999にはB1へセル選択が移動するハイパーリンクが設定されています。
- eden3616
- ベストアンサー率65% (267/405)
重複数が一定値以下で、作業列を用いても良いのであればリストのような形にはできるでしょうが、簡単に関数のみでとなると限界がありますね。 どこにあるか探したい程度のことであれば、重複セルが何個あるかはCOUNTIF関数でわかりますが。 セルB1に「=COUNTIF(A:A,A1)」など入力し、重複数を求めて2以上であれば同姓同名がどこかにいる状態にはなりますので名前(A列)を対象に該当の名前でフィルターするぐらいしかないのではないでしょうか。 また、関数ではないですがVBAで指定列に行番号を書出すことは可能かと思います。 (出力結果は添付画像参照) Alt+F11でVBEを開き、挿入から標準モジュールを挿入してください。 下記のVBAコードを貼付、右上の「×」でVBEを終了してください。 Alt+F8でマクロ「sample」を実行してください。 (ただし、添付画像のようにA列に1行目から詰めて名前が入っている必要があります) ※C列はVBEによる出力ではなく、上記Countを用いた関数式が入っています。 ■VBAコード Sub sample() '準備 Dim myDat As Variant, myBuf() As Variant, myRow As Variant Dim i As Long, j As Long, flag As Integer, myTar As Range Set myTar = Range("A1", Cells(Cells(Rows.Count, "A").End(xlUp).Row, "A")) myDat = myTar ReDim myBuf(UBound(myDat, 1), UBound(myDat, 2)) '重複行番号取得 For i = 1 To UBound(myDat, 1) If WorksheetFunction.CountIf(Columns("A"), myDat(i, 1)) > 1 Then For j = 1 To UBound(myDat, 1) If i <> j And myDat(i, 1) = myDat(j, 1) Then myBuf(i - 1, 0) = myBuf(i - 1, 0) & j & " " End If Next j myBuf(i - 1, 0) = Replace(Trim(myBuf(i - 1, 0)), " ", ",") End If If i Mod 10 = 0 Then Application.StatusBar = i & " 行完了": DoEvents Next i '重複行番号出力 myTar.Offset(0, 1) = myBuf 'リンク設定 For i = 1 To UBound(myBuf, 1) myRow = Split(myBuf(i - 1, 0), ",") flag = 0 For j = 0 To UBound(myRow) If i < CInt(myRow(j)) Then ActiveSheet.Hyperlinks.Add anchor:=Cells(i, "B"), _ Address:="", SubAddress:=Cells(myRow(j), "B").Address(False, False) flag = 1 Exit For End If If flag = 0 Then ActiveSheet.Hyperlinks.Add anchor:=Cells(i, "B"), _ Address:="", SubAddress:=Cells(myRow(0), "B").Address(False, False) Next j Next i End Sub
- asciiz
- ベストアンサー率70% (6825/9705)
Excelでそのままではできないと思います。 vlookup関数などを使うには、データが昇順または降順で並んでいる必要があるので、並び替えされていない状態では、同じものを探すことすらおぼつきません。 表を変更していいのなら、A列でソート(並べ替え)します。 そしてB列などに、「上と同じならカウントアップ」という式を書くと、同じ名前が続いているところで2、3 のように数字が上がるのでわかります。 元の位置を知りたいなら、A列でソート前に、「元の行番号」をC列などに「連続データの作成」などで記録してからソートすれば良いでしょうかね。
お礼
すごいです! 関数の意味は全く分かりませんが、やりたいことがちゃんとできました。 すばらしいです!! 本当に感謝いたします。 ありがとうございました。