我正在太系统之间进行迁移。旧系统使用Tags对产品进行分类,新系统引入Type。
我可以将数据作为已加载到Excel中的数千行的CSV。这是格式的一个例子。
Col A | Col B | Col C
Product | Type | Tags
Samsung S5 | | Android, Samsung, 5.1" Screen
Sony Z3 | | Android, Bluetooth, Sony, 5.2" Screen
LG G3 | | Android, LG, 5.5" Screen
我希望能够使用C列中的单个标记填充B列。我可以这样做:
A1: =IF(SEARCH("Sony",B2),"Sony", IF(SEARCH("Samsung",B2),"Samsung",etc))
但是,我想在C列中搜索/匹配60多个单独的标签到B列中的单个值,因此这种方法很快变得无法管理。
是否有其他方法使用Excel函数或我是否必须使用VBA?
我多年没有使用过VBA,所以任何例子/指针都会受到赞赏。
答案 0 :(得分:1)
是否有其他方法使用Excel函数或我是否必须使用VBA?
恕我直言VBA,试试这个:
第一个变体(慢于第二个变体)
Sub test()
Dim oCellTag As Range, oCellSource As Range
For Each oCellTag In Sheets("Tags").Range("A1:A3") 'Range with Tags in one sheet
For Each oCellSource In Sheets("Source").Range("C2:C4") 'Range with data for search tags in another sheet
If UCase(oCellSource.Value) Like "*" & UCase(oCellTag.Value) & "*" And oCellTag.Value <> "" Then 'if cell contain tag
Sheets("Source").Cells(oCellSource.Row, oCellSource.Column - 1).Value = oCellTag.Value
End If
Next
Next
End Sub
第二个变种(快速)
Sub test2()
Dim oCellTag As Range, oCellSource As Range, KeySource, KeyTag
Dim Source As Object: Set Source = CreateObject("Scripting.Dictionary")
Dim Tags As Object: Set Tags = CreateObject("Scripting.Dictionary")
'Grab the dates from the WorkSheets
For Each oCellTag In Sheets("Tags").Range("A1:A3")
If oCellTag.Value <> "" Then
Tags.Add oCellTag.Row, oCellTag.Value
End If
Next
For Each oCellSource In Sheets("Source").Range("C2:C4")
If oCellSource.Value <> "" Then
Source.Add oCellSource.Row, oCellSource.Value
End If
Next
'Match
For Each KeyTag In Tags
For Each KeySource In Source
If UCase(Source(KeySource)) Like "*" & UCase(Tags(KeyTag)) & "*" Then
Sheets("Source").Cells(KeySource, 2).Value = Tags(KeyTag)
End If
Next
Next
End Sub