2016-08-26 3 views
0

워크 시트에서 수백 개의 열을 읽고 데이터 형식이 알파, 숫자 또는 영숫자인지 확인하려고합니다. 그러나 수식은 열에 빈 셀이 너무 많으면 "빈"을 반환합니다. 범위에서 빈 셀을 가장 잘 무시하는 방법에 대한 조언이 있습니까? 휴대가 먼저 뭔가를 포함하는 경우Range 데이터 형식을 결정하는 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

관련 문제