如何在Excel中使用Vlookup的For循环使用变量来标识单元格

时间:2016-03-29 17:55:48

标签: excel excel-vba loops filter vlookup vba

1)我的目标如下:

使用条件语句替换单元格的内容,该条件语句是" Monitorato"或"非Monitorato"。确定语句类型的条件是Vlookup函数的输出。如果vlookup找到了我将拥有的价值" Monitorato",如果不发生这种情况,我会有" Non Monitorato"。

2)通过使用传统的Excel功能,事情就这样解决了:

=IF(ISNA(VLOOKUP(cell to look for, range, column, false)),"Non Monitorato","Monitorato")

然后我将此公式复制并粘贴到我编写初始公式

之下的所有单元格中

3)但是我想用VBA实现这个功能。

此外,还有一个问题。实际上过滤了数据,因此我只需要对过滤后的数据使用Vlookup功能。 Vlookup函数应查找数据集中的第一个可见单元格。

4)我编写的可怕代码如下:

Sub MyFunction()
Dim i As Long
Dim LastRow As Long
Dim FirstRow As Long
Dim Header As Range

Set Header = Range("d1")
FirstRow = Range(Header.Offset(1, 0), Header.End(xlDown)).SpecialCells(xlCellTypeVisible).Cells(1).Count

LastRow = ActiveSheet.UsedRange.Rows.SpecialCells(xlCellTypeVisible).Count
For i = FirstRow To LastRow
Sheets(1).Cells(FirstRow, 5) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 3), Sheets(1).Range("C2:D100"), 2)
Next i
End Sub

我得到的错误是

  

无法获取工作表函数类的vlookup属性

我想解决它,但我也知道必须有一个更容易解决问题的方法......

谢谢大家!

1 个答案:

答案 0 :(得分:1)

目前的代码实际上有几个问题,它无法实现您的目标。看看这段代码是否适合你:

Sub Monitorato() 

Dim ws1 as Worksheet

Set ws1 = Sheets(1)

Dim rLookup As Range, rCell as Range

With ws1

    Set rLookup = .Range(.Range("D1"),.Range("D1").End(xlDown)).SpecialCells(xlCellTypeVisible)

    For each rCell in rLookup

        If Not .Range("C2:D100").Find(rCell.Offset(,-1).Value2) Is Nothing Then

            rCell.Offset(,1).Value = "Monitorato"

        Else

            rCell.Offset(,1).Value = "Non-Monitorato"

        End If

    Next

End With    

End Sub`