在Excel中,我有一个名为“FirstName LastName”的名称列。我想将整个列分成两列,一列包含所有名字,另一列包含所有姓氏。
到目前为止我的代码:
'Splitting the Traveler Display Name column
Dim SplitPoint As Long
'L2 is the column containing names to be split
Range("L2").Select
Do Until IsEmpty(ActiveCell)
'Search for position of space within the cell
SplitPoint = InStrRev(ActiveCell, " ", -1, vbTextCompare)
'Put the last name in the column next to the source column
ActiveCell.Offset(0, 1) = Trim(Left(ActiveCell, SplitPoint))
'Replace the source column with the first name
ActiveCell.Offset(0, 0) = Trim(Mid(ActiveCell, SplitPoint))
Loop
到目前为止我找到的解决方案要求手动选择单元格,这对我正在使用的数据量是不合理的。我找到了这个解决方案,但是我收到以下错误:无效的过程调用或参数。
答案 0 :(得分:5)
非VBA方法
为什么不使用数据~~>文本到列?
VBA方法
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim LastRow As Long, i As Long
Dim tmpArray() As String
'~~> This is the relevant sheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
LastRow = .Range("L" & .Rows.Count).End(xlUp).Row
For i = 2 To LastRow
If InStr(1, .Range("L" & i).Value, " ") Then
tmpArray = Split(.Range("L" & i).Value, " ")
.Range("M" & i).Value = tmpArray(0)
.Range("N" & i).Value = tmpArray(1)
End If
Next i
End With
End Sub
答案 1 :(得分:1)
Private Sub Sample()
Dim myRng As Range
Dim LastRow As Long
LastRow = Sheets("Sample1").UsedRange.Rows.Count
With Sheets("Sample1")
Set myRng = Sheets("Sample1").Range("A2:A" & LastRow)
End With
myRng.TextToColumns _
Destination:=Range("B2:C2"), _
DataType:=xlDelimited, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False
End Sub
我知道这个问题很老了,但是对于将来可能会遇到同样问题的人分享答案。
我在找到关于如何拆分列的答案时偶然发现了这个问题。我尝试了循环方法,但需要很长时间才能处理。 我已经尝试将Text to Columns的字面翻译为VBA。处理时间几乎是即时的,因为它与单击TextToColumns相同。
在上面的解决方案中,我将A列设置为数据(即FirstName& LastName),以便将其拆分为Range。在目的地,我将范围放在我希望分割数据出现的位置(即,名字的B列,姓氏的C列)。分隔符是一个空格。 它对我来说很好。到目前为止,我已经在2000行数据中测试了代码。
我对VBA很陌生,如果代码格式化或编写不当,我会道歉。