EXCEL数据处理讲究方法适用,三两行VBA代码直接秒了公式干不好的活儿!
- 2026-09-25 13:22:53
EXCEL数据处理讲究方法适用,三两行VBA代码直接秒了公式干不好的活儿!



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

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

小伙伴们好,今天来和大家分享一道VBA的题目。原题目是下面这样子的:

按照题目要求,需要将左侧的数据结构转换为右侧的结构。整体看下来,这道题目如果使用公式,难度则会非常大。而通过一小段代码,则可以轻轻松松地解决问题。
01
循环法

完整代码如下:
Sub 转换结构()Dim i As Integer, j As Integer, k As Integer, myarr As Variantmyarr = Range("A1").CurrentRegionFor i = 1 To UBound(myarr)If Len(myarr(i, 1)) = 3 Then k = k + 1: j = 0If Len(myarr(i, 1)) = 3 ThenCells(k + 5, 3) = myarr(i, 1)Elsej = j + 1Cells(k + 5, j + 3) = myarr(i, 1)End IfNext iEnd Sub
这段代码使用了循环+单元格赋值的方法来解决问题。这里If Len(myarr(i, 1)) = 3 Then k = k + 1: j = 0一句是重点。
If Len(myarr(i, 1)) = 3 Then k = k + 1: j = 0由于所有的姓名都是三个字的,因此用来判断新结构中新行的起始位置。当字节数等于3时,令变量k累加,同时对变量j初始赋值0。
If Len(myarr(i, 1)) = 3 ThenCells(k + 5, 3) = myarr(i, 1)Elsej = j + 1Cells(k + 5, j + 3) = myarr(i, 1)End If
再次利用IF语句来对单元格赋值。当变量等于3时,将姓名填入当前行的第一个单元格。否则,就对当前行的下一个单元格赋值。
02
大佬的思路
下面是群友空杯大佬写的一段代码,同样很简短,运行速度也比上面一段更快。

完整代码如下:
Subtest()Dimarr, x, j, rarr = Range("a1:a18")ReDimdrr(1 To 99, 1 To 20)Forx = 1 To UBound(arr)IfInStr(arr(x, 1), "-") = 0 Thenr = r + 1: drr(r, 1) = arr(x, 1): j = 0Elsej = j + 1drr(r,j + 1) = arr(x, 1)EndIfNextx[c10].Resize(r,20) = drrEndSub
基本思路两段代码是一样的。这段代码使用了数组的方式来处理数据,效率上更高!
本期内容练习文件提取方式:
链接:https://pan.baidu.com/s/1JXrJu17lvNtR6mYK5te-VQ?pwd=o949
提取码:o949
我就知道你“在看”

本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。