Excel VBA如果cell.value=。。然后是范围(选择).offset().值问题

Excel VBA如果cell.value=。。然后是范围(选择).offset().值问题,vba,excel,Vba,Excel,我在下面的代码中遇到错误: For Each cell In Range("H2", Selection.End(xlDown).End(xlDown).End(xlUp)).SpecialCells(xlCellTypeVisible) If cell.Value = Range(Sheets("Mapping").Cells(4, x)).Value Then Range(Selection).Offset(0, -7).Value = "=IF(LEFT(RC9,8)=Mapping!R8

我在下面的代码中遇到错误:

For Each cell In Range("H2", Selection.End(xlDown).End(xlDown).End(xlUp)).SpecialCells(xlCellTypeVisible)
If cell.Value = Range(Sheets("Mapping").Cells(4, x)).Value Then
Range(Selection).Offset(0, -7).Value = "=IF(LEFT(RC9,8)=Mapping!R8C1,""YES"",""NO"")"
Else
End If
这是一个较大代码的一部分,我试图将H列中的每个可见单元格与映射表中的单元格进行比较,如果正确,则if语句将添加到a列中

在另一个if语句中尝试使用cell.value时,我遇到了类似的问题,其中包括AND语句,请参见下文。在本例中,列I的FOR语句类型相同。将第I列中的每个值与映射表上的两个不同单元格进行比较,并将A列的值更改为“是”。两行代码在第三行中断,第二行代码也在第二行中断

For Each cell In Range("I2", Selection.End(xlDown).End(xlDown).End(xlUp)).SpecialCells(xlCellTypeVisible)
If cell.Value = Range(Sheets("Mapping").Cells(4, x)).Value And cell.Value = Range(Sheets("Mapping").Cells(9, 1)).Value Then
Range(Selection).Offset(0, -7).Value = "YES"
Else
'do nothing
任何帮助都将不胜感激。
谢谢。

认为您正在尝试这样做:

For Each cell In Range("H2:H" & Range("H" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    If cell.Value = Sheets("Mapping").Cells(4, x).Value Then
        cell.Offset(0, -7).FormulaR1C1 = "=IF(LEFT(RC9,8)=Mapping!R8C1,""YES"",""NO"")"
    End If
Next
我不确定变量
x
包含什么-我只是假设您的代码意味着要检查工作表“映射”第4行第x列中的值。如果您希望
4
cell.Row
或其他内容,则需要进行必要的更改

您的另一段代码可能是:

If Sheets("Mapping").Cells(4, x).Value <> Sheets("Mapping").Cells(9, 1).Value Then
    'No processing required if Mapping![x]4 isn't the same as Mapping!A9
Else
    For Each cell In Range("I2:I" & Range("I" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
        If cell.Value = Sheets("Mapping").Cells(4, x).Value Then
            cell.Offset(0, -7).Value = "YES"
        End If
    Next
End If
If表(“映射”).单元格(4,x).值表(“映射”).单元格(9,1).值然后
'如果映射,则不需要处理![x] 4与映射不同!A9
其他的
对于范围中的每个单元格(“I2:I”和范围(“I”和Rows.Count).End(xlUp.Row).SpecialCells(xlCellTypeVisible)
如果cell.Value=Sheets(“映射”).Cells(4,x).Value则
单元格偏移量(0,-7).Value=“是”
如果结束
下一个
如果结束

添加错误消息和预先进行选择的代码。您应该调试您的选择范围和单元格值,以确保您拥有您认为拥有的内容。我不知道这是否重要,但当我需要在某个范围中输入公式时,我不使用
.value
,而是使用
.formula
。所以
Range(Selection).Offset(0,-7).Formula=“=IF(LEFT(RC9,8)=Mapping!R8C1”,“YES”,“NO”)”
但我希望这不是唯一需要解决的问题
Selection
作为
Range
对象,
Range(Selection)
感觉不太对。也就是说,你应该在你的代码中(也就是说,使用
Selection
不应该是一种做事的方式),而应该使用对象引用。请注意,不合格的
范围
隐式引用活动工作表,而不合格的
工作表
隐式引用活动工作簿(您想改用
工作表
集合,它只包含
工作表
对象-这对于
工作表
集合不一定是正确的)。运行代码时,哪个单元格是“选中的”?例如,如果是单元格D4,则在D2:H297(第“297”行)中的所有单元格之间循环以D4中的.End(xlDown).End(xlDown).End(xlUp)可能返回的内容为例。如果单元格E22具有相同的值
Sheets(“映射”).Cells(4,x).value
,则第3行将尝试访问E列左侧的第7列。显然这将失败。至于
If cell.value=Range(Sheets(“映射”).Cells(4,x)).Value和cell.Value=范围(表(“映射”).Cells(9,1)).Value然后
行,如果
表(“映射”).Cells(4,x).Value
不等于
表(“映射”).Cells(9,1).Value
您甚至可以通过不搜索单元格范围来优化代码,因为如果两个值不匹配,则没有任何单元格会同时匹配这两个值。如果它们确实匹配,则将cell.Value与这两个值进行比较是没有意义的,您也可以只对其中一个进行测试。