2011-09-03 7 views
-1

Si j'avais des colonnes comme:Une fonction VBA vlookup

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

je besoin d'une fonction vba que je pourrais utiliser comme suit:

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

et pourrait être simplement modifié pour:

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

En fait, il pourrait être mieux si cela a fonctionné comme (fondamentalement le 2ème paramètre fait une recherche sur la cellule vers la droite):

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

Dans la colonne B, avez-vous de NUMERO 'mots réels, 'DATE', 'VARCHAR' ou quelque valeurs de ces types? –

+0

mots réels 'NUMBER', 'DATE', 'VARCHAR' dans la colonne B – toop

+0

-1 Vous ne savez pas exactement ce que vous essayez d'accomplir. On dirait que vous avez juste besoin d'une fonction de feuille de travail 'VLOOKUP', mais c'est juste une supposition. Clarifier et je vais un-downvote. –

Répondre

0

Voilà comment je fini par coder:

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 

Une autre méthode:

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

Note de côté: si par "T" vous voulez dire Vrai et par "F" vous voulez dire Faux, vous pouvez envisager d'utiliser un booléen. Votre seconde méthode est beaucoup plus claire car 'get_data_type'd obtient le type de données au lieu de le vérifier. – Joubarc

1

Si vous avez nommé votre table de recherche comme une plage nommée, dire à map, vous pouvez utiliser le code suivant:

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 

La fonction get_type() agit simplement en tant que passthrough à la fonction vlookup().

Questions connexes