• ベストアンサー

VBAにてデータが数字か文字かを判定するには

VBAにてデータが数字か文字かを判定するには、 どうすれば良いのでしょうか? 文字数は任意で決まっていません。 123 ← 数字 あい ← 文字 1F  ← 文字 G  ← 文字

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 数字か文字かなら、IsNumeric でよいと思いますが、数値か文字かでしたら、VarType を使います。私の場合は、IsNumericは、めったに使いません。VarTypeのほうが多いですね。IsNumeric は、文字通り、文字か数字かで、文字列書式の数字も含まれます。なお、VBAでは、数字は、数値型に型キャストされますので、特に問題は発生しません。 ご参考までに。 Sub Test()  If VarType(Range("A1").Value) = vbDouble Then   MsgBox "数値"  ElseIf VarType(Range("A1").Value) = vbString Then   MsgBox "文字列"  Else   MsgBox "その他" '代表的なものはエラー値です  End If End Sub ----------------------------------------- こちらの場合は、全角数字も、数字として扱われます。 Sub Test2()  If IsNumeric(Range("A1").Value) Then    MsgBox "数字"  Else    MsgBox "数字ではない"  End If End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 大変良く分かりました。

その他の回答 (2)

noname#145184
noname#145184
回答No.2

IsNumeric関数で良いと思います。 使い方はヘルプをご参照ください。

VitaminBB
質問者

お礼

回答ありがとうございます。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

IsNumeric()関数を使います。

