VBA教程:如何将二维表转为一维表?

1周前 (11-15 02:17)阅读1回复0
xxhh
xxhh
  • 管理员
  • 注册排名4
  • 经验值69935
  • 级别管理员
  • 主题13987
  • 回复0
楼主

点击“预约”按钮,Excel曲播课免费进修

哈喽,各人好。

今天来给各人分享一个 高手版的二维表转一维表身手。

我称之为一劳永逸的办法——VBA!

那个问题,也是来自于一位学员的乞助:他的数据表如下图所示:

他的需求是将如许的一组数据,转化成下面的格局:

源数据中存在合并单位格,假设利用函数的话,会相当的困难。即使没有合并单位格,利用函数操做二维表转一维表也不随便。

总之就是难难难,难于上彼苍。

不外, 好在我们会VBA啊!

翻开工做表后,按ALT+F11组合键,翻开VBE界面,在工程窗口单击鼠标右键,按下图插进一个模块。

选中模块,在属性窗口(假设你没有属性窗口,能够按F4弹出),在名称处间接改成你要的字即可。

双击适才添加的模块,使得代码区是模块的代码输进区域。将下面的代码复造到你的代码区:

万万别小瞧下面那串VBA代码,假设请专人来写,那可是要付费的呀!今天就当做福利免费分享给各人吧!

向上滑动阅览

Sub 二转一

With Sheets("转化前") '''利用工做表《转化前》

arr = .UsedRange '''操纵UsedRange属性,将利用的单位格区域放进数组arr中,构成二维数组

End With '''with完毕语句

'''在数组中将合并单位格形成的空值填充上值

For i = 2 To UBound(arr) '''轮回变量i,在第2行起头,轮回到最初一行数据,轮回第一维度

If arr(i, 1) = "" Then '''揣度语句,假设数组第一列的值为空,则

arr(i, 1) = arr(i - 1, 1) '''此数组元素值等于上一行的数组元素值

End If '''揣度语句完毕

Next i '''轮回语句完毕

Set d = CreateObject("ing.dictionary") '''定义d为字典脚本

For i = 2 To UBound(arr) '''再次逐行遍历数组arr

For j = 3 To UBound(arr, 2) - 1 '''轮回变量j,从第3列起头,逐列轮回数组arr的第二维度,不包罗最初一列

If arr(i, j) 0 Then '''假设行列穿插点上的数组元素值大于0,则阐明此值我们应该枚举

s = arr(i, 1) "|" arr(i, 2) "|" arr(1, j) '''将型号、颜色、规格,合并为一个字符串s,用|间隔

d(s) = arr(i, j) '''将s字符串拆进字典d的key中,而且赋值对应item值为对应的数值

End If '''揣度语句完毕

Next j '''j轮回语句完毕

Next i '''i轮回语句完毕

With Sheets("转化后") '''利用工做表《转化后》

.UsedRange.ClearContents '''利用ClearContents办法,将被利用单位格区域清空

.[A1] = "型号" '''A1单位格赋值字符串“型号”

.[B1] = "颜色" '''同上,赋值B1单位格

.[C1] = "规格" '''同上,赋值C1单位格

.[D1] = "数值" '''同上,赋值D1单位格

k = 1 '''设置一个变量k,初始值为1

For Each dic In d.keys '''在字典d中轮回每一个字典元素dic

k = k + 1 '''计数器,每轮回一次,累加1。做为单位格行号利用

'''Split函数:按指定字符,拆分字符串,成为一个一维数组,数组编号从0起头

.Cells(k, 1) = Split(dic, "|")(0) '''对应行号k的A列单位格,赋值拆分后的一个值

.Cells(k, 2) = Split(dic, "|")(1) '''同上理,赋值第二个值

.Cells(k, 3) = Split(dic, "|")(2) '''同上理,赋值第三个值

.Cells(k, 4) = d.Item(dic) '''对应的item值,赋值给D列单位格

Next '''完毕for each轮回

End With '''with完毕语句

Erase arr '''释放arr数组

Set d = Nothing '''释放字典d

End Sub '''工程完毕

点击运行按钮,就能够完成操做。

假设你想进修代码原理, 代码里给各人也附上了正文,那将是一个很好的过程。

最初需要重视1点: 工做表需另存为.XLSM格局,不然代码会保留不上哟。

好啦,以上就是今天的所有内容,感激你的看看,觉得根底还欠好的同窗,欢送进修下面那套工感化得上的Excel操练营!

0
回帖

VBA教程:如何将二维表转为一维表? 期待您的回复!

取消