根据另一个单元格值更改单元格范围

Posted

技术标签:

【中文标题】根据另一个单元格值更改单元格范围【英文标题】: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 还有worth a glance 还请记住,如果用户将No 粘贴到G25:G35 中,并且如果您想在所有行中使用X,那么您也必须以不同的方式处理:) @Siddharth Rout - 链接中的优秀提示!我暂时不会修改答案中的代码,我会等着看 Aiden 是否返回 SO。希望他们会像我一样关注您的链接并学到一些东西。 @kevin9999 哦,我的评论不是针对您的答案,因此无需修改,因为我发布了链接。我只是给了 Aiden 的链接以供进一步阅读。 :) 【参考方案1】:

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

这是矛盾的。

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

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

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

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

话虽如此,假设您确实接受了@horst 的建议并阅读了https://***.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

【讨论】:

以上是关于根据另一个单元格值更改单元格范围的主要内容,如果未能解决你的问题,请参考以下文章

将单元格范围复制到新位置

EXCEL VBA - 根据单元格范围和字符串创建动态下拉列表[关闭]

VBA:如何搜索单元格范围的值,并返回该位置旁边的单元格?

显示单元格范围的 IF 公式

VBA excel Target.Address =单元格范围

Excel单元格内容太多会覆盖遮住下一单元格范围