2016-08-26 6 views
0

ワークシート上の何百もの列を読み込み、データ型がアルファ、数値、または英数字かどうかを判断しようとしています。ただし、列に空のセルが多すぎると、数式は「空」に戻ります。範囲内の空のセルを最も良く無視する方法についてのアドバイスはありますか?以下は範囲データ型を決定するVBA式の範囲内の空白セルを無視する

あなたのセルが最初のものが含まれている場合は、コード

Function DataType(aVal As Variant) As String 

Select Case TypeName(aVal) 
    Case "String" 
     If IsNumeric(aVal) Then 
      If LCase(aVal) Like "*d*" Then 
       DataType = "Alphanumeric" 
      Else 
       DataType = "numerical" 
      End If 
     Else 
      If aVal Like "*[0-9]*" Then 
       DataType = "Alphanumeric" 
      Else 
       If aVal = vbNullString Then 
        DataType = "null" 
       Else 
        DataType = "Alpha" 
       End If 
      End If 
     End If 

    Case "Boolean" 
     DataType = LCase(TypeName(aVal)) 

    Case "Double", "Single", "Integer", "Long", "Byte" 
     DataType = "Numerical" 

    Case "Range" 
     DataType = DataType(aVal.Cells(1, 1).Value) 

    Case Else 
     DataType = LCase(TypeName(aVal)) 

End Select 

End Function 
+0

セルが空の場合に比較演算子を要求していますか?もしそうなら、 'IsEmpty'を使用する –

答えて

0

チェックです。このコードを使用することができます:

Function DataType(aVal As Variant) As String 
    If aVal <> "" Then 
     'Put the rest of your function code here 
    End If 
End Function 
0

何かこれを行う必要があります。

Case Else 
    If Not IsEmpty(aVal) Then 
     DataType = LCase(TypeName(aVal)) 
    End If 

代わりに、あなたは、セルが、呼び出し元のコードに.SpecialCells(xlCellTypeBlanks)と交差するかどうかを確認することができます。

+0

これは、範囲内のデータのデータ型ではなく空白のセルを返すように思われる – mfort

+0

@mfort - それは正確に言えば、それじゃない?なぜなら、空のセルは空のセルが 'vbEmpty'型の' Variant'を含む '.Value'を返すからです。したがって、 'TypeName()'は "Empty"を返します。あなたは何を見たいのですか? – Comintern

+0

したがって、列内の空白を無視し、より多くのデータと空白を持たない他の列のように、列にあるデータのデータ型を返すようにします。 – mfort

関連する問題