如何根据 if 语句更新单元格?
How do you update a cell based on an if statement?
我正在尝试将单元格值(AA 中的单元格)更新为“已关闭 - 重复”,只要列 G = True(重复名称)和取消描述(AA 列)如“已关闭”。因此,基本上,如果重复名称相同并且其中一行在 AA 列下具有“已关闭”值,则将该单元格更新为新值。这是我到目前为止得到的,但由于某种原因它给了我一个错误,我不确定为什么(参见图片作为参考):
这行代码出现错误:
If d = True And d.Offset(0, -7).Value = "Closed" Then
错误显示“运行 时间错误 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 循环,它似乎更容易阅读并且更容易理解,并且它可以满足我的要求。
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
我正在尝试将单元格值(AA 中的单元格)更新为“已关闭 - 重复”,只要列 G = True(重复名称)和取消描述(AA 列)如“已关闭”。因此,基本上,如果重复名称相同并且其中一行在 AA 列下具有“已关闭”值,则将该单元格更新为新值。这是我到目前为止得到的,但由于某种原因它给了我一个错误,我不确定为什么(参见图片作为参考):
这行代码出现错误: If d = True And d.Offset(0, -7).Value = "Closed" Then
错误显示“运行 时间错误 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 循环,它似乎更容易阅读并且更容易理解,并且它可以满足我的要求。
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