我有一个很好的问题,我真的需要帮助! 我想在Day1和Day2列中使用函数。 目标:检查每个单元格并确保它不超过27.如果是,请获取单元格值与27之间的差值,继续差异并添加到下一个单元格。
例如,在Day1列中,它将检查13是否大于27.但事实并非如此,它将保留该值。与第14和第26相同。第1天列中的下一个值是29,大于27,因此它会将该单元格值更改为27并将结果差值(29-27)= 2并添加到下面的单元格中,以便31 + 2 = 33.现在33大于27,所以它将再次将该值更改为27,并将差值(33-27)= 6并将其添加到第2天的第一个单元格中: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函数/秘密?
请任何帮助表示赞赏。
谢谢!
答案 0 :(得分:1)
您最好的选择是使用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
答案 1 :(得分:1)
使用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