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



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

欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路

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

A、B两列分别存放着起止编号。现在我们要把编号按自然数展开,同时重新排列,如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 Variantarr = Range("A2:B6")ReDim brr(1 To 100, 1 To 1)For i = 1 To UBound(arr)For k = arr(i, 1) To arr(i, 2)j = j + 1brr(j, 1) = kNextNext[H2].Resize(100, 1) = brrEnd Sub
通过两个循环嵌套,及变量j的累加,举重若轻般完成了题目。代码的逻辑思路更加简单,不再赘述了。
我就知道你“在看”
