vba - 如何检查单元格值是否大于 X,获取这两个值的差异并添加到 Excel 中的下一个单元格?

标签 vba excel excel-formula

我有一个excel问题,我真的需要帮助!
我想使用 Day1 和 Day2 列中的函数。
目标:检查每个单元格并确保其不超过 27。如果超过,则获取单元格值与 27 之间的差值,将差值结转并添加到下一个单元格。

例如,在 Day1 列中,它会检查 13 是否大于 27。不是这样,它会保持该值不变。与 14 和 26 相同。Day1 列中的下一个值是 29,大于 27,因此它将将该单元格值更改为 27 并结转差 (29-27)=2 并添加到下面的单元格中,因此 31 + 2 = 33。现在 33 大于 27,因此它将再次将该值更改为 27 并结转差 (33-27) = 6 并将其添加到 Day2 列中的第一个单元格:6 + 5=11。

Day2 列也将重复该过程。如果 Day2 列中的最后一个值不超过 27,则保持原样。移动到下一列并重复检查单元格值是否大于 27 的过程。

当前的:

Time    Day1 Day2
Hour0   13   5
Hour1   14   15
Hour2   26   29
Hour3   29   26
Hour4   31   4

期望:
Time    Day1 Day2
Hour0   13   11
Hour1   14   15
Hour2   26   27
Hour3   27   27
Hour4   27   5

现在我不是 excel 专家,所以我尝试了一些 if 语句,但不认为这是解决这个问题的方法。我做到了,if(A1>27, 27, A1)这是检查 A1 是否大于 27,将该值更改为 27,否则保持该值不变。但是我还需要另一个 if 语句,if(A1>27, A2=(A1-27) + A2, A1)试图找到一种方法来组合这两个 if 语句,或者是否有其他我可以使用的 excel 函数/ secret ?
请任何帮助表示赞赏。
谢谢!!

最佳答案

使用 VBA,使用“结转”变量来跟踪可以分配给下一个单元的数量:

Sub runMe()
    Dim lastCol As Long
    Dim lastRow As Long
    Dim c As Long
    Dim r As Long
    Dim cf As Double
    With ActiveSheet
        'assumes headings in row 1, and column 1
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

        For c = 2 To lastCol
            For r = 2 To lastRow
                cf = cf + CDbl(.Cells(r, c).Value)
                If cf > 27 Then
                    .Cells(r, c).Value = 27
                    cf = cf - 27
                Else
                    .Cells(r, c).Value = cf
                    cf = 0
                End If
            Next
        Next
        'place any final carry forward into a new column
        If cf > 0 Then
            .Cells(2, lastCol + 1).Value = cf
        Else
            .Cells(2, lastCol + 1).ClearContents
        End If
    End With
End Sub

关于vba - 如何检查单元格值是否大于 X,获取这两个值的差异并添加到 Excel 中的下一个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013445/

相关文章:

excel - Excel 2013停止在子工作

vba - 循环遍历类属性?

ruby - 如何将 Roo Excel 工作表中的数组放入二维数组中

excel - COUNTIF、VLOOKUP 和映射引用

excel - 向下拖动公式并更改行引用而不是列

vba - 等待表单在 MS Access VBA 中完成更新

excel - VBA 将分隔 rune 本文件转换为 Excel

vba - 加载的 XML 文件会被缓存,不会更新

excel - 如何通过 VBA 代码修复仅在 Excel 的共享模式下发生的运行时错误 400

excel - 删除出现在两个字符之间的文本 - 多个实例 - Excel