VitaminBB
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • 文字の判定について

    はじめまして。 vba初心者でして、とても困っているのです。 セルの値が数字かどうかの判定はどうやら IsNumeric で出来るようですが、 英数字かどうかの判定方法がわかりません! (半角の数字とアルファベットのみの文字列かどうか) ご存知の方いらっしゃったら教えてください! お願いします。

  • VBA 人の目には同じ数字に見えるのに、VBAは違う数字として判定してしまう

    あるセルに1826.97792という数字が入力されており、 別のセルにも1826.97792と同じ数字が入力されています。 人間の目で見る限りまったく同じ数字です。 また、エクセル関数=if(・・・・・)で判定しても同じ数字という判定がでます。 しかしながら、VBAにて if セル1=セル2 then などとして比較すると、同じでないという判定結果になります。 どうしてこういうことが起きるのでしょうか? また、プログラムを書くうえでの対処方法はどうすればいいのでしょうか? ちなみに、数字は他の人が作ったファイルのもので、 改めて、手で入力しなおすと正しく判定されます。

  • VBAでUnicodeしか存在しない文字の判定について

    VBA初心者の質問ですが、宜しくお願いします。 エクセル上にUnicodeしか存在しない文字が含まれた文字列を入力するとします。 VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定をするにはどのようにしたらいいでしょうか? また、その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得するにはどうしたらいいでしょうか?

  • 文字と数字の判定

    テキストボックスに入力された事柄が文字なのか数字なのか判定する関数ってないでしょうか? 無い場合どのようなロジックを組めばいいのでしょうか?

    • ベストアンサー
    • Perl
  • 特定のセルに数字を入力すると特定の文字を表記VBA

    (1)セルG9には「ドラム缶   缶」と表記されています。ここに数字のみを入力すると「ドラム缶  〇 缶(〇は先ほど入力した数字)を自動表記し、「ドラム缶 〇  缶」と表記された文字をデリートボタン等で消したら、再び「ドラム缶   缶」と自動表記するVBAはありますか? セルF9には、G9の「ドラム缶 〇  缶」の〇の数字に200を掛けて、「○○○L」と自動表記させたいのですが、どの様にVBAを書けば良いですか?G9が「ドラム缶   缶」と数字が表記されている時はF9も「   L」と空白表記させたいです。 (2)セルG11には「20L缶   缶」と表記されています。ここに数字のみを入力すると「20L缶  〇 缶(〇は先ほど入力した数字)を自動表記し、「20L缶 〇  缶」と表記された文字をデリートボタン等で消したら、再び「20L缶   缶」と自動表記するVBAはありますか? セルF11には、G11の「20L缶 〇  缶」の〇の数字と一緒の数字「○L」と自動表記させたいのですが、どの様にVBAを書けば良いですか?G11が「20L缶    缶」と数字が表記されていない時はF11も「   L」と空白表記させたいです。 (3)セルG29には「        L」と表記されています。ここに数字を入力すると「   〇     L(〇は先ほど入力した数字)を自動表記し、「    〇    L」と表記された文字をデリートボタン等で消したら、再び「        L」と自動表記するVBAはありますか? セルF29には、G29の「        L」と全く一緒に連動した文字(ここでは「        L」)を自動表記させたいのですが、VBAではどの様にすれば良いですか?

  • VBAにて 文字と数字が混在してるデータの並び替え

    VBAにて、 A列に以下のようなデータがある場合、数字の小さい順に並べ替えるにはどうすればよいのでしょうか? 数字は文字として入力されている場合もあります。 2 1 本屋 9 赤 33 結果 パターン1 このようにしたい 数字と漢字が分かれていること 1 2 9 33 赤 本屋 パターン2 このようにしたい 数字以外の順序はどうでもよい 1 2 9 33 本屋 赤 パターン3 これはダメ 1 2 33 9 本屋 赤

  • javaでの文字判定

    javaにおいて16進数文字判定はどのようにするのでしょうか? 例えばString文字列が16進数文字0-9,a-f,A-Fで構成されているかどうかを 判定するにはどのようにすれば良いのでしょうか? このString文字列の長さは事前には分からず、数文字かもしれないし 数百文字かもしれません c言語の場合だとchar配列xyz[]があって中身が"1234abc"の場合 isxdigit()を使ってループでisxdigit( xyz[i] )として1文字づつ判定しNUL文字が 出現すれば終了となるわけですがjavaの場合だとどうするのでしょう? Stringの場合、byte[]の場合、char[]の場合それぞれ教えてもらえると助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • VBAで単位文字を省き数字だけ取る方法

    Excelブック内に200枚くらいあるシート上の各"G8"セルの数値を集計用シートに並べていくマクロです。 これは繰り返し構文で問題ないんですが、セルの数字には「本」の単位が付いています。 381本、1305本、0本などです。 この本を抜かし数字だけを集計用シートのセルに入れたいです。 桁数がまちまちなので一度Len関数でG8セル内の文字数をかぞえ、その数から1(本のぶん)を引いた文字数をLeft関数で取る という方法しか考え付きません。 単位の字を省くだけにしては複雑すぎる気がするんですが、本来はどの様な方法をとるのでしょうか。

  • 数字と文字が混在するデータから数字を抜き出す

    数字と文字が混在するデータ群があります。 そこから数字を抜き出し数字形式に変換したいのですがわかりません。教えてください。 データ群 1     文字形式 → 数字形式に変換したい。 これをVlookUpの検索値にします。 2     文字形式  東     文字形式 → 変換しません 3     文字形式 西     文字形式 20    文字形式 ・                  説明のない部分は同様と言う意味です。 ・ ・

  • VBAで「1」、「01」等を同じ数字とみなすには?

    エクセル2003です。VBAは初心者です。 ある列(Aとして)にデータがあって、A列をキーに昇順に並べ替えます。(1行目が見出し。) その後、2行目の値を基準値として、 ループで3行目から4行目、5行目…と順に値を見ていき基準値と比較して、 値が異なったら基準値でフィルタをかけて印刷し、 現在の値を新たな基準値として次のループを行う、 という処理を行っていました。 上記の時は数字4文字(0001、0100等)という前提だった為、空白や4文字の数字以外は 事前にチェックしてエラーメッセージを出していたのですが、 新たに「01」や「00001」も「0001」と同じ値として扱うことにしました。 この場合オートフィルタで「01」や「00001」と「0001」を同時に抽出する事は可能でしょうか? また無理な場合、どのような処理にすればよろしいでしょうか? 今の所、2つの値の文字数を取得(Len関数)し、 RIGHT関数で1文字取得。 1文字を比較して異なれば別とみなし印刷、 同じなら次はRIGHTで2文字取得して2文字を比較… これを少ない方の文字数分行う。 その後、文字数が多い方の文字列からLEFT関数で差分の文字数分取得し、 オールゼロなら同じとみなし、オールゼロでなければ別とみなす…。 という様な処理を作っている途中なのですが、 まずCOBOLのように、不特定な文字数の文字列に対して「ALLZERO」かどうかを見る 方法はあるでしょうか? また、処理が長引いているような気もするのですが、 これ以外に有効な方法はあるでしょうか? 教えていただけると助かります。 よろしくお願い致します。

専門家に質問してみよう