Excel单元格中单词的数值

时间:2016-10-18 21:58:23

标签: excel excel-vba vba

我在" TEXT"中有文本单元格。 Excel表格中的列(例如从A2到A4),我有一个单词列表\值,其中每个单词都有一个特定的值,这个单词列表的值\值在另一个表格或其他列中(例如从E2到F4)。

我想将每个字符串分成单个单词,并将每个单词放在其自己的单元格中。在一个单独的范围内,我想要应用每个单词对应的值,并将每个字符串的值一起添加到" RESULT"字符串的总和。

my trial to solve this - pic2

如果能够在" RESULT"中比较并返回总值,也可以。细胞没有分裂" TEXT"细胞进入新细胞。

an example of the results

我尝试过的是使用数据>将字符串中的每个单词放在其自己的单元格中。 DataTools>文本到列。然后使用VLOOKUP工作表函数查找匹配的单词并应用其对应的值,然后查找该字符串范围的总和。该代码适用于较小的数据大小,但我正在寻找更专业和有用的东西(比如第一张图片更接近第二张图片。)

谢谢!

1 个答案:

答案 0 :(得分:0)

句子中的循环词与关键词比较以找出关键词值的总和

这是效率极低的代码,因此根据数据的大小,运行时间可能会变得非常长。将此答案中的代码放在VBA模块中,然后从VBE运行它或将宏指定给工作表上的按钮(形状)。

我使用的起始数据集模仿了您提供的内容。

enter image description here

为了达到您想要的效果,我们可以在构建For Loops之后使用多个Array()来匹配"匹配"我们的价值观和总和。定义TEXT和WORD的范围是动态的,这意味着您可以向它们添加越来越多的代码,代码将继续一直运行到它自己的末尾。

Sub WordToValue()
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
    Dim wordArray() As String, word As Variant, myWords As Range
    Dim keyArray() As String, keyWord As Variant
    Dim i As Long, numKey As Long, sumWord As Long
    Dim textRange As Range: Set textRange = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))
    Dim keyRange As Range: Set keyRange = ws.Range("D2", ws.Cells(ws.Rows.Count, "D").End(xlUp))

    i = 0
    numKey = 0
    sumWord = 0
    ReDim keyArray(0 To keyRange.Cells.Count)
    For Each myWords In keyRange
        keyArray(i) = myWords.Value
        i = i + 1
    Next myWords

    For Each myWords In textRange
        wordArray = Split(myWords.Value, " ")
        For Each word In wordArray
            For Each keyWord In keyArray
                If LCase(word) = LCase(keyWord) Then
                     numKey = numKey + 1
                     sumWord = sumWord + keyRange.Find(what:=keyWord, LookIn:=xlValues, lookat:=xlWhole).Offset(0, 1).Value
                End If
            Next keyWord
        Next word
        ws.Range("B" & myWords.Row).Value = numKey
        ws.Range("C" & myWords.Row).Value = sumWord
        numKey = 0
        sumWord = 0
    Next myWords
End Sub

运行此代码后,数据集将产生以下结果:

enter image description here

让我知道这是否达到了您所要求的目标。