删除 Excel 中的 3 个字母的缩写

删除 Excel 中的 3 个字母的缩写

我在 excel 中有一列期刊文章标题,我需要从中提取认知概念或技术术语。预处理部分之一包括删除常用但不代表概念的缩写,例如 NGC 代表新总目录或 VLA 代表天文学中的甚大阵列。几乎所有这些缩写都是 3 个字母的单词,全部大写。有没有办法删除这些词?我在 excel 中安装了 Kutools,如果这很重要的话。

编辑:我附上了一些标题的图片。所有标题都在一列中,每个标题在一个单元格中。在附图中,我想删除 AWM、ESO、SFI、NGC。这里不需要区分常用缩写和技术术语,除了在我的情况下,技术术语需要是单词或短语。即使这些缩写有意义,它们也不代表我的数据中的概念,因此需要删除,以免由于它们的频率而歪曲数据分析。

在此处输入图片描述

答案1

老实说,VBA 方法可能更简单,但无论如何我都喜欢了解在 PowerQuery 中是否可以实现这些功能!

答案是肯定的!我将您的文本复制到表格中,并将列标题设为“数据”。

然后,此查询从文本中删除 TLA:

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"

完成后,它看起来像这样:

在此处输入图片描述

几乎所有这些都可以通过 UI 完成,除了 Group By 步骤,您需要先按索引分组并对数据求和,这当然会产生错误,然后在高级编辑器中编辑查询以将 Sum 操作更改为以Text.Combine空格作为分隔符。

答案2

尝试一下:

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

前:

在此处输入图片描述

之后:

在此处输入图片描述

笔记:

  1. 您可以扩展该Array()语句以包含您需要删除的任何其他子字符串。
  2. 子字符串可以出现在字符串中的任何位置。
  3. 单个单元格可以包含多个子字符串。
  4. 使用Range.Replace避免了循环遍历范围内的每个单元格的需要。

答案3

您可以使用 VBA 代码来实现此目的:

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

相关内容