я хочу распределить одно значение на несколько строк на основе определенной логики в Excel - PullRequest
0 голосов
/ 05 марта 2019

У меня есть сгруппированные данные на нескольких уровнях (действия «ребенок-родитель»).Ниже представлены несколько дочерних уровней родителей. Я хочу распределить значение (например, 1 000 000 баллов) по нижеуказанным дочерним действиям на основе определенных весов, присвоенных каждому ребенку.Снимок добавлен для справки.Может ли кто-нибудь помочь, пожалуйста?

Снимок heirarchial сгруппированных данных:

[1]: https://i.stack.imgur.com/1UEG0.png

1 Ответ

0 голосов
/ 05 марта 2019

Добавьте этот код в свой проект и посмотрите, работает ли он.Перейдите в редактор VBA и убедитесь, что вы добавили его в новый модуль ...

Public Function CalculateWeightedPoints(ByVal rngData As Range, ByVal strID As String, ByVal dblWeighting As Double) As Double
    Dim lngRow As Long, strThisID As String, strParent As String, arrParent() As String, i As Long, objCell As Range
    Dim dblParentValue As Double, lngCValueCol As Long, rngCaller As Range, lngWSRow As Long, lngWSCol As Long

    Application.Volatile

    Set rngCaller = Application.Caller
    lngValueCol = rngCaller.Column

    arrParent = Split(strID, ".")

    ' Determine the parent ID.
    For i = 0 To UBound(arrParent) - 1
        If i > 0 Then strParent = strParent & "."
        strParent = strParent & arrParent(i)
    Next

    ' Find the parent value, it will be used to weight the children.
    For lngRow = 1 To rngData.Rows.Count
        Set objCell = rngData.Cells(lngRow, 1)

        strThisID = Trim(rngData.Cells(lngRow, 1))

        lngWSRow = objCell.Row
        lngWSCol = rngCaller.Column

        If strThisID = "" Then Exit For

        If strThisID = strParent Then
            ' Get the value of the parent.
            dblParentValue = objCell.Worksheet.Cells(lngWSRow, lngWSCol)
            Exit For
        End If
    Next

    On Error Resume Next

    Err.Clear

    CalculateWeightedPoints = dblWeighting * dblParentValue

    If Err.Description <> "" Then
        CalculateWeightedPoints = 0
    End If
End Function

... затем в матрицу данных добавьте следующую формулу в ячейку, для которой вы хотите вычислить взвешенныйзначение для.Во-первых, убедитесь, что формула начинается с 1.1, а не с первого WBS.Первая СПП должна иметь исходное значение.

=CalculateWeightedPoints($A$1:D2,A3,C3)

... оттуда заполните формулу, и, надеюсь, она будет работать для вас.

enter image description here

Просто убедитесь, что требуемый идентификатор (т. Е. СПП) находится в первом столбце диапазона, хотя он у вас есть, поэтому все должно быть в порядке.

Это изображение показывает рассчитанные значения,Я надеюсь, что это то, что вы ищете.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...