Esta é essencialmente uma variante da pergunta feita aqui: Excel – Como encontro valores de texto comuns em múltiplas (>2) colunas?
Neste caso, porém, em vez de várias colunas de dados, preciso pesquisar várias linhas. Portanto, cada linha pode ter até 17 colunas de dados não repetidos e quero encontrar uma correspondência ou correspondências entre as linhas. Aqui está uma pequena amostra de como os dados podem parecer (é uma lista de possíveis coordenadas para um site coletadas de múltiplas fontes, com a intenção de identificar um local único):
Fonte Coord1 Coord2 Coord3 Coord4 Coord5 Coord6 Fonte1 (4,0) (5,0) Fonte2 (3,0) (4,0) (5,0) (3,1) (4,1) (5,1) Fonte3 (4,0) (5,1) (5,0) Fonte4 (3,0) (4,0) (5,0) (3,1) (3,2) Fonte5 (2,3) (3,2) (4,1) (4,2) (5,0)
No thread referenciado, o usuário XOR-LX forneceu um método muito útil para comparação em colunas. Na verdade, se eu transpor os dados acima, seu método funciona bem, retornando (5,0) como o local exclusivo na primeira célula de saída, mas não consegui modificá-lo para uso em linhas, pois meus dados estão organizados. Até agora tentei modificá-lo da seguinte maneira, sem sorte:
- Faixa1 =
$B$2:$G$6
- Arry1 =
ROW(Range1)-MIN(ROW(Range1))
- Arry2 =
COLUMN(INDEX(Range1,1,))-MIN(COLUMN(INDEX(Range1,1,)))+1
- Arry3 =
MMULT(0+COUNTIF(OFFSET(INDEX(Range1,1,),Arry1,,,),INDEX(Range1,1,))>0),COLUMN(INDIRECT(ROWS(Range1)&":1"))^0)
Com a entrada final sendo:
=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))),"")
Usando a modificação acima, simplesmente não recebo nenhuma saída (nem mensagens de erro), apenas uma célula em branco. Basicamente, tentei apenas "reverter" seu método trocando ROW por COLUMN e assim por diante, mas suspeito que a solução possa ser um pouco mais complexa, especialmente devido à minha fraqueza com funções de matriz do Excel.
Qualquer ajuda é muito apreciada.
Responder1
Você pode tentar este código no módulo de planilha, ele não é muito robusto e pode repetir cores, mas pode funcionar. Se não postar de volta aqui. Basta alterar o componente de faixa (atualmente B1 para G100) para se adequar.
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