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

我有一个Excel的问题,我真的需要帮助! 我想使用列Day1和Day2中的函数。 目标:检查每个单元格,并确保它不超过27.如果是,获取单元格值和27之间的差异,进行差异并添加到下一个单元格。

例如,在Day1列中,它将检查13是否大于27.不是这样,它将保留原来的值。 Day1 Column中的下一个值是29,它大于27,所以它将把这个单元格的值改变为27,并将差值(29-27)= 2加到下面的单元格中,这样31 + 2 = 33。现在33大于27,所以它会再次将该值改变为27,并将差值(33-27)= 6并将其添加到Day2中的第一个单元格列:6 + 5 = 11。

这个过程也将在第2天的专栏中重复。 如果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 

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

使用VBA,用一个“结转”variables来跟踪多less能被分配到下一个单元格:

 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 

你最好的select是使用Visual Basic。 将以下代码插入到工作表中并运行它。 它会做你正在寻找的东西。

 Sub Test() Dim lngLastRow As Long Dim lngLoopCtr As Long Dim value_1 As Long Dim value_2 As Long lngLastRow = Range("A" & Rows.Count).End(xlUp).Row For lngLoopCtr = 2 To lngLastRow Step 1 value_1 = Range("B" & lngLoopCtr) value_2 = Range("B" & lngLoopCtr + 1) If value_1 > 27 Then Range("B" & lngLoopCtr + 1) = value_2 + (value_1 - 27) Range("B" & lngLoopCtr) = 27 End If Next lngLoopCtr For lngLoopCtr = 2 To lngLastRow Step 1 value_1 = Range("C" & lngLoopCtr).Value value_2 = Range("C" & lngLoopCtr + 1).Value If value_1 > 27 Then Range("C" & lngLoopCtr + 1) = value_2 + (value_1 - 27) Range("C" & lngLoopCtr) = 27 End If Next lngLoopCtr End Sub