Coletar linha # de elementos correspondentes no Excel

1

Estou tentando coletar os números de linha que correspondem a um determinado valor em várias colunas de uma planilha do Excel. O comportamento que estou procurando reflete a tabela abaixo:

|---|---------|---------|---------|
| 1 | A       | B       | A       |
|---|---------|---------|---------|
| 2 | B       | A       | A       |
|---|---------|---------|---------|
| 3 | C       | A       | C       |
|---|---------|---------|---------|
| 4 | A       | A       | C       |
|---|---------|---------|---------|
| 5 | C       | B       | B       |
|---|---------|---------|---------|
| 6 | A       | B       | B       |
|---|---------|---------|---------|
|   | Results |         |         |
|---|---------|---------|---------|
| A | 1, 4, 6 | 2, 3, 4 | 1, 2    |
|---|---------|---------|---------|
| C | 3, 5    |         | 3, 4    |
|---|---------|---------|---------|

Até agora, consegui alcançar o resultado que estou procurando fazendo IF chamadas individuais por célula para criar uma versão espelhada da tabela e reduzi-la de lá, mas é uma dor estender mais geralmente. Pensamentos?

    
por fny 25.09.2013 / 17:47

3 respostas

1

Não é bonito, mas é curto e é um começo.

SubcollectRows()SetrngInput=Range("C2:E7")
Set rngFilter = Range("A10:A11")

For Each rngCell In rngInput
    If Not rngFilter.Find(what:=rngCell, LookAt:=xlWhole) Is Nothing Then
        rngFilterRow = rngFilter.Find(what:=rngCell, LookAt:=xlWhole).Row
        Cells(rngFilterRow, rngCell.Column) = Cells(rngFilterRow, rngCell.Column) & ", " & rngCell.Row
    End If
Next

End Sub
    
por 06.10.2013 / 17:08
0

Isso precisa ser feito no Excel. Apenas pensando fora da caixa, se você carregasse os dados no sql server, seria fácil executar uma consulta para obter essas informações.

    
por 25.09.2013 / 22:16
0

Veja uma maneira de fazer isso com o Script do Google Apps para qualquer pessoa que possa achar útil:

// Example Usage:
//    =collectMatches("A", C2:C5)
function collectMatches(target, columns) {
  collection = [];
  for (var i = 0; i < columns.length; i++) {
    if (columns[i][0].toLowerCase() === target.toLowerCase()) {
      Logger.log(target)
      collection.push(i+1)
    }
  };
  return collection.join(', ');
}
    
por 07.10.2013 / 15:44