web-dev-qa-db-fra.com

Comment étiqueter / étiqueter des éléments dans une feuille de calcul

Je suis un novice en tableurs, alors j'espère que vous me pardonnerez si je pose une question très évidente.

Est-il possible d'utiliser des balises dans Excel/Google Spreadsheet? Je crée un tableur pour enregistrer tous les articles et livres que je lis. Dis que je lis "moi, Claudius". Je veux lui donner ces tags: histoire, fiction, biographie, handicap, politique, drame. Ensuite, si je veux afficher tous les articles/livres marqués avec "politique", je peux peut-être chercher/afficher/pivoter avec cette balise.

Peut-être de préférence, les balises devraient toutes être dans une cellule avec chaque mot séparé par une virgule. Si chaque mot était dans une cellule à part, cela rendrait la table vraiment désordonnée, je pense.

Je suis également ouvert à d'autres solutions d'étiquetage.

Merci!

14
nusantara

Autant que je sache, aucune fonction intégrée ne peut analyser et résumer les balises séparées par des virgules dans Excel. Vous pouvez bien sûr créer votre propre solution avec des fonctions de feuille de calcul et un peu de VBA. Voici une solution rapide pour le faire.

Étape 1 : appuyez sur Alt+F11 ouvrir le volet de l'éditeur VBA dans Excel. Insérez un nouveau module et collez ce code pour une fonction personnalisée.

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

Cette fonction vous permettra de créer des listes séparées par des virgules pour résumer les données de balise que vous avez.

Étape 2 : dans une feuille de calcul, entrez dans une cellule (H2 dans l'exemple ci-dessous) la balise que vous souhaitez rechercher. Dans la cellule à droite, entrez la formule suivante en appuyant sur Ctrl+Shift+Enter.

=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")

En appuyant Ctrl+Shift+Enter, vous entrez la formule sous forme de formule matricielle. Il apparaît entouré de {...} dans la barre de formule. Notez que dans la formule $B$2:$B$6 est la plage qui contient toutes les balises pour les éléments répertoriés dans $A$2:$A$6.

enter image description here

EDIT:
Si vos correspondances ne vous dérangent pas d'être répertoriées dans une colonne plutôt que dans une liste d'une cellule, vous pouvez renvoyer des correspondances pour les balises en utilisant uniquement les fonctions de la feuille de calcul.

Où vos titres sont dans Column A, les balises sont dans Column B et la balise que vous recherchez est dans H2, vous pouvez utiliser la formule suivante dans I2 et renseignez autant que vous avez besoin:

=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")

enter image description here

La formule commence par former un tableau de nombres selon que les balises de chaque ligne contiennent le terme recherché. Si une correspondance est trouvée, le numéro de ligne est stocké dans le tableau. S'il n'est pas trouvé, 2000000 est stocké dans le tableau. Ensuite, la partie SMALL(<array>,ROW()-1) de la formule retourne la ROW()-1th plus petite valeur du tableau. Ensuite, cette valeur est passée en tant qu'argument d'index à la fonction INDEX(), où la valeur correspondant à cet index dans le tableau de titres est renvoyée. Si un nombre supérieur au nombre de lignes dans le tableau de titres est passé en argument à INDEX(), une erreur est renvoyée. Étant donné que 2000000 est passé en tant qu'argument lorsqu'aucune correspondance n'est trouvée, une erreur est renvoyée. La fonction IFERROR() renvoie alors "" dans ce cas.

Il est important de comprendre comment ROW() est utilisé dans cette formule. Si vous souhaitez afficher votre liste de résultats en commençant par une autre ligne, vous devez ajuster le deuxième argument de la fonction SMALL() afin qu'il renvoie la première plus petite valeur du tableau. Par exemple, si votre liste de résultats commence à la ligne 1 au lieu de la ligne 2, vous utiliseriez SMALL(...,ROW()) au lieu de SMALL(...,ROW()-1).

De plus, si votre liste de titres et de balises ne commence pas à la ligne 1, vous devrez également ajuster la formule. Le deuxième argument de la fonction IF() doit être ajusté pour qu'une correspondance de la première ligne de vos données renvoie 1. Par exemple, si votre liste de titres commence par la ligne 2 au lieu de la ligne 1, vous aurez besoin de la formule pour inclure IF(...,ROW($A$2:$A$7)-1,...) au lieu de IF(...,ROW($A$1:$A$6),...).

13
Excellll

Bien que cela fonctionne bien par programme dans certains cas, j'ai trouvé une approche manuelle qui fonctionnait pour moi. En utilisant des colonnes pour les balises, vous pouvez facilement marquer un élément de ligne en entrant un 0 dans la colonne. Vous avez ensuite une ligne et entrez des 1 dans chacune des colonnes de balises pour cette ligne (vous pouvez colorer cette ligne). Ensuite, lorsque vous triez en fonction de l'une des balises, la ligne 1s (bleue) sert de séparateur. Entre vos résultats filtrés (0) et tout le reste (_).

Cela a quelques avantages. 1. Vous n'êtes pas obligé de taper votre tag à chaque fois. 2. Vous pouvez facilement faire des références croisées pour vérifier si vous avez des éléments en double ou similaires qui peuvent être réduits à un.

2

Une autre idée:

Utilisez la fonctionnalité de filtre intégrée. Filtrer par la colonne Balises, vous pouvez alors rechercher des lignes contenant une balise donnée.

Une rangée avec la liste de tags: comédie, horreur, romance

apparaîtrait lors de la recherche de l’une de ces trois balises.

1
matt

Mon approche non-VBA consiste à répertorier les balises dans une colonne (disons la colonne H), en séparant les éléments avec des virgules. À partir de là, j'utilise une combinaison de "Texte en colonnes" et "Supprimer les doublons" pour obtenir ma liste de balises. Je copie ceci dans la ligne d'en-tête de ma feuille principale (dans ce cas, en commençant par la colonne L. Ensuite, dans chaque cellule sous les en-têtes de balises individuelles, entrez les informations suivantes:

=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)

Cela donne le meilleur des deux mondes - la colonne de balises (H) est facile à lire; les colonnes de balises individuelles (avec leurs 0 et leurs 1) sont faciles à lire pour l'ordinateur. C'est dynamique si vous restez dans le jeu de balises donné; sinon, vous devez ajouter votre nouvelle balise à la ligne d'en-tête, puis copier vos formules.

À partir de là, les tableaux croisés dynamiques sont votre ami.

1
user2024015

Je ne sais pas exactement comment vous voulez utiliser les balises. Mais dans Google Sheets, vous pouvez utiliser la fonction SPLIT () pour scinder une chaîne de balises (délimitées par des espaces, des virgules ou ce que vous voulez) en plusieurs autres cellules, et je 'Suis sûr que même Excel a une fonction qui peut rechercher une balise dans une cellule.

0
Michael Scheper