Excel如果列包含特定单词,则分配一个(或多个)值

时间:2019-03-01 20:24:45

标签: excel

我有一长串具有名称的DOM类型。例如“其他”,“课余活动”,“艺术与文化”等。这些列名称中的每一个都有对应的值。例如,“其他”是30,“原住民研究”是1。我想做的是在新列中为这些列中的每一个分配适当的值。问题在于,某些列可以使用;#分隔多个名称。我如何才能做到这一点,用逗号分隔多个名称的列。我希望它看起来像这样

Name                                      Value
-----                                     -----
Music                                      36
Learning Resources                         32
After-School Activities;#Competitions      3,9   

1 个答案:

答案 0 :(得分:0)

假设您的姓名在Column A中,而您的值在Column B中。
这将在Column C中输出拆分名称,并在`D列中输出拆分值。


Option Explicit

Sub Work_Sub()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")

Dim LR As Long, iName, iValue, iCell As Range
Dim j As Long, c As Long

LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
c = 1

For Each iCell In ws.Range("A2:A" & LR)
    If InStr(iCell, ";#") Then
        iName = Split(iCell, ";#")
        iValue = Split(iCell.Offset(, 1), ",")
            If UBound(iName) = UBound(iValue) Then
                For j = LBound(iName) To UBound(iName)
                    ws.Range("C" & c) = iName(j)
                    ws.Range("D" & c) = iValue(j)
                    c = c + 1
                Next j
            Else
                ws.Range("C" & c) = "Unmatched splits"
            End If
        iName = ""
        iValue = ""
    Else
        iCell.Offset(0, 2).Value = iCell.Value
        iCell.Offset(0, 1).Value = iCell.Offset(0, 3).Value
        c = c + 1
    End If
Next iCell

End Sub

未测试。可能是因为杀死-只需想到的第一种方法即可运行