VBA Excel如果列中出现某些值,请将其复制到同一行中的另一列

VBA Excel如果列中出现某些值,请将其复制到同一行中的另一列,excel,vba,Excel,Vba,我正在与以下情况作斗争 我在U列中有一组批量数据,我必须从中过滤“缺少的极点”值。 接下来,我必须将这个“缺失极点”值复制到BN列,精确地复制到U列中的同一行,如下所示 我试过: Sub Flag() Dim lRow As Long If Range("U2:U" & lRow).Value = "Missing pole" Then Range("U2:U" & lRow).Copy Range(&

我正在与以下情况作斗争

我在U列中有一组批量数据,我必须从中过滤“缺少的极点”值。 接下来,我必须将这个“缺失极点”值复制到BN列,精确地复制到U列中的同一行,如下所示

我试过:

Sub Flag()
  Dim lRow As Long
  If Range("U2:U" & lRow).Value = "Missing pole" Then
  Range("U2:U" & lRow).Copy
  Range("BN2:BN" & lRow).PasteSpecial xlPasteValues
  End If
End Sub
但我得到了一个错误:

对象“”的方法“”范围“”失败

调试器显示:

  If Range("U2:U" & lRow).Value = "Missing pole" Then
其他线程如下所示:

但是没有一个合理的解决方案

如何将列中出现的特定值(在整个范围内)复制到另一列,并将其完全放在同一行中

下面是工作正常的VBA代码。
错误是因为您正试图获取Range对象的值,您只需要一个For循环来遍历所有行,然后检查是否有“缺少极点”的值

代码如下:

Sub Flag()
  Dim LastRow As Long
  With ActiveSheet
        LastRow = .Cells(.Rows.Count, "U").End(xlUp).Row
  End With
  For i = 2 To LastRow
    If ActiveSheet.Range("U" & i) = "Missing pole" Then
        ActiveSheet.Range("BN" & i).Value2 = ActiveSheet.Range("U" & i).Value2
    End If
  Next i
End Sub
下面是工作正常的VBA代码。
错误是因为您正试图获取Range对象的值,您只需要一个For循环来遍历所有行,然后检查是否有“缺少极点”的值

代码如下:

Sub Flag()
  Dim LastRow As Long
  With ActiveSheet
        LastRow = .Cells(.Rows.Count, "U").End(xlUp).Row
  End With
  For i = 2 To LastRow
    If ActiveSheet.Range("U" & i) = "Missing pole" Then
        ActiveSheet.Range("BN" & i).Value2 = ActiveSheet.Range("U" & i).Value2
    End If
  Next i
End Sub

可以通过以下方式使If语句不区分大小写:

Sub Flag()
  Dim lRow As Long
  Dim lLastRow As Long

  lLastRow = Range("U" & Rows.Count).End(xlUp).Row

  For lRow = 2 To lLastRow 
    If UCase$(Range("U" & lRow).Value) = "MISSING POLE" Then
      
      ' do what you want here

    End If
  Next
End Sub

可以通过以下方式使If语句不区分大小写:

Sub Flag()
  Dim lRow As Long
  Dim lLastRow As Long

  lLastRow = Range("U" & Rows.Count).End(xlUp).Row

  For lRow = 2 To lLastRow 
    If UCase$(Range("U" & lRow).Value) = "MISSING POLE" Then
      
      ' do what you want here

    End If
  Next
End Sub

您没有将
lRow
设置为任何值,因此其值为
0
Range(“U2:U0”)
不是有效的
Range
。那么我如何在此处设置lRow?那么,您要查找哪一行?最后一个?一个包含一定价值的东西?有很多方法可以找到行值。我有“缺少的极点”值,从整个U列一直到最后一行。我需要将它们大致复制到同一行的BN列中。@braX我测试您删除的代码时,您的答案将被提升。您没有将
lRow
设置为任何值,因此它的值是
0
Range(“U2:U0”)
不是有效的
Range
。那么我如何在这里设置lRow呢,你想找哪一排?最后一个?一个包含一定价值的东西?有很多方法可以找到行值。我有“缺少的极点”值,从整个U列一直到最后一行。我需要将它们大致复制到同一行的BN列。@braX当我测试你删除的代码时,你的答案将被提升。嗯,没有错误,但没有反应。我发现了一个错误。应该是“缺杆”。这个范围内的多个值如何?嗯,没有错误,但在allOK没有反应。我发现了一个错误。应该是“缺杆”。这个范围内的多个值如何?在您的代码中:而不是范围(“U2:U”&lRow)。复制范围(“BN2:BN”&lRow)。粘贴特殊xlPasteValues它应该是范围(“BN2:BN”&lRow)。值=范围(“U”&lRow)。否则整个列都会被复制。在您的代码中:而不是范围(“U2:U”&lRow)。复制范围(“BN2:BN”&lRow).Paste特殊xlPasteValues它应该是范围(“BN2:BN”&lRow)。值=范围(“U”&lRow)。值,否则将复制整个列。