【问题标题】:Formatting cells based on other cells基于其他单元格格式化单元格
【发布时间】:2026-01-11 04:35:02
【问题描述】:

我有一个导入 Excel 的客户列表,有 4 列。我唯一感兴趣的是代表客户姓名的 Column1 和 Column4,它通过简单地说“Y”和“N”来指示他们是否有债务要偿还。我想写一个小函数,当某行的第四列显示“N”时,客户的姓名会以红色突出显示。如果它是“Y”,它将以绿色突出显示。一直写到现在

For i = 1 To 15
        Dim pay = oSheet.Range("D" & i).Find(What:="Y")
        If Not pay Is Nothing Then
            oSheet.Range("A" & i).Interior.ColorIndex = 4
        End If
    Next
    For i = 1 To 15
        Dim pay = oSheet.Range("D" & i).Find(What:="N")
        If pay Is Nothing Then
            oSheet.Range("A" & i).Interior.ColorIndex = 3
        End If
    Next

我遇到的问题是,我的第二个 for 似乎基本上完全覆盖了第一个,并且只会改变我所有 15 行的颜色。第一个也将修改我的所有行,而不管相应列的内容如何。我在想我正在使用的代码行之一实际上搜索所有单元格,如果它有“Y”或“N”,而不是一个接一个。请大家帮我澄清一下我做错了什么?

【问题讨论】:

  • 也许使用调试器并检查 'Dim pay = oSheet.Range("D" & i).Find(What:="N")' 返回的值。我不是 vba 专家,但您的代码看起来与网上找到的示例有点不同,所以也许只是重新检查一下? docs.microsoft.com/en-us/office/vba/api/excel.range.find
  • 你不能这样做,dim 在一行中作为变量类型,然后在另一行中执行find
  • 这个问题怎么样?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助遇到相同问题的其他社区成员,我们可以存档这个帖子,谢谢。

标签: .net excel vb.net


【解决方案1】:

我认为您在第二个 If 语句中忘记了 Not。应该是:

For i = 1 To 15
    Dim pay = oSheet.Range("D" & i).Find(What:="Y")
    If Not pay Is Nothing Then
        oSheet.Range("A" & i).Interior.ColorIndex = 4
    End If
Next
For i = 1 To 15
    Dim pay = oSheet.Range("D" & i).Find(What:="N")
    If Not pay Is Nothing Then
        oSheet.Range("A" & i).Interior.ColorIndex = 3
    End If
Next

【讨论】: