2011-09-03 61 views
-1

如果我有一个像列:一个VBA VLOOKUP函数

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 
+0

在B列中,你有没有实际的话 'NUMBER', 'DATE', 'VARCHAR' 或者一些这些类型的值? –

+0

B列中的实际单词'NUMBER','DATE','VARCHAR' – toop

+0

-1不清楚你想完成什么。看起来你只需要一个'VLOOKUP'工作表函数,但这只是一个猜测。澄清,我会不降职。 –

回答

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 
+1

注意:如果用“T”表示“真”,用“F”表示假,你可能要考虑使用布尔值。第二种方法更加清晰,因为get_data_type获取数据类型而不是检查数据类型。 – Joubarc

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()功能。