web-dev-qa-db-ja.com

VBA言語でxが整数の場合、用語をどのように表現しますか?

vBA言語でxが整数の場合、用語をどのように表現しますか? xが整数の場合は何かを実行し、VBA Excelを使用しない場合は何かを実行するコードを記述したいと思います。

Sub dim()
  Dim x is Variant

  'if x is integer Then 

  'Else:

End Sub 
17
excel34
If IsNumeric(x) Then 'it will check if x is a number

タイプを確認したい場合は、

If TypeName(x) = "Integer" Then
24
shahkalpesh

これは適しているかもしれません:

If x = Int(x) Then
15
Fionnuala

データ型が「整数」を意味するのか、「10進数のない数値」の意味で整数を意味するのかによって異なります。後者の場合は、簡単な手動テストで十分です(最初の例を参照)。前者を意味する場合は、さまざまな長所と短所をすべて備えたデータ型を調べる3つの方法があります。

  1. VarTypeは、バリアントのサブタイプを示します(例を参照)。列挙型への単なるメモリ読み取りであるため、かなり高速ですが、バリアントでのみ使用でき、特定のオブジェクトタイプを通知しません。さらに、バリアントのサブタイプは自動的に割り当てられることがよくあります(一般に、適切な最小のデータ型でタイプする傾向があります)。ただし、注意が必要な場合があります(例を参照)。
  2. TypeNameは最も柔軟で堅牢です。特定のクラスタイプとバリアントサブタイプを知ることができます。テストには文字列の比較が必要であるというわずかな欠点があるため、パフォーマンスへの影響はごくわずかです。しかし、深刻な繰り返しがない限り、それは目立ちません。また、プロジェクト内に同じ名前の2つのオブジェクト(例:Word.RangeとExcel.Range)がある場合、TypeNameは違いを見分けることができません(両方に対して「Range」を返します)。
  3. 最後に、TypeOf演算子があります(ここでは役に立ちません)。 TypeOf演算子はプリミティブ(例:整数、ロング、文字列など)をテストできませんが、オブジェクトの特定のタイプ(例:Excel.RangeとWord.Range)を識別できます。 TypeOf演算子は、オブジェクトが何もない場合にエラーをスローします。そのため、常に「Not Is Nothing」についてオブジェクトを事前テストする必要がありますが、関数ではなく演算子であるため、TypeNameよりもはるかに高速です(事前テストがあっても)。
Public Sub ExampleManual()
    Dim d As Double
    d = 1
    If Fix(d) = d Then
        MsgBox "Integer"
    End If
End Sub

Public Sub ExampleTypeName()
    Dim x As Integer
    MsgBox TypeName(x)
End Sub

Public Sub ExampleTypeOf()
    Dim x As Excel.Range
    Set x = Selection
    ''//Using TypeOf on Objects set to Nothing will throw an error.
    If Not x Is Nothing Then
        If TypeOf x Is Excel.Range Then
            MsgBox "Range"
        End If
    End If
End Sub

Public Sub ExampleVarType()
    Dim x As Variant
    ''//These are all different types:
    x = "1"
    x = 1
    x = 1&
    x = 1#
    Select Case VarType(x)
        Case vbEmpty
        Case vbNull
        Case vbInteger
        Case vbLong
        Case vbSingle
        Case vbDouble
        Case vbCurrency
        Case vbDate
        Case vbString
        Case vbObject
        Case vbError
        Case vbBoolean
        Case vbVariant
        Case vbDataObject
        Case vbDecimal
        Case vbByte
        Case vbUserDefinedType
        Case vbArray
        Case Else
    End Select
End Sub
12
Oorang