Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel VBA中,提取范围文本和总和数据_Excel_Vba - Fatal编程技术网

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

在Excel VBA中,提取范围文本和总和数据,excel,vba,Excel,Vba,我有一个电子表格,其中有多行,有三列(K,L M)包含文本(从下拉列表手动插入)。插入的文本包含一个“分数”。对于图中显示的行,分数为3+2+2=7 我希望能够自动计算分数并显示在N列中。我很乐意在给定文本的情况下进行分数提取,但我完全不熟悉Excel的对象模型,以及如何编写可以跨所有行触发的VBA宏。我假设它会以某种方式传递一个范围,或者传递一个指定范围的字符串,但我现在不知道如何传递。也许我只需要一个公式?但是一个调用函数从单元格中剥离非数值数据的函数 谢谢你的帮助 试试: N2 = LEF

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

我希望能够自动计算分数并显示在N列中。我很乐意在给定文本的情况下进行分数提取,但我完全不熟悉Excel的对象模型,以及如何编写可以跨所有行触发的VBA宏。我假设它会以某种方式传递一个范围,或者传递一个指定范围的字符串,但我现在不知道如何传递。也许我只需要一个公式?但是一个调用函数从单元格中剥离非数值数据的函数

谢谢你的帮助

试试:

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

正如我在评论中所说,如果此解决方案的列数超过三列,并且/或者分数超过一位数,则此解决方案的扩展性不太好。
[0-9]
将此公式放入
N2
单元格并将其一直向下拖动

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

有关更多信息,请参阅。它对单元格中连字符(
-
)前面的所有数字求和。

一种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

如果只有这三列,并且值始终是第一个条目,则可以使用
Left(range,1)
提取值并求和。如果有多个列,并且分数超过0到9,那么VBA可能更合适。是的,只有这些列,分数从0到5。这太好了-省去了我还需要宏启用电子表格。非常感谢。与Michal的类似-将电子表格保存为xlsm。