如何从Excel中的单元格中获取单词

我想要从单元格中获得单词。 例如,单元格A2的值为“我的名字是jayson”。 我想要说的是:“名字”和“杰森”。 我想排除less于3个字符的单词。 我如何在Excel中使用公式/函数?

谢谢。

此代码应该从包含要拼接的数据的工作表运行。 我假定你正在A列工作

代码

  1. 使用正则expression式删除所有小于或等于3个字符的字母数字string
  2. 将修改后的一组string转储到新创build的表单中
  3. 使用Excel的“文本到列”拆分这些string

变体数组被用来使这个过程更有效率

{更新:添加没有循环版本}

在这里输入图像描述

Original Code

  Sub Spliced() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim rng1 As Range Dim objRegex Dim X Dim lngRow As Long Set ws1 = Sheets(1) Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp)) Set ws2 = Sheets.Add X = rng1.Value2 Set objRegex = CreateObject("vbscript.regexp") With objRegex .Pattern = "\b\w{1,3}\b" .Global = True End With For lngRow = 1 To UBound(X) X(lngRow, 1) = Application.Trim(objRegex.Replace(X(lngRow, 1), vbNullString)) Next ws2.Range(rng1.Address) = X ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True End Sub 

Updated:No loops

 Sub Spliced_NoLoops() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim rng1 As Range Dim objRegex Dim strDelim As String Dim strOut As String strDelim = "||" Set ws1 = Sheets(1) Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp)) strOut = Join(Application.Transpose(rng1), strDelim) Set ws2 = Sheets.Add Set objRegex = CreateObject("vbscript.regexp") With objRegex .Pattern = "\b\w{1,3}\b" .Global = True End With ws2.Range(rng1.Address) = Application.Transpose(Split(Application.Trim(objRegex.Replace(strOut, vbNullString)), "||")) ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True End Sub 

你不显示你所尝试的,所以编码从头开始…
通过细胞到分裂的范围这个function大致如下:

  1. 创build一个集合 ,我们将把len> 2的任何string
  2. 将单元格内容分割成一个数组。 ( 变体可以包含数组 )
  3. 评估每个片段的长度并添加到长度> 2的收集string
  4. 函数的返回值是一个具有限定string的集合

请在运行任何VBA之前始终保存您的工作。 干杯,快乐的编码。

 function splitter(byref rng as range) dim return_value as collection set return_value = new collection dim split_result as variant dim idx as integer split_result = split(rng.value, " ") for idx = lbound(split_result) to ubound(split_result) if len(split_result(idx)) > 2 then return_value.add(split_result(idx)) end if next splitter = return_value end function 

我手边没有Windows或Mac OStesting,但是语法应该是正确的,如果不是这样的话。