1 votes

Suppression des abréviations de 3 lettres dans excel

J'ai une colonne pleine de titres d'articles de journaux dans Excel, et j'ai besoin d'en extraire des concepts cognitifs ou des termes techniques. L'une des parties du prétraitement consiste à supprimer les abréviations qui sont couramment utilisées mais qui ne représentent pas un concept, comme NGC pour New General Catalogue ou VLA pour Very Large Array en astronomie. Presque toutes ces abréviations sont des mots de trois lettres, tous en majuscules. Existe-t-il un moyen de supprimer ces mots ? J'ai installé Kutools dans Excel, si cela a de l'importance.

EDIT: J'ai joint une image de certains des titres. Tous les titres sont dans une seule colonne, avec chaque titre dans une cellule. Dans l'image ci-jointe, j'aimerais supprimer AWM, ESO, SFI, NGC. Il n'y a pas de distinction en tant que telle à faire ici entre les abréviations d'usage courant et les termes techniques, si ce n'est que dans mon cas, les termes techniques doivent être des mots ou des phrases. Même si ces abréviations ont une signification, elles ne représentent pas un concept dans mes données et doivent donc être supprimées afin de ne pas fausser l'analyse des données en raison de leur fréquence.

enter image description here

2voto

FlexYourData Points 5655

L'approche VBA pourrait être plus simple, mais j'aime apprendre si les choses sont possibles dans PowerQuery de toute façon !

La réponse est oui ! J'ai copié votre texte dans un tableau et j'ai fait de l'en-tête de colonne "données".

Cette requête supprime ensuite les TLA du texte :

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed type from mixed to text" = Table.TransformColumnTypes(Source,{{"data", type text}}),
    #"Added Index to enable split/apply/combine" = Table.AddIndexColumn(#"Changed type from mixed to text", "Index", 0, 1),
    #"Split each sentence by space onto new rows" = Table.ExpandListColumn(Table.TransformColumns(#"Added Index to enable split/apply/combine", {{"data", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "data"),
    #"Add a column to identify Three-Letter-Acronyms (TLA)" = Table.AddColumn(#"Split each sentence by space onto new rows", "TLA", each Text.Length([data])=3 
and Text.Upper([data]) = [data] 
and Value.Is(Value.FromText([data]), type text)),
    #"Filter the rows so that TLAs are hidden" = Table.SelectRows(#"Add a column to identify Three-Letter-Acronyms (TLA)", each ([TLA] = false)),
    #"Hide the TLA column (it's no longer needed)" = Table.RemoveColumns(#"Filter the rows so that TLAs are hidden",{"TLA"}),
    #"Group by index, concat. text using space delimiter" = Table.Group(#"Hide the TLA column (it's no longer needed)", {"Index"}, {{"data", each Text.Combine([data]," "), type text}}),
    #"Remove the index" = Table.RemoveColumns(#"Group by index, concat. text using space delimiter",{"Index"})
in
    #"Remove the index"

Quand il est terminé, il ressemble à ça :

enter image description here

Presque tout cela peut être fait avec l'interface utilisateur, à l'exception de l'étape Group By, où vous devez d'abord regrouper par index et additionner les données, ce qui produit évidemment une erreur, puis modifier la requête dans l'éditeur avancé pour changer l'opération Sum en Text.Combine avec un espace comme délimiteur.

1voto

Gary's Student Points 18946

Essayez ceci :

Sub KleanUp()
    arr = Array("AWM", "ESO", "SFI", "NGC")
    For Each a In arr
        Cells.Replace what:=a, replacement:=""
    Next a
End Sub

Avant :

enter image description here

et après :

enter image description here

NOTES :

  1. Vous pouvez développer le Array() pour inclure toutes les autres sous-chaînes que vous devez supprimer.
  2. Les sous-chaînes peuvent apparaître n'importe où dans la chaîne.
  3. Une même cellule peut contenir plus d'une sous-chaîne.
  4. Utilisation de Range.Replace évite d'avoir à boucler sur chaque cellule de la plage.

0voto

programmer365 Points 1

Vous pouvez utiliser un code VBA pour cela :

Sub Calc()
  Dim intC As Integer
  Dim objR As Object
  Set objR = CreateObject("VBScript.regexp")
  With objR 
    .Pattern = ".*[A-Z]{3}.*" 
    .IgnoreCase = False
  End With
  intC = 10 ' MAKE SURE TO REPLACE 10 WITH THE LAST CELL NUMBER OF YOUR COLUMN
  For i = 1 To intC 
    If objR.Test(Range("A" & i).Value) Then
      Range("A" & 1).Value = ""
    End If
  Next
End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X