ワークシート内のセルを反復処理するとき、セルの書式設定を取得するにはどうすればよいですか? これに基づいて、単一のティックを追加するか、取得した値に追加しないSQLステートメントを作成したいので
4 に答える
VarType()関数 が必要なようです。Vartype(Range("A1"))
わかりました。セルの書式設定ではなく、値が数値かどうかを知りたいとします。IsNumeric(Range("A1"))
場合は、電話して引用していただけますかFalse
?
一部の数値がテキストとして DB に保存されているというコメントに基づいて、単純な式でこれを解決するつもりはありません。SQL ステートメントを作成するときに値を引用することはできませんか?
VBA で以下を使用してみてください。
Range("A1").NumberFormat = "0.00" 'Sets cell formatting to numeric with 2 decimals.
Range("A1").Formula = "=Text(6, " & """0.00""" & ")" 'Looks like a number _
' but is really text.
Debug.Print WorksheetFunction.IsNumber(Range("A1")) 'Prints False
Range("A1").Value = 6 'Puts number into the cell, which also looks like 6.00
Debug.Print WorksheetFunction.IsNumber(Range("A1")) 'Prints True
これにより、セルの書式設定プロパティに関係なく、値が実際にテキストであるか実際に数値であるかがわかります。
重要なのは、VBA 関数の IsNumeric よりも、組み込みの Excel IsNumber() 関数の方がこの目的に適しているということです。IsNumber() はセルの値が数値かどうかを示しますが、IsNumeric はセルが数値用にフォーマットされているかどうかのみを示します。
セルに実際に数値が含まれているかどうかを示すセルのプロパティはないと思いますが、VarType()
Excelでは数値形式のセルに文字列を含めることができ、テキスト形式のセルに数値を含めることができるため、注意が必要です。NumberFormat
プロパティをオーバーライドせずに値。
いずれの場合も、セルがIsNumeric(または他の基準)であるかどうか、およびセルNumberFormat
が定義可能な列挙リストに含まれているかどうかを確認するために、独立したテストが必要になる可能性があります。
Sub numFormat()
Dim cl As Range
Dim numFormat As String
Dim isNumber As Boolean
For Each cl In Range("A1")
numFormat = cl.NumberFormat
isNumber = IsNumeric(Trim(cl.Value))
Select Case numFormat
Case "General", "0", "0.0", "0.00" ' <--- modify as needed to account for other formats, etc.
If isNumber Then
Debug.Print cl.Address & " formatted as " & numFormat
End If
Case Else
'ignore all other cases
End Select
Next
End Sub
セルのフォーマットは重要ではないと思います。むしろ、データベース内のフィールドのデータ型です。セルに文字列 'foobar' があり、それを Long Integer フィールドに入れようとする INSERT INTO sql ステートメントを作成すると、目盛りに関係なく失敗します。
逆に、VARCHAR フィールドに入力する必要がある数値 (100 など) がセルに含まれている場合は、目盛り ('100' など) が必要になります。
ADO を使用している場合は、Field オブジェクトの Type プロパティをチェックして、データ型を確認します。このリストhttp://support.microsoft.com/kb/193947を使用して、タイプを確認してください。次に、フィールド タイプに応じて SQL ステートメントを設定します。