Scott想知道如何使Excel在给定单元格中的每个字母之间自动添加破折号。例如,如果单元格A1包含“房屋”,Scott希望将其转换为“ 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培训的来源。

本技巧(9633)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: