【问题标题】:VBA distribute values based on rankingVBA 根据排名分配值
【发布时间】:2023-03-08 16:50:01
【问题描述】:

尝试完成一次处理每 3 行的 VBA。 使用 rank 列的顺序,distribute values 根据接下来的三行,每个单元格不超过最大值 62 并优先考虑最高等级。

样本数据:

这是我目前所拥有的:

max_value = 62
For irow = 2 To 80 Step 3

    set_value = .Cells(irow, 2).Value

    'if value less than max, then assign value to highest rank
    If set_value < max_value Then
        toprank_value = .Range(.Cells(irow, 1), .Cells(irow + 3, 1)).Find(what:="1", LookIn:=xlValues).Address

        'assign value to rank of 1
        toprank_value.Offset(0, 2).Value = set_value

        GoTo NextIteration

    'if not, distribute values across next 3 rows based on rank not going over max of 62
    Else

        'NEED HELP FOR CODE HERE
        'NEED HELP FOR CODE HERE

    End If

NextIteration:
    Next

感谢您对正确方向的任何推动或是否需要澄清。

【问题讨论】:

    标签: vba excel distribution ranking


    【解决方案1】:

    假设您要分配的价值始终位于 3 行中的第一行。 它丑陋但似乎有效。

    Sub distrib()
    
    Set R1 = ActiveSheet.UsedRange 'Edit range if other data in sheet
    T1 = R1
    
    M = 62
    
    For i = 2 To UBound(T1)
        If T1(i, 2) > 0 Then
            V = T1(i, 2)
            If V <= M Then
                For j = i To i + 2
                    If T1(j, 1) = 1 Then
                        T1(j, 3) = V
                    Else
                        T1(j, 3) = 0
                    End If
                Next j
            Else
                A = M
                V = V - M
                If V > M Then
                    B = M
                    V = V - M
                    If V > M Then
                        C = M
                    Else
                        C = V
                    End If
                Else
                    B = V
                    C = 0
                End If
                For j = i To i + 2
                    Select Case T1(j, 1)
                        Case Is = 1
                            T1(j, 3) = A
                        Case Is = 2
                            T1(j, 3) = B
                        Case Is = 3
                            T1(j, 3) = C
                    End Select
                Next j
            End If
        End If
    Next i
    
    For i = 2 To UBound(T1)
        Cells(i, 3) = T1(i, 3)
    Next i
    
    End Sub
    

    【讨论】:

    • 非常感谢语法对调整很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2021-08-21
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多