Collecter le nombre de lignes d'éléments correspondants dans Excel

1

J'essaie de collecter les numéros de ligne correspondant à une certaine valeur dans plusieurs colonnes d'une feuille de calcul Excel. Le comportement que je recherche correspond au tableau ci-dessous:

|---|---------|---------|---------|
| 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    |
|---|---------|---------|---------|

Jusqu'à présent, j'ai réussi à obtenir le résultat recherché en effectuant des IFappels individuels par cellule pour créer une version en miroir de la table et en la réduisant à partir de là, mais il est difficile d'étendre de manière plus générale. Pensées?

fny
la source
Vous essayez d’obtenir tous les résultats dans une seule cellule (par exemple, tous les résultats de A pour la 1ère colonne dans une seule cellule)? Je ne pense pas que les fonctions conviennent ici ...
Jerry
Si possible. J'ai réussi à obtenir l'effet en utilisant SMALL puis en collectant la sortie avec concaténation.
Fny
Mais pour un nombre de rangées prolongé, cela deviendra plus fastidieux, oui? Et s'il y avait une fonction et que vous deviez appuyer sur F9 pour obtenir la liste? Cela signifie que vous mettez d'abord la fonction partout dans le tableau des résultats, puis utilisez F9 dans chaque formule pour transformer les résultats en listes? Ceci est encore assez fastidieux, mais évite de devoir concaténer.
Jerry
Une macro serait-elle acceptable ou doit-elle être une fonction?
Raystafarian
Les macros et les scripts VB vont bien. Je ne savais pas si Excel 2011 pour OS X prenait en charge les scripts, mais il semble que ce soit le cas.
Fny

Réponses:

1

Pas joli, mais c'est court et un début.

entrez la description de l'image ici

Sub collectRows()

Set rngInput = 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
Nixda
la source
0

Est-ce que cela doit être fait dans Excel? En sortant des sentiers battus, si vous chargiez les données dans SQL Server, il serait facile de lancer une requête pour obtenir ces informations.

phipywr
la source
Malheureusement, oui. La plupart des utilisateurs des feuilles de calcul ne sont pas familiarisés avec SQL.
Fny
0

Voici un moyen de le faire avec Google Apps Script pour tous ceux qui le trouveraient utile:

// 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(', ');
}
fny
la source