gpt4 book ai didi

vba - Excel宏执行碾压,试图简化公式

转载 作者:行者123 更新时间:2023-12-02 08:10:09 25 4
gpt4 key购买 nike

我对 excel 宏很陌生,因此我找不到以下宏压垮我的 excel 的原因(在 mac 和 win 上)。因此,我想尝试简化公式,将许多 if 减少到一个公式。你能帮忙吗?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("B8")

If Range("B8").Value = "0" Then
Rows("14:24").EntireRow.Hidden = True
Rows("13").EntireRow.Hidden = False
Range("B14:B24").Clear
Worksheets("Sheet1").Range("B9").Value = "Open"
End If

If Range("B8").Value = "1" Then
Rows("15:24").EntireRow.Hidden = True
Rows("13:14").EntireRow.Hidden = False
Worksheets("Sheet1").Range("B9").Value = "Open"
Range("B15:B24").Clear
End If

If Range("B8").Value = "2" Then
Rows("16:24").EntireRow.Hidden = True
Rows("13:15").EntireRow.Hidden = False
Worksheets("Sheet1").Range("B9").Value = "Open"
Range("B16:B24").Clear
End If

If Range("B8").Value = "3" Then
Rows("17:24").EntireRow.Hidden = True
Rows("13:16").EntireRow.Hidden = False
Worksheets("Sheet1").Range("B9").Value = "Open"
Range("B17:B24").Clear
End If

If Range("B8").Value = "4" Then
Rows("18:24").EntireRow.Hidden = True
Rows("13:17").EntireRow.Hidden = False
Range("B18:B24").Clear
End If

If Range("B8").Value = "5" Then
Rows("19:24").EntireRow.Hidden = True
Rows("13:18").EntireRow.Hidden = False
Range("B19:B24").Clear
End If

If Range("B8").Value = "6" Then
Rows("20:24").EntireRow.Hidden = True
Rows("13:19").EntireRow.Hidden = False
Range("B20:B24").Clear
End If

If Range("B8").Value = "7" Then
Rows("21:24").EntireRow.Hidden = True
Rows("13:20").EntireRow.Hidden = False
Range("B21:B24").Clear
End If

If Range("B8").Value = "8" Then
Rows("22:24").EntireRow.Hidden = True
Rows("13:21").EntireRow.Hidden = False
Range("B22:B24").Clear
End If

If Range("B8").Value = "9" Then
Rows("23:24").EntireRow.Hidden = True
Rows("13:22").EntireRow.Hidden = False
Range("B23:B24").Clear
End If

If Range("B8").Value = "10" Then
Rows("24").EntireRow.Hidden = True
Rows("13:23").EntireRow.Hidden = False
Range("B24").Clear
End If

If Range("B8").Value = "11" Then
Rows("13:24").EntireRow.Hidden = False
End If

End Sub

如您所见,公式的逻辑是:B8 的值越高,隐藏 13 到 24 之间的行就越少。 B8的值越小,隐藏行越多,并清除隐藏行的值。

最佳答案

您可以首先将第 13-34 行的整个集合设置为可见 (.Hidden = False),然后根据 Range("B8") 中的值进行设置。 Value 设置要隐藏的行数。

我还认为您只想在 Range("B8") 中的值发生更改时运行此代码,因此您可以在 Worksheet_Change 事件中添加一行来检查:If Not Intersect(Target, Range("B8")) 就什么都不是

代码

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = True
If Not Intersect(Target, Range("B8")) Is Nothing Then ' <-- run this code only when changing the value of B8
Select Case Target.Value

Case 0 To 11
Range("B13:B24").EntireRow.Hidden = False
Range("B" & 14 + Target.Value & ":B24").EntireRow.Hidden = True
Range("B" & 14 + Target.Value & ":B24").Clear
Case Else
'do nothing

End Select
End If
Application.EnableEvents = True

End Sub

关于vba - Excel宏执行碾压,试图简化公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791208/

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