交换excel列中的分隔字符串

交换excel列中的分隔字符串,excel,Excel,我在一个非常大的excel电子表格中有一列,在某些情况下格式不正确。它应该首先包含街道地址,然后是名称,用连字符分隔,如图所示: 圣史密斯大街123号 但是,有些格式是相反的,例如: 琼斯231高街 所有地址都以数字开头,所有名称都以字母开头。我正在寻找一个宏或代码,将只交换名称和地址,它是错误的格式。我曾尝试将其转换为逗号分隔,以将它们分开,但由于它们只是间歇性出现,我仍然需要手动逐个修复它们 有什么建议吗?我决不是一个Excel宏专家。谢谢 拆分连字符上的字符串,然后在第二个元素中查找空格

我在一个非常大的excel电子表格中有一列,在某些情况下格式不正确。它应该首先包含街道地址,然后是名称,用连字符分隔,如图所示:

圣史密斯大街123号

但是,有些格式是相反的,例如:

琼斯231高街

所有地址都以数字开头,所有名称都以字母开头。我正在寻找一个宏或代码,将只交换名称和地址,它是错误的格式。我曾尝试将其转换为逗号分隔,以将它们分开,但由于它们只是间歇性出现,我仍然需要手动逐个修复它们


有什么建议吗?我决不是一个Excel宏专家。谢谢

拆分连字符上的字符串,然后在第二个元素中查找空格

dim i as long, tmp as variant

with worksheets("sheet1")
    for i = 2 to .cells(.rows.count, "a").end(xlup).row
        tmp = split(.cells(i, "a").value2, "-")
        if cbool(instr(1, tmp(1), " ")) then _
            .cells(i, "a") = join(array(tmp(1), tmp(0)), "-")
    next i
end with
正如你所写

  • 街道名称是以数字开头,以连字符或字符串结尾的任何字符串
  • 名称是以非数字开头,以连字符或字符串结尾的任何字符串

这可以只使用本机VBA来完成(虽然起初我打算使用正则表达式)

  • 在连字符上拆分
  • 根据是否以数字开头重新排列
  • 如果没有连字符或没有指定的数字和非数字开头,请执行一些错误检查


姓氏中有空格吗?正如我所说的,在合伙关系中也可以有符号,如符号和。比如“史密斯和琼斯”。顺便说一下,谢谢你的回复。
Option Explicit
Function fmtAddressName2(S As String) As String
Dim sAddr As String, sName As String
Dim v As Variant

v = Split(S, "-")

On Error GoTo badFormat

If IsNumeric(Left(v(0), 1)) And Not IsNumeric(Left(v(1), 1)) Then
    sAddr = v(0)
    sName = v(1)
ElseIf Not IsNumeric(Left(v(0), 1)) And IsNumeric(Left(v(1), 1)) Then
    sAddr = v(1)
    sName = v(0)
Else
    GoTo badFormat
End If

fmtAddressName2 = sAddr & "-" & sName
Exit Function

badFormat:
    'return unchanged string
    fmtAddressName2 = S

    'or could return an error message

End Function