ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码将对应的域名网址及相关数据拆分到对应的工作表中?

如何用vba代码将对应的域名网址及相关数据拆分到对应的工作表中?

作者:绿色风 分类: 时间:2022-08-17 浏览:81
楼主
kevinchengcw
Q: 如何用vba代码将对应的域名网址及相关数据拆分到对应的工作表中?
A: 代码如下:
  1. Option Compare Text     '以文本的方式比较,排除大小写的影响
  2. Sub test()
  3. Dim Dic, Arr, Arr2, N&, I&
  4. Application.ScreenUpdating = False  '因需对多个工作表进行处理,运行时间较长,关闭屏幕刷新以提高速度
  5. Set Dic = CreateObject("scripting.dictionary")  '创建字典项目
  6. For N = 3 To Worksheets.Count   '取得要放入域名结果的各个表名
  7.     If Not Dic.exists(Worksheets(N).Name) Then Dic.Add Worksheets(N).Name, ""
  8. Next N
  9. Arr = Dic.keys  '将域名清单放入数组Arr中
  10. Dic.RemoveAll   '清空字典内容,以便进行下一步处理
  11. With Worksheets(1)  '从源数据表中取出各个项目添加到字典中
  12.     For N = 2 To .Cells(.Rows.Count, 1).End(3).Row
  13.         If Not Dic.exists(.Cells(N, 1).Value) Then Dic.Add .Cells(N, 1).Value, Join(Application.Transpose(Application.Transpose(.Cells(N, 2).Resize(1, 3))), vbTab)
  14.     Next N
  15. End With
  16. Arr2 = Dic.keys '将字典的keys清单赋值给数组Arr2
  17. For I = LBound(Arr) To UBound(Arr)  '循环域名工作表清单进行相应处理
  18.     With Worksheets(Arr(I))
  19.         .Rows("2:" & .Rows.Count).ClearContents     '清空现有数据
  20.         .Columns(3).NumberFormatLocal = "0.00%"     '设置C列数字格式
  21.         For N = LBound(Arr2) To UBound(Arr2)        '循环字典keys各项
  22.             If Arr2(N) = Arr(I) Or Split(Arr2(N), "/")(0) Like "*" & Arr(I) & ".*" Then '如果域名等于当前工作表名或域名关键字与表名相同则
  23.                 .Cells(.Rows.Count, 1).End(3).Offset(1, 0) = Arr2(N)    '当前工作表的最后一行数据下一行A列写入当前key值数据
  24.                 .Cells(.Rows.Count, 1).End(3).Offset(0, 1).Resize(1, 3) = Split(Dic(Arr2(N)), vbTab)    'B列到D列写入item项对应的数据
  25.                 Dic.Remove (Arr2(N))    '删除当前key值对应的字典项
  26.             End If
  27.         Next N
  28.         Intersect(.UsedRange, .Columns("B:D")) = Intersect(.UsedRange, .Columns("B:D")).Value   '因split拆分出的数据为文本,故对数据区重新赋值一次转换为数值(相当于粘贴数值操作)
  29.     End With
  30. Next I
  31. With Worksheets("没排名")   '对“没排名”的工作表的操作如下
  32.     .Rows("2:" & .Rows.Count).ClearContents     '清空原有数据
  33.     .Columns(3).NumberFormatLocal = "0.00%"     '同样设置C列的数字格式
  34.     If Dic.Count > 0 Then   '如果字典中还有剩余的项,则
  35.         Arr = Dic.keys      '将剩余的项目赋值给数组Arr
  36.         For N = LBound(Arr) To UBound(Arr)      '循环数组各项取出对应的key值,并将key值与item值写入对应单元格中
  37.             .Cells(N + 2, 1) = Arr(N)
  38.             .Cells(N + 2, 2).Resize(1, 3) = Split(Dic(Arr(N)), vbTab)
  39.         Next N
  40.         Intersect(.UsedRange, .Columns("B:D")) = Intersect(.UsedRange, .Columns("B:D")).Value   '将对应列的文本转换成数值
  41.     End If
  42. End With
  43. Set Dic = Nothing   '清空字典项目
  44. Application.ScreenUpdating = True   '打开屏幕刷新
  45. MsgBox "处理完成"       '显示提示信息
  46. End Sub


附示例文件。
GA内容网址.rar
2楼
xyf2210
学习K哥的代码

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap