夜雨聆风学习资料网

ARTICLE · 1027737

今天以生动的对比方式告诉你,VBA才是EXCEL学习的王道!

今天以生动的对比方式告诉你,VBA才是EXCEL学习的王道!

欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路

朋友们好,这里是EXCEL应用之家。今天要和小伙伴们分享一道编号问题。大家会讲了,编号问题,常会用到COUNTIF函数,不过今天的题目有些不一样,且还稍有些难度的。

原题是这样的:

AB两列分别存放着起止编号。现在我们要把编号按自然数展开,同时重新排列,如D列所示。

怎么样,朋友们有什么好的方法吗?

01

函数公式法

低版本环境下,公式写出来老长老长的。这里主要用到了数据重构的两个技巧。

在单元格D1中输入下列公式,三键确认并向下拖即可。

=SMALL(ROW(INDIRECT(INDEX($A$2:$A$6,SMALL(IF(B$2:B$6-A$2:A$6+1<COLUMN(A:W),100,ROW(A$2:A$6)),ROW(A1))-1,)&":"&INDEX($B$2:$B$6,SMALL(IF(B$2:B$6-A$2:A$6+1<TRANSPOSE(ROW($1:$1005)),100,ROW(A$2:A$6)),ROW(A1))-1,))),MOD(SMALL(IF(B$2:B$6-A$2:A$6+1<COLUMN(A:W),10^5,ROW(A$2:A$6)*100+COLUMN(A:W)),ROW(A1)),100))

公式太长,不招人喜欢,不拆解了。如有兴趣的小伙伴们可以给我留言哦!

02

VBA代码

今天要着重讲讲第二种方法。相比之下,代码则是异常的简单。

完整代码如下:

Sub 编号()    Dim i%, j%, k%, arr As Variant, brr As Variant    arr = Range("A2:B6")    ReDim brr(1 To 1001 To 1)    For i = 1 To UBound(arr)        For k = arr(i, 1) To arr(i, 2)            j = j + 1            brr(j, 1) = k        Next    Next    [H2].Resize(1001) = brrEnd Sub

通过两个循环嵌套,及变量j的累加,举重若轻般完成了题目。代码的逻辑思路更加简单,不再赘述了。

好了朋友们,今天和大家分享的内容就是这些了!喜欢我的文章请分享、转发、点赞和收藏吧!如有任何问题可以随时私信我哦!

我就知道你“在看”

推荐阅读

相关学习资料

返回首页浏览学习资料