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