如何从Excel单元格中提取数字然后在行之间求和?

时间:2017-05-17 17:15:22

标签: excel

我正在使用Excel进行资源规划,并尝试在多行项目中为每个人(有时是单个单元格中的多个)提取%分配。

我已经能够在单个单元格中提取特定人员的百分比,但我不确定当且仅当该人员存在于其他单元格中时如何进行求和。

以下是我用于单个单元格的内容:

=MID(M204,SEARCH(B208,M204)+LEN(B208)+2,3)

这将搜索单元格中的特定名称,然后查找之后的百分比(通过查找字符位置+名称中的字符数)并返回接下来的3个字符(即%分配)。理想情况下,我希望这是灵活的,因此它可以返回5或50或100而不是固定的宽度,但还没有到达那一点。

请参阅此屏幕截图,了解我尝试做的事情:

4 个答案:

答案 0 :(得分:0)

如果您可以展平您的数据,那么您可以使用数据透视表。

让您的数据看起来像这样:

enter image description here

然后添加一个数据透视表,其中包含列中的周,行中的名称和值中的容量总和:

enter image description here

答案 1 :(得分:0)

一种选择是使用Text to Columns,并使用SPACE作为分隔符。

您将信息放在电子表格的新区域中,对于有多人的单元格,只需剪切/粘贴其他人。然后找不到/替换,

然后,它是一个简单的SUMIF()=SUMIF([name range],Name,[percent range])

enter image description here

答案 2 :(得分:0)

VBA可以提供解决方案。将此函数插入​​工作簿模块,并使用它:

=sumPercentage([week number],[name to look up],[range of percentages])

(如果行也被移除,它应该有效。)

Function sumPercentage(wk As String, employee As String, rng As Range) As Double
Dim cel As Range
Dim multNames() As String
Dim i       As Long

For Each cel In rng
    If InStr(1, cel, ",") > 0 And InStr(1, cel, "%") Then
        ' There are more than one person in the cell
        multNames = Split(cel.Value, ",")
        For i = LBound(multNames) To UBound(multNames)
            Debug.Print multNames(i)
            If Trim(Left(Trim(multNames(i)), WorksheetFunction.Search(" ", Trim(multNames(i))))) = employee Then
                sumPercentage = sumPercentage + Mid(multNames(i), WorksheetFunction.Search("(", multNames(i)) + 1, WorksheetFunction.Search("%", multNames(i)) - WorksheetFunction.Search("(", multNames(i)) - 1)
            End If
        Next i
    ElseIf cel.Value <> "" And InStr(1, cel, "%") Then
        If Trim(Left(cel.Value, WorksheetFunction.Search(" ", cel.Value))) = employee Then
            sumPercentage = sumPercentage + Mid(cel.Value, WorksheetFunction.Search("(", cel.Value) + 1, WorksheetFunction.Search("%", cel.Value) - WorksheetFunction.Search("(", cel.Value) - 1)
        End If
    End If
Next cel
sumPercentage = sumPercentage / 100
End Function

enter image description here

答案 3 :(得分:0)

嗯,你可以用公式做,但它很乱

=SUM(--IFERROR(LEFT(MID(MID($A$2:$A11,SEARCH($B2,$A$2:$A$11),999),SEARCH("(",MID($A$2:$A$11,SEARCH($B2,$A$2:$A$11),999))+1,999),
SEARCH("%",MID(MID($A$2:$A$11,SEARCH($B2,$A$2:$A$11),999),SEARCH("(",MID($A$2:$A$11,SEARCH($B2,$A$2:$A$11),999))+1,999))),0))

必须使用 Ctrl Shift 输入

作为数组公式输入

enter image description here