【问题标题】:Change range of cells base on another cell value根据另一个单元格值更改单元格范围
【发布时间】:2020-10-23 08:52:46
【问题描述】:

我想编写一个适用于 excel 中 1000 行的 VBA 代码。在每一行中,一旦我将G 列中的单元格值更改为No,相应的行(即H-Z 列)将自动填充X

我试着写了下面的代码,但是一直不行,只是偶尔出现,请问有人能帮帮我吗?

Private Sub Worksheet_Change(ByVal Target As Range)
    'MsgBox Target.Address
    If Not Application.Intersect(Range("B1:B100"), Range(Target.Address)) Is Nothing Then
        Call Change_value
    End If
End Sub

Sub Change_value()
    If ActiveCell.Value = "No" Then
        Cells(ActiveCell.Row, 4).Value = "Ok"
    End If
End Sub

【问题讨论】:

  • 是的,但请先花时间阅读this
  • 还请记住,如果用户将No 粘贴到G25:G35 中,并且如果您想在所有行中使用X,那么您也必须以不同的方式处理:)
  • @Siddharth Rout - 链接中的优秀提示!我暂时不会修改答案中的代码,我会等着看 Aiden 是否返回 SO。希望他们会像我一样关注您的链接并学到一些东西。
  • @kevin9999 哦,我的评论不是针对您的答案,因此无需修改,因为我发布了链接。我只是给了 Aiden 的链接以供进一步阅读。 :)

标签: excel vba


【解决方案1】:

@Aiden – 你的问题出了什么问题:

这是矛盾的。

您说您希望代码适用于“1000 excel 中的行”,但您的代码仅引用 100 行(“B1:B100”)

您说您希望它在“G 列”中的单元格发生变化时触发 sub- 但您的代码是指 B 列

因此,人们很难理解你的 意图真的是

你的代码应该被格式化为代码——我的意思是当 您输入您的问题,突出显示您的所有代码并选择 {} 以 标记为这样

话虽如此,假设您确实接受了@horst 的建议并阅读了https://stackoverflow.com/help/how-to-ask,我会给您一个解决方案。

当任务像这个一样简单时,您不需要从 Private Sub 中调用 sub。假设您的意思是 G 列和 1000 行,这应该适合您:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("G1:G1000"), Target) Is Nothing Then

If Target.Rows.Count > 1 Then Exit Sub

If Target.Value = "No" Then
    Range(Target.Offset(0, 1), Target.Offset(0, 19)).Value = "X"
End If

End If
End Sub

【讨论】: