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

14

Je suis novice dans les feuilles de calcul, alors j'espère que vous me pardonnerez si je pose une question super évidente.

Est-il possible d'utiliser des balises dans Excel / Google Spreadsheet? Je crée une feuille de calcul 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 étiquetés avec "politique", je peux peut-être rechercher / afficher / pivoter avec cette étiquette.

De préférence, les balises devraient toutes être dans une seule cellule, chaque mot étant séparé par une virgule. Si chaque mot était dans sa propre cellule, cela rendrait le tableau vraiment désordonné, je pense.

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

Merci!

nusantara
la source
Je n'ai jamais vu de solution de balise dans Excel, mais cela ne veut pas dire qu'il n'y en a pas. Peut-être consultez evernote
Raystafarian

Réponses:

13

Pour autant que je sache, il n'y a pas de fonctionnalités intégrées qui peuvent 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 ce faire.

Étape 1 : appuyez sur Alt+ F11pour ouvrir le volet de l'éditeur VBA dans Excel. Insérez un nouveau module et collez-le dans 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 dont vous disposez.

É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 de 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 sur Ctrl+ Shift+ Enter, vous entrez la formule sous forme de formule matricielle. Il apparaîtra entouré par {...}dans la barre de formule. Notez que dans la formule se $B$2:$B$6trouve la plage contenant toutes les balises des éléments répertoriés dans $A$2:$A$6.

entrez la description de l'image ici

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

Où vos titres sont Column A, les balises sont Column B, et l'étiquette que vous recherchez est dans H2, vous pouvez utiliser la suivante formule de tableau dans I2et remplir aussi loin 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)),"")

entrez la description de l'image ici

La formule fonctionne en formant d'abord un tableau de nombres selon que les balises de chaque ligne contiennent le terme de recherche. 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 SMALL(<array>,ROW()-1)partie de la formule renvoie la ROW()-1valeur la plus petite du tableau. Ensuite, cette valeur est passée comme argument d'index à la INDEX()fonction, où la valeur à cet index dans le tableau de titres est retournée. Si un nombre supérieur au nombre de lignes du tableau de titres est passé INDEX()en argument, une erreur est renvoyée. Étant donné que 2000000 est passé comme argument lorsqu'aucune correspondance n'est trouvée, une erreur est renvoyée. La IFERROR()fonction retourne 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 commençant dans une ligne différente, vous devrez ajuster le deuxième argument de la SMALL()fonction afin qu'il renvoie la première plus petite valeur du tableau. Par exemple, si votre liste de résultats commence dans la ligne 1 au lieu de la ligne 2, vous utiliseriez à la SMALL(...,ROW())place de SMALL(...,ROW()-1).

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

Excellll
la source
Wow, cela fonctionne parfaitement! Je le préfère cependant sur Google Spreadsheet. Mais il utilise JavaScript. Je vais essayer de faire quelque chose de similaire là-bas, même si je suis un débutant complet et absolu avec la langue. Juste deux autres questions: que signifie «résumer» les données? Que fait votre code à l'étape 1? Je pose cette question en particulier, car je pense que je devrais peut-être faire de même avec JavaScript dans Google Spreadsheet. Merci beaucoup pour votre solution!
nusantara
Super, je suis content que ce soit utile. Par "résumer", je veux juste dire créer une liste de titres correspondants séparés par des virgules. Le VBA est requis à cet effet. Avec les fonctions Excel intégrées, il est assez simple de créer une formule de tableau qui peut sélectionner les balises correspondantes. Cependant, il n'est pas possible de renvoyer ces résultats dans une cellule sans VBA, car la CONCATENATEfonction dans Excel ne peut pas prendre un tableau comme argument (elle lit uniquement le premier élément du tableau si vous l'essayez). La fonction VBA est conçue pour créer des listes séparées par des virgules à partir d'un tableau de valeurs.
Excellll
Après avoir écrit la réponse ci-dessus, j'ai réalisé qu'il existe un moyen de faire quelque chose de similaire sans VBA. Au lieu de renvoyer la liste des titres correspondants dans une cellule, une colonne de titres correspondants peut être renvoyée. Je peux modifier mon article pour inclure également cette méthode si vous êtes intéressé.
Excellll
C'est possible sans VBA? Ce serait mieux, je pense. Si ce n'est pas trop gênant, oui, ce serait génial si vous pouviez inclure la méthode que vous avez mentionnée. Ce serait tellement utile pour quiconque recherche ce sujet! Merci d'avoir expliqué "résumé". J'ai aussi essayé la concaténation mais, ouais, je ne pouvais pas l'utiliser comme je le voulais. Maintenant je sais que ça ne peut pas se comporter comme un argument.
nusantara
Oui c'est possible. J'essaierai de poster la solution ici dans quelques minutes. Désolé pour le retard!
Excellll
2

Tout en faisant cela par programme fonctionne bien dans certains cas, j'ai trouvé une approche manuelle a fonctionné pour moi. En utilisant des colonnes pour les balises, vous pouvez facilement baliser un élément de ligne en entrant un 0 dans la colonne. Vous avez alors une ligne et entrez 1 dans chacune des colonnes de balises pour cette ligne (vous pouvez colorer cette ligne). Ensuite, lorsque vous triez selon l'une des balises, la ligne 1s (bleue) agit comme un séparateur. Entre vos résultats filtrés (0s) et tout le reste (_).

Cela présente quelques avantages. 1. Vous n'avez pas besoin de taper votre tag à chaque fois. 2. Vous pouvez facilement croiser les références pour vérifier si vous avez des articles en double ou similaires qui peuvent être réduits à un.

James Stephen Brown
la source
1

Une autre idée:

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

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

s'afficherait lors de la recherche de l'une de ces trois balises.

mat
la source
1

Mon approche non VBA consiste à répertorier les balises dans une colonne (disons la colonne H), en séparant les éléments par des virgules. À partir de là, j'utilise une combinaison de "Text to Columns" et "Remove Duplicates" pour obtenir ma liste de balises. Je copie au-delà de cela dans la ligne d'en-tête de ma feuille principale (dans ce cas, en commençant dans la colonne L. Ensuite, dans chaque cellule sous les en-têtes de balises individuelles, entrez ce qui suit:

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

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

De là, les tableaux croisés dynamiques sont votre ami.

user2024015
la source
0

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

Michael Scheper
la source