如何根据 if 语句更新单元格?

Posted

技术标签:

【中文标题】如何根据 if 语句更新单元格?【英文标题】:How do you update a cell based on an if statement? 【发布时间】:2021-08-25 18:17:29 【问题描述】:

我正在尝试将单元格值(AA 中的单元格)更新为“已关闭 - 重复”,只要列 G = True(重复名称)并取消描述(AA 列),如“已关闭”。因此,基本上,如果重复名称相同并且其中一行在 AA 列下具有“已关闭”值,则将该单元格更新为新值。这是我到目前为止得到的,但由于某种原因,它给了我一个错误,我不确定为什么(参见图片作为参考):

这行代码出现错误: 如果 d = True And d.Offset(0, -7).Value = "Closed" 那么

错误提示“运行时错误 1004 - 应用程序定义或对象定义错误

Public Sub HighlightDuplicates()
Application.ScreenUpdating = False

Dim Mwb As Workbook
Dim ws As Worksheet
Dim rngVis As Range
Dim rngVis2 As Range
Dim c As Range
Dim d As Range
Dim Table As ListObject
Set Mwb = ThisWorkbook
Set ws = Mwb.Worksheets("Commission")
Set Table = ws.ListObjects("Comm_Table")
    
LR = ws.cells(ws.Rows.Count, 1).End(xlUp).Row

Table.ListColumns.Add 2
Table.HeaderRowRange(2) = "Duplicate ESIID"
ws.Range("B2:B" & LR).Value = "=SUMPRODUCT(--($A2=A:A))>1"
        
Set rngVis = ws.Range("B2:B" & LR).SpecialCells(xlCellTypeVisible)

    For Each c In rngVis.cells
        If c = True Then
        c.EntireRow.Columns("A").Interior.ColorIndex = 36
        End If
    Next c

Table.ListColumns(2).Delete

Table.ListColumns.Add 7
Table.HeaderRowRange(7) = "Duplicate Name"
ws.Range("G2:G" & LR).Value = "=SUMPRODUCT(--($F2=F:F))>1"

''This is where im having trouble:below''
Set rngVis2 = ws.Range("G2:G" & LR).SpecialCells(xlCellTypeVisible)
For Each d In rngVis2.cells
        If d = True And d.Offset(0, -7).Value = "*Closed*" Then
        d.EntireRow.Columns("AA").Value = "Closed - Duplicate"
        End If
    Next d**
    
Application.ScreenUpdating = True

End Sub

【问题讨论】:

请用确切的错误(编号、标题和描述)以及它发生的行更新您的问题。 如果您以'for loop will ... 开头的评论是两行评论,那么您需要在每行的开头添加' @SuperSymmetry 刚刚更新了帖子,我的评论只有一行。当我复制和粘贴时,堆栈就是这样。第一个 for 循环没有问题。 你也想使用正则表达式吗?如果是这样,您需要使用 Like 运算符而不是 = 运算符。 d.Offset(0, -7).Value Like "*Closed*" 那就试试If d And d.Offset(0, 20).Value Like "*Closed*" Then 【参考方案1】:

更新!我没有使用我的旧方法,而是决定使用这个 for 循环,它似乎更容易阅读,更容易理解,并且它可以满足我的要求。

    For i = 2 To Lr
     If ws.cells(i, "B").Value = "True" And ws.cells(i, "H").Value = "True" And 
      ws.cells(i, "AB").Value Like "*CLOSED*" Then
      ws.cells(i, "AB").Value = "CLOSED-DUPLICATE"
     End If
    Next i

【讨论】:

以上是关于如何根据 if 语句更新单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在摇摆中的假if语句后连续闪烁表格单元格

IF 语句:如果条件为假,如何将单元格留空(“”不起作用)

使用单元格格式值的 IF 语句

如何根据单元格颜色获取 UDF 以在 Excel 中自动更新

选择您的 if 语句触发的单元格并在 vba 中选择该单元格

对于 IF Else 循环在单元格为空时不会停止