私は多かれ少なかれこのように見えるExcelスプレッドシートを持っています:
+------------+-----------+
| First Name | Last Name |
+------------+-----------+
| John | Paul |
| Joe | Jones |
| John | Paul |
+------------+-----------+
私ができる必要があるのは、重複するエントリの量を検出し、姓名が少なくとも2回存在する行の数を表示することです。
だから基本的に私はリストの何人が少なくとも2回リストにあったかを探しています。
試すことができるいくつかの方法があります。
名が列にあると仮定すると[〜#〜] a [〜#〜]姓が列にあると仮定します[〜#〜] b [〜#〜](with A1およびB1ヘッダーラベル「FirstName」および「LastName」を含む)、次の式をC2に挿入します。
=SUM(($A$2:$A$11=A3)*($B$2:$B$11=B3))
数式を入力したら、を押します Ctrl +Shift + Enter 配列数式として入力します。その下の空白のセルにコピーします。数式は、名前の組み合わせがデータに現れる回数を示します。次に、Conditional Formattingを使用するだけで、テーブルに少なくとも2回リストされている人をより視覚的に確認できます。
名が列にあると仮定すると[〜#〜] a [〜#〜]姓が列にあると仮定します[〜#〜] b [〜#〜](with A1およびB1ヘッダーラベル「FirstName」および「LastName」を含む)、次の式をC2に挿入し、にコピーします。その下のセル。
=A2&B2
「JohnPaul」や「JoeJones」のようなものが表示されます。その後、この列を非表示にすることができます。
セルD2にffを入力します。式。その下の他のセルにコピーします。
=COUNTIF($C$2:$C$11,C2)
上記の配列数式と同じ結果が表示されます。
この機能はExcel2007以降でのみ利用できると思います。
名がAにあり、姓がBにあるとしましょう。
両方の列を強調表示してから、条件付き書式に移動します。
新しいルールを作成する>>数式を使用して、フォーマットするセルを決定します
ffを入力します。式:
=COUNTIFS($A:$A,$A1,$B:$B,$B1)>=2
好みのフォーマットを設定し、[OK]をクリックします。
Conditional Formatting Rules Managerウィンドウで、Applies toを=$A:$B
に設定します。
これに取り組んでいる場合は、最初に行を並べ替えて姓を並べ替え、次に名で並べ替えて、すべての重複が隣り合うようにします。
名が列Bにあり、姓が列Cにあるとします。また、最初のデータ行が行2であると仮定します。また、重複の実行カウントを列Aに置くと仮定します。
次に、CELLA2に次の式を入力します。
=IF(AND(B2=B1,C2=C1),A1+1,1)
次に、A2をコピーして、列Aに貼り付け、この数式がリスト内のすべての名前の横に表示されるようにします。
これをすべて正しく実行すると、列Aに重複の実行カウントが含まれるようになります。それらをより簡単に検出したい場合は、1より大きい値が目立つように列Aに条件付き書式を設定します。
幸運を!
リストに重複する値の数を取得するには、次の式を使用します。
=COUNTA(A1:A20)-SUM(IF(COUNTIFS(INDIRECT("$A$1:" & ADDRESS(ROW(A1:A20),1)),A1:A20,INDIRECT("$B$1:" & ADDRESS(ROW(B1:B20),2)),B1:B20)=1,1,0))
Ctrl + Shift + Enterを押して、これを配列数式として入力します。これにより、1つのセルにカウントが表示されます。追加の列は必要ありません。
重複する各エントリの行番号を返すこともできますが、VBAユーザー定義関数(UDF)の助けが少し必要になります。 VBAでUDFを作成するには、Alt + F11を押してモジュールを挿入します。次のコードをモジュールに貼り付けます。
Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
ここで、重複の行番号のリストを取得するには、セルに次の数式を入力します。
=CCARRAY(IF(COUNTIFS(INDIRECT("$A$1:" & ADDRESS(ROW(A1:A20),1)),A1:A20,INDIRECT("$B$1:" & ADDRESS(ROW(B1:B20),2)),B1:B20)>1,ROW(B1:B20),0),", ")
Ctrl + Shift + Enterを押して、この数式を配列数式として入力します。
このUDFを使用して、重複している実際の値のリストを取得することもできます。次の式は、この目的で機能します。
=CCARRAY(IF(COUNTIFS(INDIRECT("$A$1:" & ADDRESS(ROW(A1:A20),1)),A1:A20,INDIRECT("$B$1:" & ADDRESS(ROW(B1:B20),2)),B1:B20)>1,A1:A20&" "&B1:B20,0),", ")
また、これを配列数式として入力します。