ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:如何按要求提取数据(字典)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-16 09:15 | 显示全部楼层 |阅读模式
求助问题说明,附件中初始表格是原始数据,转化格式中黄色高亮的字母代表数据来自初始表格的哪一列,如Y代表初始表格的Y列,TBD为待定空白,完成表格是完成后的样子。
希望的效果是转化格式中增加一个控件,选中后可导入初始表格,再导出完成表格。
正式数据每个都在500行左右,是否用字典写会加快处理速度。
学习VBA中,可以看懂部分代码,刚开始学习字典,对字典的循环逻辑还不能理解,可能的话在代码中给一些注解,方便学习,谢谢。

例子.rar

24.69 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2019-10-16 10:18 | 显示全部楼层
500行数据不多,也不是一定需要用字典,普通循环判断即可。
只是结果表中显示的似乎有与你的要求不相符的:如CA不是US的也有,不是FedEx Ground的也有;

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-16 13:54 | 显示全部楼层
老师,我现在用普通的方式写了一个满足需求的,能帮忙看看可以优化的地方,谢谢

Sub 转换()
' 快捷键: Ctrl+a
Dim a As Workbook, b, sht As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
b = Application.GetOpenFilename("Excel 文件 ,*.csv*")
If b = False Then MsgBox "你没有选择文件"
Set a = Workbooks.Open(b)
a.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("数据").[a1]
a.Close False

Dim arr, pos, i, j
pos = Array(25, 26, 27, 28, 29, 30, 31)
With Sheets("数据")
arr = .Range("A2:AP" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
For i = 1 To UBound(arr, 1)
    arr(i, 1) = ""
    arr(i, 2) = arr(i, pos(0))
    arr(i, 3) = arr(i, pos(0))
    arr(i, 4) = arr(i, pos(1))
    arr(i, 5) = arr(i, pos(2))
    arr(i, 6) = arr(i, pos(3))
    arr(i, 7) = arr(i, pos(4))
    arr(i, 8) = arr(i, pos(5))
    arr(i, 9) = "US"
    arr(i, 10) = arr(i, pos(6))
    arr(i, 11) = ""
    arr(i, 12) = ""
    arr(i, 13) = ""
    arr(i, 14) = "92"
    arr(i, 15) = "1"
    arr(i, 16) = ""
    arr(i, 17) = "3"
    arr(i, 18) = ""
    arr(i, 19) = ""
    arr(i, 20) = ""
    arr(i, 21) = ""
    arr(i, 22) = ""
    arr(i, 23) = ""
    arr(i, 24) = ""
    arr(i, 25) = arr(i, pos(0))
    arr(i, 26) = ""
    arr(i, 27) = ""
    arr(i, 28) = ""
    arr(i, 29) = ""
    arr(i, 30) = ""
    arr(i, 31) = ""
    arr(i, 32) = ""
    arr(i, 33) = ""
    arr(i, 34) = ""
    arr(i, 35) = "1"
    arr(i, 36) = ""
Next i
With Sheets("结果")
.[a2].Resize(UBound(arr, 1), 36) = arr
End With
Sheets("结果").Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\数据" & ".xlsx", FileFormat:=xlWorkbookDefault
End Sub

转换模板.rar

29.49 KB, 下载次数: 6

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-23 23:21 , Processed in 0.039452 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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