首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >问与答114:应用Split函数拆分成数组时出错?

问与答114:应用Split函数拆分成数组时出错?

作者头像
fanjy
发布2021-04-21 16:37:01
发布2021-04-21 16:37:01
1.9K0
举报
文章被收录于专栏:完美Excel完美Excel

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档