使用宏vba替换基于条件的范围

时间:2014-05-29 17:45:26

标签: excel-vba vba excel

提前谢谢你。我对VBA很陌生我试图从一列中复制一列单元格并根据单个条件粘贴到一个数字中,这可以改变。我在列E中有一个列表,在列F中有一个列表。我希望能够根据列F中的相邻单元格仅从列E中的某些单元格中提取数据。基本上,无论我输入什么名称" L7& #34;,宏将从列E中提取与该名称对应的任何数据。这就是我到目前为止所做的:

Private Sub Worksheet_Change (ByVal Target As Range)
  If Target.Value = "" then Exit Sub
    Dim rn
    rn = 15
    If Target.row = 7 And Target.Column = 12 Then
      For Each cel in Range("E:E")
        If cel.Offset(0,1).value = cel.Value Then
          Range("L" & rn).Value = cel.Value
          rn = rn+1
        End If
      Next cel
    End If
End Sub

现在,这就是我想要的。如果我在单元格中更改名称,我甚至可以工作" L7"。问题是它没有替换上一次运行宏的所有数据。如果我有一个包含20个名字和10个名字的列表并运行宏来首先拉出20个名字的列表,那么当我拉出第二个名字时,它不会清除该列表中的额外名称。

我尝试了几个不同的事情。我试过了:

Sub Clear_cells()
    Sheets("Sheet1").Range("L15:L100").ClearContents
End Sub

没有返回任何错误消息但没有任何反应。

然后我尝试了:

If Range("L15:100").Value <> "" Then
    Range("L15:100").ClearContents
End If

这行代码给了我一个13型不匹配错误。

简单地说,我需要粘贴数据的整个单元格区域进行更改,并且上次宏运行时没有剩余的数据。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以在代码中调用其他宏:

Private Sub Worksheet_Change (ByVal Target As Range)
  If Target.Value = "" then Exit Sub
  Call Clear_Cells()
    Dim rn
    rn = 15
    If Target.row = 7 And Target.Column = 12 Then
      For Each cel in Range("E:E")
        If cel.Offset(0,1).value = cel.Value Then
          Range("L" & rn).Value = cel.Value
          rn = rn+1
        End If
      Next cel
    End If
End Sub

请注意,这也可以使用数组公式来完成,我觉得这是一个更好的选择,因为每次单元格在工作表上更改时都不会运行代码。