ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2360|回复: 10

[求助] VBA函数实现Excel数据分解

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-2-16 11:29 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
现在有个Excel源数据,需要对Excel中数据进行分解为指定的格式,希望大神指教~
解释:

(1)源数据中有四列,首先对商品商家做筛选,需要挨个对商家数据筛选,比如先筛选“广东终端”的商家,筛选结果为
         广东终端的商品名称和手机编号。

(2)对[广东终端]商家筛选后的数据再次筛选,根据商品名称筛选,商品名称排除最后两个空格的颜色和内存属性,对比最后两个空格之前的名称,只要名称一致,即为同一款手机,比如 [TCL P620M 移动版 移动版 蓝色 16G]  和 [TCL P620M 移动版 移动版 黄色 16G],祛除最后两个空格的 [蓝色 16G] 和 [黄色 16G],前面的名称一致,即为同一款手机,即[TCL P620M 移动版 移动版]。

(3)经过商家和商品名称筛选后的结果,提取【手机编号】信息,换行显示,导出为 txt 格式,文件名称为商品名称+数量。例如:[TCL P620M 移动版 共22单.txt]

(4)最后按照商家名称建立一个文件夹,导出的商品名称txt文件都放入此文件夹中,导出的结果在附件中。




解释(1)

解释(1)

解释(2)

解释(2)

解释(2)

解释(2)

解释(4)

解释(4)

解释(3)

解释(3)

导出结果.zip

32.77 KB, 下载次数: 10

源数据.zip

272.23 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2016-2-16 14:23 | 显示全部楼层
只实现了1/2,
后面太麻烦,没写完
新建文件夹.rar (429.6 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

发表于 2016-2-16 14:29 | 显示全部楼层
送上个自定义函数:
子字符串在字符串中出现N多次,截取倒数第X个之前的字符,N》x
  1. Function Countss(mstr, substr, ints)
  2.     s = mstr
  3.     For i = 1 To ints
  4.         s = Mid(s, 1, InStrRev(s, substr) - 1)
  5.         If s = "" Then
  6.             Countss = mstr
  7.             Exit For
  8.         End If
  9.     Next
  10.     Countss = s
  11. End Function
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-16 15:05 | 显示全部楼层
opiona 发表于 2016-2-16 14:23
只实现了1/2,
后面太麻烦,没写完

先学习下,感谢~

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:27 | 显示全部楼层
供参考。

牛宝宝吃草54335_VBA函数实现Excel数据分解.rar

254.66 KB, 下载次数: 138

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:35 | 显示全部楼层

追着山老师跑,嘿嘿
不如我这样请教您一下,
st.Cells(j, 2) = d1(bz1)
这个语句,有什么会影响它的效率呢,
其中,st是表的别名,d1是我生成的一个字典,生成这个字典用不了1秒
但是赋值这一句,会超过1秒
谢谢

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:38 | 显示全部楼层
  1. Sub lqxs()
  2. Dim Arr, i&, x$, y$, aa, j&, fso, myPath$, pa$, pa1$, nm1$
  3. Dim d, k, t, kk, tt, f, ii&, s$
  4. Application.ScreenUpdating = False
  5. Set d = CreateObject("Scripting.Dictionary")
  6. Set fso = CreateObject("Scripting.FileSystemObject")
  7. Sheet1.Activate
  8. myPath = ThisWorkbook.Path & ""
  9. Arr = [a1].CurrentRegion
  10. For i = 2 To UBound(Arr)
  11.     x = Arr(i, 3): y = ""
  12.     aa = Split(Arr(i, 2))
  13.     For j = 0 To UBound(aa) - 2
  14.         y = y & aa(j) & " "
  15.     Next
  16.     If d.exists(x) = False Then Set d(x) = CreateObject("Scripting.Dictionary")
  17.     d(x)(y) = d(x)(y) & Arr(i, 4) & ","
  18. Next
  19. k = d.keys: t = d.items
  20. For i = 0 To UBound(k)
  21.     pa = myPath & k(i): Set f = Nothing
  22.     If Not (fso.FolderExists(pa)) Then
  23.         Set f = fso.CreateFolder(pa)
  24.     End If

  25.     kk = t(i).keys: tt = t(i).items
  26.     For ii = 0 To UBound(kk)
  27.         If Not f Is Nothing Then
  28.             pa1 = f.Path & "" & kk(ii): s = ""
  29.         Else
  30.             pa1 = pa & "" & kk(ii): s = ""
  31.         End If
  32.         tt(ii) = Left(tt(ii), Len(tt(ii)) - 1)
  33.         If InStr(tt(ii), ",") Then
  34.             aa = Split(tt(ii), ",")
  35.             For j = 0 To UBound(aa)
  36.                 s = s & aa(j) & vbCrLf
  37.             Next
  38.         Else
  39.             s = tt(ii)
  40.         End If
  41.         nm1 = pa1 & " 共" & UBound(aa) + 1 & "单.txt"
  42.         Open nm1 For Output As #1
  43.         Print #1, s
  44.         Close (1)
  45.     Next
  46. Next
  47. MsgBox "OK"
  48. Application.ScreenUpdating = True
  49. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:39 | 显示全部楼层
请见附件。

源数据.rar

273.17 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:48 | 显示全部楼层
yangjia1980 发表于 2016-2-16 16:35
追着山老师跑,嘿嘿
不如我这样请教您一下,
st.Cells(j, 2) = d1(bz1)


这个问题不好回答,我也不太清楚有什么会影响这个语句的效率。
生成字典与给单元格赋值不可比,哪个快哪个慢不说明什么。
生成字典好比是老师写出一个教案,赋值好比是给学生讲课,这两个过程哪个花时多也不是固定的。
通常,操作对象(比如给单元格赋值)比较费时,内存操作比较省时,好比写教案,有时就是一个念头一闪,教案就出来了。

TA的精华主题

TA的得分主题

发表于 2016-2-16 16:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

蓝老师也来了啊,您能帮我看看这个帖子不?谢谢
http://club.excelhome.net/thread-1258960-1-1.html
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 10:03 , Processed in 0.041739 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表