我在" TEXT"中有文本单元格。 Excel表格中的列(例如从A2到A4),我有一个单词列表\值,其中每个单词都有一个特定的值,这个单词列表的值\值在另一个表格或其他列中(例如从E2到F4)。
我想将每个字符串分成单个单词,并将每个单词放在其自己的单元格中。在一个单独的范围内,我想要应用每个单词对应的值,并将每个字符串的值一起添加到" RESULT"字符串的总和。
如果能够在" RESULT"中比较并返回总值,也可以。细胞没有分裂" TEXT"细胞进入新细胞。
我尝试过的是使用数据>将字符串中的每个单词放在其自己的单元格中。 DataTools>文本到列。然后使用VLOOKUP
工作表函数查找匹配的单词并应用其对应的值,然后查找该字符串范围的总和。该代码适用于较小的数据大小,但我正在寻找更专业和有用的东西(比如第一张图片更接近第二张图片。)
谢谢!
答案 0 :(得分:0)
这是效率极低的代码,因此根据数据的大小,运行时间可能会变得非常长。将此答案中的代码放在VBA模块中,然后从VBE运行它或将宏指定给工作表上的按钮(形状)。
我使用的起始数据集模仿了您提供的内容。
为了达到您想要的效果,我们可以在构建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
运行此代码后,数据集将产生以下结果:
让我知道这是否达到了您所要求的目标。