エクセルのセルにはいっている値を厳密に、自然数かどうかの判定をしたいのですが、どうするといいのでしょうか? 半角の自然数のみか空白にセルの値をしたいのです。全角、半角を区別は当然ですが、'(アポストロフィーなども)も、間違ったデータがはいっといるとしてたいのです。判別方法によっては、アポストロフィーはスルーされることがあるようです。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2012/07/24 13:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント50pt

VBA ですが一応列挙された条件は判定しています。
判定したい範囲を選択して CheckNaturalNumber を実行してください。

Sub CheckNaturalNumber()
    Dim r As Range
    For Each r In Selection
        If isNaturalNumber(r) = False Then
            r.Interior.ColorIndex = 3
        Else
            r.Interior.ColorIndex = xlNone
        End If
    Next
End Sub

Function isNaturalNumber(r As Range)
    isNaturalNumber = False
    If IsNumeric(r.Value) = False Then Exit Function
    If r.Value <= 0 Then Exit Function
    If (r.Value - CLng(r.Value)) <> 0 Then Exit Function
    If StrConv(r.Value, vbNarrow) <> CStr(r.Value) Then Exit Function
    If r.HasFormula = True Then Exit Function
    If r.PrefixCharacter <> "" Then Exit Function
    isNaturalNumber = True
End Function

標準モジュールにおいて実行です。
http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_vbe.html

id:Mook

セルの値が数式の結果でも問題なければ HasFormula の判定は不要です。

2012/07/18 14:17:37
id:Baku7770 No.2

回答回数2832ベストアンサー獲得回数181

ポイント50pt

ISNUNBER関数がありますので、まず数値かどうかは簡単に判断できます。
http://excel.onushi.com/function/isnumber.htm

後は自然数かどうかですから、正で、int関数との差が0かどうかで判定できます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません