ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何对逗号分隔文本检查对应编码?

如何对逗号分隔文本检查对应编码?

作者:绿色风 分类: 时间:2022-08-17 浏览:96
楼主
liuguansky
Q:  要求:
    1、按A列的内容,分别从工作表“BOM”中H列找着对应项,并将对应项的相应A列的SAP编码返回到当前表的F列上
    2、工作表“BOM”中如果有空行的,可以做删除处理  

A:用如下代码可以实现:
  1. Sub justtest()
  2.     Dim Arr, k&, i&, d, ArrTmp, StrTmp$, j%, ArrResult() As String
  3.     Set d = CreateObject("scripting.dictionary") '创建字典项目
  4.     With Sheets("BOM") '对BOM表进行处理
  5.         k = .Cells(.Rows.Count, 1).End(3).Row '取最后行号
  6.         Arr = .Range("a1:h" & k).Value '赋值数据给数组
  7.         For i = 2 To k '循环数组
  8.             If Len(Trim(Arr(i, 8))) Then '如果非空
  9.                 ArrTmp = Split(Arr(i, 8), ",") '以逗号分隔
  10.                 For j = LBound(ArrTmp) To UBound(ArrTmp) '循环分隔内容
  11.                     If d.Exists(ArrTmp(j)) Then '如果字典项目存在
  12.                         If Not d(ArrTmp(j)).Exists(Arr(i, 1)) Then '如果子字典项目不存在,就进行添加项目
  13.                         '对子字典项目去重
  14.                             d(ArrTmp(j)).Add Arr(i, 1), ""
  15.                         End If
  16.                         Else: d.Add ArrTmp(j), "" '如果字典项目不存在,就添加项目
  17.                         Set d(ArrTmp(j)) = CreateObject("scripting.dictionary") '并创建子字典
  18.                         d(ArrTmp(j)).Add Arr(i, 1), "" '添加子字典项目
  19.                     End If
  20.                 Next j
  21.                 Else: StrTmp = StrTmp & ",a" & i '如果为空,则合并行号
  22.             End If
  23.         Next i
  24.         If StrTmp <> "" Then .Range(Mid(StrTmp, 2)).EntireRow.Delete '如果有空值行,刚进行整行删除。
  25.     End With
  26.     With Sheets("place_txt") '获取结果返回表
  27.         k = .Cells(.Rows.Count, 1).End(3).Row
  28.         Arr = .Cells(1, 1).Resize(k, 1).Value '赋值待判断区域数据入数组
  29.         ReDim ArrResult(1 To k, 1 To 1) '重定义结果数组
  30.         For i = 1 To k '循环判断数据数组
  31.             If d.Exists(Arr(i, 1)) Then '如果存在,则
  32.                 ArrResult(i, 1) = Join(d(Arr(i, 1)).Keys, ",") '返回编码
  33.             End If
  34.         Next i
  35.         .Range("f:f").Clear
  36.         .Range("f1").Resize(k, 1) = ArrResult '返回结果数组
  37.        ' .Range("f:f").NumberFormatLocal = "@"
  38.         MsgBox "处理完毕,相关数据已引入", vbOKOnly '友情提示操作完成
  39.     End With
  40.     Set d = Nothing '清空字典对象
  41. End Sub

桌面.rar
2楼
nzkboy
我的提问在这里解决了,太棒了

免责声明

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

评论列表
sitemap