【问题标题】:Adding a space before the second capital letter in a cell在单元格中的第二个大写字母之前添加一个空格
【发布时间】:2014-08-01 20:33:11
【问题描述】:

我有一个 Excel 表格,其中有一列名称,每个名称都以 firstname 大写和 lastname 大写开头。就像约翰史密斯一样

我想知道 excel 中是否有办法将 JohnSmith 转化为 John Smith 。请帮忙

谢谢

【问题讨论】:

  • 我建议以here 为起点。人们已经使用了几种方法来完成您正在寻找的东西。

标签: excel-formula


【解决方案1】:

最好的答案是使用 excel 中的宏。

Function AddSpaces(pValue As String) As String

Dim xOut As String
Dim iCounter As Integer
Dim xAsc As Variant

xOut = VBA.Left(pValue, 1)
For iCounter = 2 To VBA.Len(pValue)
   xAsc = VBA.Asc(VBA.Mid(pValue, iCounter, 1))
   If xAsc >= 65 And xAsc <= 90 Then

        If VBA.Mid(pValue, iCounter - 1, 2) = "ID" Then
        'StrComp(str1, str2, vbTextCompare)
            xOut = xOut & VBA.Mid(pValue, iCounter, 1)
        Else
            xOut = xOut & " " & VBA.Mid(pValue, iCounter, 1)
        End If
   Else
      xOut = xOut & VBA.Mid(pValue, iCounter, 1)
   End If
Next
AddSpaces = xOut
End Function

不是我原来的代码,是从别处复制的,更改了一些变量以支持变量的显式声明。

【讨论】:

【解决方案2】:

正如已经建议的那样,您可以使用@Derrik 链接到的线程中列出的多个公式, 但我觉得它们看起来都很长而且很笨重。 我个人最喜欢的是:

=trim(REGEX.SUBSTITUTE(A1,"([A-Z])"," [1]"))

这需要 Morefunc 插件(见下文,它还有许多其他有用的功能)


更多功能插件

【讨论】:

  • 据我所知,是的,前提是您使用的是 32 位版本,而不是 64 位版本。但不幸的是无法确定测试。如果安装似乎不起作用,请按照本页第 4 点下的说明进行操作:ashishmathur.com/…
【解决方案3】:

从 Derik 的链接中,您可以使用这个数组公式(意味着您必须使用 ctrl+shift+enter 来确认它,而不是直接输入):

=MIN(IF(ISERROR(FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)),"",FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)))

虽然我将它修改为从第二个字符开始。这将为您提供第一个大写字母的位置,忽略第一个字符。所以如果 C2 是“JohnSmith”,这会给你 5,因为 S 在第 5 位,在单元格 D2 中。

现在您知道姓氏从哪里开始,您可以在 E2 中使用空格将全名拼凑在一起:

=LEFT(C2,D2-1)&" "&RIGHT(C2,LEN(C2)-D2+1)

这取左边的 5-1=4 个字符 John,用空格连接起来,右边的姓氏 9-5+1=5,因为 9 是全名的长度,即 Smith ,所以你最终得到了“John Smith”。

【讨论】:

  • 此方法只会在找到第一个大写字母的地方添加一个空格,而不是所有大写字母。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多