gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:56:20 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com