问与答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论坛,供有兴趣的朋友学习参考。

(0)

相关推荐