![Excel - 複数行(>2)から共通のテキスト値を見つけるにはどうすればよいですか?](https://rvso.com/image/1496884/Excel%20-%20%E8%A4%87%E6%95%B0%E8%A1%8C%EF%BC%88%3E2%EF%BC%89%E3%81%8B%E3%82%89%E5%85%B1%E9%80%9A%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%80%A4%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
これは本質的に、ここで尋ねられた質問のバリエーションです: Excel - 複数 (>2) の列から共通のテキスト値を見つけるにはどうすればよいですか?
ただし、この場合は、複数の列のデータではなく、複数の行を検索する必要があります。したがって、各行には最大 17 列の重複しないデータがあり、行間の一致を見つけたいと考えています。以下は、データがどのようになるかを示した小さなサンプルです (複数のソースから収集されたサイトの可能な座標のリストで、一意の場所を正確に特定することを目的としています)。
ソース 座標1 座標2 座標3 座標4 座標5 座標6 ソース1 (4,0) (5,0) ソース2 (3,0) (4,0) (5,0) (3,1) (4,1) (5,1) ソース3 (4,0) (5,1) (5,0) ソース4 (3,0) (4,0) (5,0) (3,1) (3,2) ソース5 (2,3) (3,2) (4,1) (4,2) (5,0)
参照スレッドでは、ユーザー XOR-LX が列方向の比較に非常に便利な方法を提供しました。確かに、上記のデータを転置すると、彼の方法はうまく機能し、最初の出力セルの一意の位置として (5,0) を返しますが、私のデータの配置では行方向の使用に変更できませんでした。これまで、次の方法で変更しようとしましたが、うまくいきませんでした。
- 範囲1 =
$B$2:$G$6
- アレイ1 =
ROW(Range1)-MIN(ROW(Range1))
- アレイ2 =
COLUMN(INDEX(Range1,1,))-MIN(COLUMN(INDEX(Range1,1,)))+1
- アリ3 =
MMULT(0+COUNTIF(OFFSET(INDEX(Range1,1,),Arry1,,,),INDEX(Range1,1,))>0),COLUMN(INDIRECT(ROWS(Range1)&":1"))^0)
最終的な入力は次のようになります。
=IFERROR(INDEX(INDEX(Range1,1,),SMALL(IF(FREQUENCY(IF(INDEX(Range1,1,)<>"",IF(Arry3=ROWS(Range1),MATCH(INDEX(Range1,1,),INDEX(Range1,1,),0))),Arry2),Arry2),COLUMNS(A:$A))),"")
上記の変更を行うと、何も出力されず (エラー メッセージも出力されず)、空白のセルだけが表示されます。基本的には、ROW を COLUMN と入れ替えるなどして、彼の方法を「逆に」試してみましたが、Excel のマトリックス関数が苦手なことを考えると、解決策はもう少し複雑になるのではないかと思います。
どのような助けでも大歓迎です。
答え1
このコードをワークシート モジュールで試すことができます。あまり堅牢ではなく、色が繰り返される場合もありますが、目的を果たす可能性があります。うまくいかない場合は、ここに投稿してください。範囲コンポーネント (現在は B1 から G100) を適宜変更してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range, c As Range
Dim MyCI As Long
If Intersect(Target, Range("$B$1:$G$100")) Is Nothing Then Exit Sub
For Each cell In Range("$B$1:$G$100")
cell.Interior.ColorIndex = 0
Next cell
For Each cell In Range("$B$1:$G$100")
If WorksheetFunction.CountIf(Range("$B$1:$G$100"), cell.Value) > 1 Then
If cell.Interior.ColorIndex = -4142 Then
MyCI = Int((56 - 1 + 1) * Rnd + 1)
For Each c In Range("$B$1:$G$100")
If c.Value = cell.Value Then c.Interior.ColorIndex = MyCI
Next c
End If
End If
Next cell
End Sub