有没有一种方法可以将一个单元格中的三个名称转换为两个单元格?

例如,A1“ John Dory”变为A1“ John” B1“ Dory”。问题是当有三个单词(中间名)时,它会自动为三个单元格执行操作。如果它可以是A1或B1中的中间名,那将是很好的。

Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

最佳答案

我不确定您是否可以使用Text to Columns方法,以使分隔符多次出现。

此代码将采用Column A中的值并在Column B中返回名字,并在Column C中返回名字和姓氏

说明


从第2行到最后一行(Arr)加载数组(LRow
使用Excel函数LeftRight提取所需的字符串。 InStr是Excel函数Search的VBA版本。 Chr(32)只是用于空间的chr代码
在相应行上输出值。由于数组默认的第一个索引为0,因此在将索引与行号相关联时,您将需要使用i + 1,否则所有值都将偏移1。


根据需要调整列,并在第三行上调整工作表名称。这也假设存在单行标头



Sub Custom_Delim()

Dim i As Long, LRow As Long, Arr
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")

LRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Arr = ws.Range("A2:A" & LRow).Value

Application.ScreenUpdating = False
    For i = LBound(Arr) To UBound(Arr)
        ws.Range("B" & i + 1) = Left(Arr(i, 1), InStr(Arr(i, 1), Chr(32)) - 1)
        ws.Range("C" & i + 1) = Right(Arr(i, 1), Len(Arr(i, 1)) - InStr(Arr(i, 1), Chr(32)))
    Next i
Application.ScreenUpdating = True

End Sub

关于excel - 将三个单词的字符串转换为两个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53091804/

10-10 18:55