标签:style blog http color 使用 os
从上一篇《PYTHON操作EXCEL》可以看到,Python 操作 Excel 已非常自如方便。但是 Python 和相关库毕竟是一个额外的依赖,若能从 Excel 自身解决此类问题,自然是更为易用。下面是我写的一段示例代码。我不熟悉 VBA 语言,只是照葫芦画瓢。代码规范程度相差甚远,但题意应是体现其中了。有心的朋友可以用作参考。
Sub 在机器表上生成一级分中心() ‘ ‘ 在机器表上生成一级分中心 Macro ‘ Application.Calculation = xlCalculationManual Application.ScreenUpdating = False t0 = Timer ‘ 词典 Set map_dict = CreateObject("Scripting.Dictionary") ‘ 打开分中心映射表 Set map_sheet = Worksheets("分中心映射表") map_nrows = map_sheet.Range("A300").End(xlUp).Row Set my_rows = map_sheet.Range("A2:B" & map_nrows).Rows ‘ 遍历分中心映射表,获得 分中心 对应的一级分中心,插入词典 For Each my_row In my_rows center = my_row.Cells(1, 1).Value city = my_row.Cells(1, 2).Value If Not map_dict.Exists(center) Then map_dict.Add center, city End If Next my_row ‘ 打开机器表 Set dispatch_sheet = Worksheets("机器表") dispatch_nrows = dispatch_sheet.Range("a99999").End(xlUp).Row Set my_rows = dispatch_sheet.Range("a1:b" & dispatch_nrows).Rows ‘ 遍历开通表,通过词典获得 machine_id 对应的一级分中心,插入开通表 For Each o_row In my_rows center = o_row.Cells(1, 2).Value o_row.Cells(1, 2).Value = map_dict.Item(center) Next o_row MsgBox "在机器表上生成一级分中心。共处理 " & dispatch_nrows & " 条记录,总耗时" & Timer - t0 & "秒。" ‘ 销毁建立的词典 Set map_dict = Nothing ‘ 打开自动计算和屏幕刷新 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True ‘ End Sub最后补充一点:我先实现的词典查找,后发现性能问题根源,所以未能去比较 VLOOKUP 与词典查找两种方式的具体性能差异。我想如果差异可以忍受,那么直接在 VBA 中调用 VLOOKUP 公式或许是一种更为简单的实现。
上面的代码如何测试呢?
id name:分中心映射表,字典表 nickName id:机器表,待匹配表 匹配后结果: 1 a1 b1 1 b1 a1 2 a2 b2 2 b2 a2 3 a3 b3 3 b3 a3 4 a4 b4 4 b4 a4 5 a5 b5 5 b5 a5 6 a6 b6 6 b6 a6 7 a7 b7 7 b7 a7 8 a8 b8 8 b8 a8 9 a9 b9 9 b9 a9 10 a10 b10 10 b10 a10
— EOF —
Excel 中用 VBA 字典查找代替 VLOOKUP,布布扣,bubuko.com
标签:style blog http color 使用 os
原文地址:http://my.oschina.net/leejun2005/blog/294348