Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2875|回复: 2

[已解决]求助通过字段过滤筛选生成新的航班号(用宏实现)

[复制链接]
发表于 2014-6-13 09:38 | 显示全部楼层 |阅读模式
本帖最后由 335805371 于 2014-6-13 11:03 编辑

D列是想要生成的,根据A列前三个字母,与B列匹配,如果匹配到了取对应C列加A列截取掉前三个字母后的值,匹配不到取A列原值。
注:A列有几万行数据,B列有二百多行数据,C列与B列相对应,C列单元值可能为空

A                                  B              C                     D
需要过滤的航班号       三字码        二子码           新生成的航班号
AAR201                      DKH            RK                AR201
ABW139                     CAL             KJ                RA139
BAW3304                   ABW            RA               BAW3304
CAL063                      NEG                                KJ063
THY342                      AAR            AR                THY342
HRY3324                    CAL             EU                HRY3324
DKH879                                                            RK879
CAL234                                                             KJ234
AAR0987                                                           AR0987
EYT209                                                             EYT209
最佳答案
2014-6-13 10:02
  1. Sub test()
  2.     Dim d As Object
  3.     Dim ar
  4.     Dim i As Long
  5.     Dim sr As String
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Cells(2, 4).Resize(Rows.Count - 1).ClearContents
  8.     ar = Cells(1, 1).CurrentRegion
  9.     For i = 2 To UBound(ar)
  10.         If Not IsEmpty(ar(i, 2)) Then
  11.             If Not d.exists(ar(i, 2)) Then d.Add ar(i, 2), ar(i, 3)
  12.         End If
  13.     Next i
  14.     For i = 2 To UBound(ar)
  15.         sr = Left(ar(i, 1), 3)
  16.         If d.exists(sr) Then
  17.             ar(i, 4) = Replace(ar(i, 1), sr, d(sr))
  18.         Else
  19.             ar(i, 4) = ar(i, 1)
  20.         End If
  21.     Next i
  22.     Cells(1, 1).Resize(UBound(ar), 4) = ar
  23. End Sub
复制代码
发表于 2014-6-13 10:02 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim d As Object
  3.     Dim ar
  4.     Dim i As Long
  5.     Dim sr As String
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Cells(2, 4).Resize(Rows.Count - 1).ClearContents
  8.     ar = Cells(1, 1).CurrentRegion
  9.     For i = 2 To UBound(ar)
  10.         If Not IsEmpty(ar(i, 2)) Then
  11.             If Not d.exists(ar(i, 2)) Then d.Add ar(i, 2), ar(i, 3)
  12.         End If
  13.     Next i
  14.     For i = 2 To UBound(ar)
  15.         sr = Left(ar(i, 1), 3)
  16.         If d.exists(sr) Then
  17.             ar(i, 4) = Replace(ar(i, 1), sr, d(sr))
  18.         Else
  19.             ar(i, 4) = ar(i, 1)
  20.         End If
  21.     Next i
  22.     Cells(1, 1).Resize(UBound(ar), 4) = ar
  23. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-6-13 11:01 | 显示全部楼层
windimi007 发表于 2014-6-13 10:02

执行了,很正确,非常感谢!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-6 02:47 , Processed in 0.218650 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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