一个VBA vlookup函数

时间:2011-09-03 13:04:29

标签: excel vba excel-vba

如果我有以下列:

ColA     ColB
----     ----
emp      NUMBER
dept     DATE
name     VARCHAR

我需要一个可以使用的vba函数,如下所示:

If IS_NUMBER(A1) = "T" Then
  //stuff
End If

可以简单地修改为:

If IS_VARCHAR(A3) = "T" Then
  //stuff
End If

实际上,如果它的工作方式可能会更好(基本上第二个参数是在右边的单元格上进行查找):

If DataType(A3, "VARCHAR") = "T" Then
  //stuff
End If

2 个答案:

答案 0 :(得分:1)

如果您将查找表命名为命名范围,例如map,则可以使用以下代码:

Option Explicit

Function get_type(field As Variant)

  Dim map As Range
  Set map = Range("map")

  On Error Resume Next
    get_type = WorksheetFunction.vlookup(field, map, 2, 0)
  On Error GoTo 0

End Function

Sub test_get_type()

  Debug.Print get_type("emp")
  Debug.Print get_type("dept")
  Debug.Print get_type("name")

End Sub

函数get_type()只是充当vlookup()函数的直通。

答案 1 :(得分:0)

以下是我最终编码的方式:

Public Function get_data_type(Cell As Range, Text As String) As String 

  Dim dtype As String  
  dtype = Cell.Offset(0, 1).Value  
  If dtype = Text Then     
    get_data_type = "T" 
  Else     
    get_data_type = "F" 
  End If  

End Function  

Sub test() 

  If get_data_type(Range("F5187"), "VARCHAR") = "T" Then  
    '// do stuff 
  End If 

End Sub 

另一种方法:

Public Function get_data_type(Cell As Range) As String 

  Dim dtype As String  
  dtype = Cell.Offset(0, 1).Value 
  get_data_type = dtype  

End Function  

Sub test() 

  If get_data_type(Range("F5187")) = "VARCHAR" Then  
    '//stuff
  End If 

End Sub