在Excel VBA中,提取范围文本和总和数据

时间:2018-01-31 09:24:17

标签: excel excel-vba vba

我有一个电子表格,其中有多行包含三列(K,L M),其中包含文本(从下拉列表中手动插入)。插入的文本包括“得分”。对于图像中显示的行,得分为3 + 2 + 2 = 7。

我希望能够做的是自动计算得分并显示在N列中。我很高兴在文本中提取分数,但我完全不熟悉Excel的对象模型,以及如何编写可以跨所有行触发的VBA宏。我假设它会以某种方式传递一个范围,或指定一个范围的字符串,但是如何做到这一点现在已经超出了我的范围。也许我只需要一个公式?但是一个调用函数来从单元格中去除非数值数据的那个?

任何帮助表示感谢。

enter image description here

3 个答案:

答案 0 :(得分:2)

将此公式放在N2单元格中并将其完全拖下来。

=LEFT(K2, FIND("-", K2)  - 2) + LEFT(L2, FIND("-", L2)  - 2) + LEFT(M2, FIND("-", M2)  - 2)

有关详细信息,请参阅very simple python program。它对在单元格中连字符(-)之前存在的所有数字求和。

答案 1 :(得分:1)

尝试:

N2 = LEFT(TRIM(K2),1) + LEFT(TRIM(L2),1) + LEFT(TRIM(M2),1)

正如我在评论中所说,如果这个解决方案超过三列并且/或者得分超过一位数[0-9]

,那么该解决方案的扩展性不会很好

答案 2 :(得分:1)

VBA解决方案,用于执行所有行并将值输入N列:

Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
'declare and set your worksheet, amend as required
LastRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
'get the last row with data on Column A
For rownumber = 1 To LastRow 'loop through rows
    For i = 11 To 13 'loop through columns
    strValue = ws.Cells(rownumber, i).Value 'get text string from cell
    pos = InStr(strValue, " -") 'find the dash - in cell
        If pos > 0 Then 'if dash found
            Value = Value + Val(Left(ws.Cells(rownumber, i).Value, pos - 1)) 'remove everything after number
        End If
    Next i
    ws.Cells(rownumber, 14).Value = Value 'write value to column N
    Value = 0
Next rownumber
End Sub