首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除某些关键字外,获取句子中每个单词的首字母

除某些关键字外,获取句子中每个单词的首字母
EN

Stack Overflow用户
提问于 2017-02-05 09:39:26
回答 4查看 2.4K关注 0票数 3

我认为这件事很棘手,但我想知道是否有人能找到解决办法。

我需要创建一个公式,将名字列表中的每个单词中的第一个字母取下来,例如:

中国电子科技大学

UESTC (“the”,“of”,“and”,“a”,如果可能的话,可以避免)

到目前为止我尝试过的是:

代码语言:javascript
复制
=(LEFT(H2)&MID(H2,FIND("#",SUBSTITUTE(H2&" "," ","#",1))+1,1)&MID(H2,FIND("#",SUBSTITUTE(H2&" "," ","#",2))+1,1))&J2&M2
EN

回答 4

Stack Overflow用户

发布于 2017-02-05 10:14:16

问得好!我认为您最好的选择是使用VBA创建自己的函数。将下面的代码添加到VBA编辑器中的一个新模块中,您可以在工作表上使用如下函数:

代码语言:javascript
复制
=FirstLetters(A1)

,它将返回UESTC,如您的示例所示

代码语言:javascript
复制
Function FirstLetters(str As String)
    Dim words As Variant
    Dim resultStr As String
    Dim i As Integer

    words = Split(str)
    For i = 0 To UBound(words)
        Select Case words(i)
            Case "the", "of", "and", "a"
                'ignore
            Case Else
                resultStr = resultStr & Left(words(i), 1)
        End Select
    Next i

    FirstLetters = UCase(resultStr)
End Function
票数 2
EN

Stack Overflow用户

发布于 2017-02-05 10:44:00

好的,我找到了一个有点荒谬的答案,它基本上是连接了大量的ifs来循环每个单词(VBA在这里会更容易)。下面的公式最多为9个字。如果您的字符串更多,则只需添加一些FIND(A1," ")+1即可。如果公式不适用于您,请删除其中的返回。

代码语言:javascript
复制
=IFERROR(UPPER(
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=1,IFERROR(IF(SUM(--(LEFT(A1,FIND(" ",A1)-1)={"the","of","a","and"})),"",LEFT(A1,1)),LEFT(A1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=2,IF(SUM(--(MID(A1,FIND(" ",A1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1)+1),LEN(A1))-(FIND(" ",A1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=3,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=4,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=5,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=6,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=7,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=8,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1,1)),"")&
IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",""))+1>=9,IF(SUM(--(MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1)+1,IFERROR(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1)+1),LEN(A1))-(FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1)+1))={"the","of","a","and"})),"",MID(A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1,FIND(" ",A1)+1)+1)+1)+1)+1)+1)+1)+1,1)),"")
),"")
票数 2
EN

Stack Overflow用户

发布于 2017-02-06 06:35:46

如果您使用的Excel 2016或365具有CONCAT函数,下面的公式将适用于任意长度的字符串:

代码语言:javascript
复制
=LEFT(A1,1) & CONCAT(IF(MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," the "," "), " of "," "), " a "," "), " and ", " "),ROW(OFFSET($A$1,0,0,LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," the "," "), " of "," "), " a "," "), " and ", " ")),1)),1)=" ",MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," the "," "), " of "," "), " a "," "), " and ", " "),ROW(OFFSET($A$1,1,0,LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," the "," "), " of "," "), " a "," "), " and ", " ")),1)),1),""))

请注意,这是一个数组公式,必须通过双击单元格输入,粘贴公式,然后按CTRL+SHIFT+ENTER

它将始终包括第一个词的第一个字母,即使它是一个关键的词排除。所有其他关键字都排除在外。一般来说,第一个单词的第一个字母应该总是包括在内,但如果你也需要删除它,我可以进一步修改公式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42050534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档