问与答114:应用Split函数拆分成数组时出错?
excelperfect
Q:我有一列数据,其中有很多数据以“%”分隔,也有一些数据没有“%”,如下图1所示。
图1
我想将带有“%”的数据以“%”为分隔进行拆分,将拆分的数据以该单元格为起点输入到其下方的单元格中,如下图2所示。
图2
我编写了一段代码:
Sub splitByColB()
Dim plr As Integer
If WorksheetFunction.CountA(Cells) > 0 Then
plr = Cells.Find(What:='*',After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
Dim r As Range, i As Long
Set r = Range('A2:A' & plr)
With ActiveSheet
Do While r.Row > 1
Dim ar() As String
ar = Split(r.Value, '%')
If UBound(ar) >= 0 Then r.Value= ar(0)
For i = UBound(ar) To 1 Step -1
r.EntireRow.Copy
r.Offset(1).EntireRow.Insert
r.Offset(1).Value = ar(i)
Next
Set r = r.Offset(-1)
Loop
End With
End Sub
但运行时出现下图3所示的错误。
图3
如何修改代码?
A:上述代码错误在于r.Value为Null。正确的代码为:
Sub splitByColBModify()
Dim plr As Integer, db
If WorksheetFunction.CountA(Cells) > 0Then
plr = Cells.Find(What:='*',After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
Dim r As Range, i As Long
With ActiveSheet
For db = plr To 2 Step -1
Dim ar() As String
ar() = Split(Cells(db, 1).Value,'%')
If UBound(ar) >= 0 ThenCells(db, 1).Value = ar(0)
For i = UBound(ar) To 1 Step -1
Cells(db, 1).EntireRow.Copy
Cells(db,1).Offset(1).EntireRow.Insert
Cells(db, 1).Offset(1).Value =ar(i)
Next
Next
End With
Cells(2, 1).Select
Application.CutCopyMode = False
End Sub
小结:
1. 代码使用Find方法来查找最后一行。
2. 由于要在已有数据中插入新行,因此使用从后向前的循环。
3. 注意Copy方法和Insert方法的使用方式。
注:今天的问题整理自ozgrid.com论坛,供有兴趣的朋友学习参考。