Scott想知道如何使Excel在给定单元格中的每个字母之间自动添加破折号。举个例子,如果单元格A1包含“房子”,斯科特想将其转换为“H-O-U-S-E”。

这可以用一个公式来完成,但它很快变得很困难。例如,下面的公式可以用来放置任何你输入到单元格A1字母之间破折号:

=CHOOSE(LEN(A1),A1,LEFT(A1,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1) & "-"

& RIGHT(A1,1),LEFT(A1,1) & "-" & MID(A1,2,1) & "-"

& MID(A1,3,1) & "-" & MID(A1,4,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1)

& "-" & MID(A1,4,1) & "-" & MID(A1,5,1) & "-" & RIGHT(A1,1))

式的这个特定的例子将只在长度上文本工作到六个字符。因此,它会正常工作的“房子”,而不是“家庭”。该公式可以延长,但再次,它很快就会变得很长。

更好的办法是使用宏来完成转换。如果你想破折号正确插入到细胞中,你可以使用宏像这样:

Sub AddDashes1()

Dim Cell As Range     Dim sTemp As String     Dim C As Integer

For Each Cell In Selection         sTemp = ""

For C = 1 To Len(Cell)

sTemp = sTemp & Mid(Cell, C, 1) & "-"

Next         Cell.Value = Left(sTemp, Len(sTemp) - 1)

Next End Sub

该宏被设计成在细胞上的选定范围内使用。只需选择你要转换的单元格,然后运行宏。破折号在小区的每个字母之间添加。

如果您不想修改原来的单元格的值,你可以创建一个用户定义的函数,将做的工作:

Function AddDashes2(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp & Mid(Src, C, 1) & "-"

Next     AddDashes2 = Left(sTemp, Len(sTemp) - 1)

End Function

要使用此功能,请在工作表中使用以下内容:

=AddDashes2(A1)

如果你想确保该功能是一个比较稳健的,你可以修改它,以便它处理多个单词。在这种情况下,您不希望它将空格视为“破折号”。例如,你想例程破折号添加到 “一二”,所以它出来为 “O-N-E T-W-O” 的而不是 “O-N-E- -t-W-O”。函数的以下变体可以解决问题:

Function AddDashes3(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp & Mid(Src, C, 1)

If Mid(Src, C, 1) <> " " And           Mid(Src, C + 1, 1) <> " " And           C < Len(Src) Then             sTemp = sTemp & "-"

End If     Next     AddDashes3 = sTemp End Function

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

这个技巧(9634)适用于Microsoft Excel 2007中,2010年,2013年,2016年,2019年,和Excel在Office 365中你可以找到一个版本,这个尖端的Excel这里老菜单界面: