• ベストアンサー

VBA 型を比較してくれる命令?関数?

Dim 変数 as Date 変数 = ActiveCell などとしていた場合に、該当のセルの中にDate型の値が入っていれば問題ないですが、文字列などが入っていた場合は「型が一致しません」と出て止まってしまいますよね。 On Err GoTo Err 変数 = ActiveCell On Err GoTo 0 Exit sub Err: エラー処理 などとして逃がしていたんですが、Goto文の扱いが面倒でこれを何とかでいないかと頭を悩ませています。 if文とかで使えるような、セルの値の型を比較してくれるようなメソッドなり関数なりないのでしょうか? ネット上をいろいろ探してみたのですが、簡単に済ませられるような方法が見つかりませんでした。 If (参照セルの中の型を確認して希望の物と違う) Then   処理 Else   処理 Endif と簡単にできる方法があれば、ぜひ教えてください。 よろしくお願いいたします。 Excelのバージョンは2003となります。

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

  • ベストアンサー
回答No.1

出来なくはないんだけどなあ …エラー出させとけ、と思う人間としては少し抵抗感が。 http://msdn.microsoft.com/en-us/library/3kfz157h%28VS.85%29.aspx Sheet1のA1に2010/01/02を入力して、アクティブにした状態で以下のコードを実行したら7が返された。 Option Explicit Sub Main() MsgBox (VarType(ActiveCell.Value)) End Sub

noname#109711
質問者

お礼

そう、まさしくこんなのを探していました! ありがとうございました!

noname#109711
質問者

補足

ちなみに気になったのですが、「エラーを出させとけ」というのはどんな理由からなんでしょうか? 一応、僕が考えていた使い方は、日付しか入っていないであろうある特定の行を上から順番に参照していくというもので、たまにメモ書きで日付以外の物が書かれていたりするので、それを削除することもできない関係上、困っていました。 こういった場合でも、エラーを出しておいた方が便利という使い方があるのでしょうか?

その他の回答 (3)

回答No.4

>エラーを出しておいた方が便利 込み上げてくるものは ●「サーバ側プログラム」として「HTTPユーザーエージェント」という一種類のものに対して奉仕する気はある。 ●各ブラウザも「一般的なユーザーエージェント」として動く分にはサービスを利用することに当然反対しない。(し、差別もしない) ●「サーバ側プログラム」の側が「IE」だとか「Firefox」だとか特定のユーザーエージェントに対して対応するコストを何で払わねばならんのだ。こっちのプログラムの設計も悪くなるし。 ●エンドユーザーは送っているデータや、ユーザーエージェントの特徴を知り、なおかつ、それらが悪い場合は、こちらに問題を寄せるべきではなく、ユーザーが自分のコストで、問題を修正したり、「使わない」という選択をすべきだ。 ●こちらが対応してしまうとエンドユーザがその問題点を認識するタイミングも失う。 ●日付以外のデータを入力するエンドユーザが悪い。→対応しない と(Excel関係なく)色々あるけど、自分の乏しい表現力で表現出来るとは思わないし、表現を直して行く気もない。

noname#109711
質問者

お礼

職業プログラマでないのでよく理解できませんが、プログラマとしてのこだわりのようなものなんでしょうね。 ありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

IF IsDate(変数) Then どこまでチェックしたいのか解りませんが・・・。 If DateDiff("d", 変数, Date) >= 0 Then として、日付のチェックもできます。 http://officetanaka.net/excel/vba/function/IsDate.htm

noname#109711
質問者

お礼

型ではなく、日付に直せるかどうかで見られる物もあるんですね。 意外とあるもんなんですね~。僕は探し方が下手なようです(^_^; ご回答ありがとうございました。

  • ziziwa1130
  • ベストアンサー率21% (329/1546)
回答No.2

VarType(varname)の値が 0:Empty 値(未初期化) 1:Null 値(無効な値) 2:整数型(Integer) 3:長整数型(Long) 4:単精度浮動小数点数型(Single) 5:倍精度浮動小数点数型(Double) 6:通貨型(Currency) 7:日付型(Date) 8:文字列型(String) 9:オブジェクト 10:エラー値 11:ブール型(Boolean) 12:バリアント型(Variant)(バリアント型配列にのみ使用) 13:非OLEオートメーションオブジェクト 14:1O進数型 17:バイト型(Byte) 36:ユーザー定義型を含むバリアント型 です。ご質問の場合には If VarType(ActiveCell) <> 7 then 処理 Else 処理 End If になります。

noname#109711
質問者

お礼

詳しい解説をありがとうございます。大変助かりました。