• ベストアンサー
  • すぐに回答を!

Excel VBAで文字列の日付を判定

Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数10849
  • ありがとう数12

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

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

>文字列の書式で”19900101”などとセルに入力されている場合 >セルには必ず文字列で"yyyymmdd"入力されます。その日付を判定したいのですが たぶん、ここの時点で質問内容が正しく書かれていないのではないでしょうか。文字列で、書式がyyyymmdd ということはありません。単に数字だけではないでしょうか?もし、書式で変えているなら、IsDate で判定できるし、それ以外は、エラー表示しているはずです。 それに、8桁数字は、IsDate では判定できませんね。 ご質問内容からは、ある程度の想定でコードを作りましたから、以下から必要な部分を抜き出してください。 '// Sub MacroTest1()  Dim myDate As Variant  myDate = ActiveCell.Text '表示で取得  If IsDate(myDate) Then    MsgBox CDate(myDate)  ElseIf Len(myDate) = 8 And IsNumeric(myDate) Then '8桁で数字の場合   myDate = Format(myDate, "##/##/##") 'yyyy/mm/dd 型に変換   If IsDate(myDate) Then    MsgBox CDate(myDate) '日付型に変換   Else    MsgBox "日付に変換できません。", vbExclamation   End If  Else   MsgBox "日付に該当するデータがありません。", vbExclamation  End If End Sub

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • EXCELで日付を文字列として取り出すには

    EXCELで日付形式のセルの内容を、そのイメージのまま文字列にするにはどうすれば良いでしょうか。何かうまい方法があれば教えてください。 例えば、2006/01/05 と表示されている日付をそのまま文字列として 取り出したいのです。単にセルの書式設定で文字列に変えただけでは 38722とタイムスタンプの値らしきものに化けてしまうので困っています。

  • Excelで日付の書式を指定文字列に変換

    Excelで日付の書式を指定文字列に変換 セルから日付情報を得て、文字列でyyyymmddに変換するには、どのようにすればいいでしょうか。VBA・関数のどちらでもかまいません。よろしくお願いします。

  • EXCELの日付データを文字列に変換したい

    EXCELの和暦形式の日付データを文字列に変換する方法を教えてください。 たとえば、H17.9.2をそのまま文字列に変換したいのです。 最初から文字列データとして入力すれば問題ないのですが、日付データ(標準)として入力されたデータを書式→セル→文字列で変換するとシリアル値に変わってしまいます。(H17.9.2→38597) どうしたらよいのでしょうか。お願いします。

その他の回答 (4)

  • 回答No.5
  • layy
  • ベストアンサー率23% (292/1222)

既に入力されている値をチェックすることもいいですが、入力される時にチェックする、カレンダー機能で入力、ができればこちらも対応をお薦めします。 エラー時はメッセージでいいんでしょうか。VBAでやるということは何件かまとめた処理では?、それならいちいちメッセージは出せません。

共感・感謝の気持ちを伝えよう!

  • 回答No.4

dim s$ s="19900101" if isdate(mid$(s,1,4) & "/" & mid$(s,5,2) & "/" & mid$(s,7,2))=false then msgbox "No!"

共感・感謝の気持ちを伝えよう!

  • 回答No.2

Formatで変換すれば、日付確認はできると思います。    IsDate(Format(日付, "0000/00/00")) 【例】  IsDate(Format(19900101, "0000/00/00"))  … True  IsDate(Format(19900132, "0000/00/00"))  … False

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • qyukip
  • ベストアンサー率40% (13/32)

ISDATEは日付型へ変換可能ならTRUEを返すものなので IF ISDATE(入力データ) =FALSE then 入力エラーの処理 end if のように記述してみてはいかがでしょうか

共感・感謝の気持ちを伝えよう!

質問者からの補足

説明不足でした。申し訳ありません。 セルには必ず文字列で"yyyymmdd"入力されます。その日付を判定したいのですが、ほかに方法はありませんでしょうか。

関連するQ&A

  • excelで日付を文字列として保存したい

    excel(たぶんかなり新しいバーション)を使っています。 最近のexcelはバージョンすら、見方がわかりません。 さて、日付を"2015-01"という書式で、テキストファイルとしてアップロードしないといけなくなりました。2015-09 と入力すると 2015/9/1 として保存されてしまうので、セルの書式を 文字列にし、2015-09  や 2016-12などとうちこんでから.csvで保存しました。 このファイルを開けると、それらがすべて2015/09とか2016/12として保存されています! これを セルの書式を 文字列 に変更すると42248 とかになってしまいます。 そんなこんなで一日つぶしています。マイクロ●●●社は社会に、もはや善よりも悪をもたらしているように信じていますが、それはさておき、2015-01をあるがままの文字列として.csvに保存するにはどうすればよいのでしょうか。' を頭につけるて、ファイルをアップロードすると規則違反なので、別の方法をお教えください。

  • Excel VBAで、様々な書式設定のセルをyyyymmddの文字列に

    Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたい dim i Columns("A:B").NumberFormatLocal = "@" For i = 1 To 5 If Cells(i, 1)NumberFormat = "@" Then Cells(i, 2) = Aells(i, 1).text Else Cells(i, 2) = Application.text(cells(i, "1"), "yyyymmdd") End If Next Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたいのですが・・ 上記のソースを書いた場合、文字列・日付・ユーザ定義などの書式設定ではうまくいきますが、標準で19990101などと入力されていた場合はエラーになってしまいます。 どのように直せばうまくいくのでしょうか? よろしくお願いします。

  • エクセルで日付の文字列のシリアル値化

    E5セルに 2020年7月1日~2021年6月1日 という文字列があります。 AFセルに =IF(E5="","",LEFT(E5,FIND("日",E5))*1) AG5セルに =IF(E5="","",MID(E5,FIND("~",E5)+1,11)*1) として日付をシリアル値で取り出しています。 このエクセルを他の人にわたしたのですが、その方がE5に 2020年8月1日~2021年9月1日 という文字列をコピペしたところ AF5もAG5もVALUEエラーになってしまいました。 最初、入力した文字列の形式が誤っているのではと思って、メールでファイルをおくってもらったのですが、入力形式に問題はなく、VALUEエラーが出ていました。 わたしの端末で、そのセルにカーソルをあて、エンターキーを押すと日付に変わりました。 どのような原因でこうなるのでしょうか? VALUEエラーが出ないようにするのはどうすればいいのでしょうか?

  • "/"がある文字列が勝手に日付型になってしまい困っています

    "/"がある文字列が勝手に日付型になってしまい困っています VBAのセルの書式設定について質問があります。 マラソンの順位や個人情報をまとめた表があり、その表がカテゴリ別に半角スペースで区切られているデータをセルごとにまとめています。 順位は"1/3467"のように"個人の順位/参加者"という形式なのですが、カテゴリ毎に分割してセルに文字列を入れると"Jan-67"となっており日付型として認識されてしまいます。 (個人順位が13位以降は"13/3467"といった形式に戻ることから、最初の1位から12位までの間だけだと思われます) そこで、2つほど対策をしてみました。 1,セルの書式設定を変更する  →一通り確認してみましたが、どれも変更できませんでした   ユーザー定義の使い方次第で可能かもしれませんが、分かりませんでした。 2,"/"の位置で分割して、個人順位と参加者に分けて管理する。  →"3467/1/1"という文字列に変換されているため、"/"で分割しても参加人数は認識できますが、   個人順位が日付のような形式になってしまいます。 順位の形式は変えても変えなくても構いませんので、文字列を日付型に変換せずに保管する方法をご存知でしたら、ご教授いただけないでしょうか。 よろしくお願いいたします。

  • VBAで文字列検索の方法

    エクセルで実現したいVBAです。 セル内に入力されている文字列に任意の文字が含まれているかどうかを判定したいのです。 例えば, 「特別値引対応商品」と入力されているセルに 「値引」という文字が含まれているかどうか のチェックをしたいのです。 検索する文字列(上記の場合なら「値引」)は固定でかまわないのですが,どのようにすれば実現できるでしょうか。 関数を探してみたのですが,ないように思います・・・。

  • このセルには2桁年で表示される日付文字列が、、、、

    お世話になります。 今さらなのですが、今年からエクセルで住所録を作ってみようと 番地の欄に ”1-1-1”のように、 入力しますと表題のようなエラー警告のようなものが表示されます。 そのセルには昔のエクセルの注釈のような記号がつきます。 セルの書式は文字列にしているのですが、 これ、何とかならないのでしょうか? 希望としては昔のエクセルのように、 難しいことは言わずに、文字列として指定すれば その通り、文字列として扱ってほしいのですが。。。。。 エクセルはExcel2010です。 これ、うまい方法が無いと、 やっぱり新しいオフィスはやーだ! になってしまいそうなので、 何とか良い方法をお教え下さい。 どうぞよろしくお願い申し上げます。

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

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

  • Excelで日付を見たまま文字列として取り扱いたい

    excelで「2009年8月」と「2009年8月1日」と入力されているデータを区別したいのですが,共に日付として「2009/8/1」と認識されてしまいます。 excelデータ自身は別の人が入力しているので,「入力する時に文字列として・・」ということはできないのです。 どうにかして見えているまま文字列として取り扱いたいのですがどうしたらよいでしょうか? ご教授よろしくお願いいたします。

  • エクセルVBAで文字列変換

    エクセル2010でVBAを書いています。 シートの中のセルを全ての書式を文字列に変換するのはどうすればよいでしょうか。 ボタンをクリックした時にシート内のセルが全て文字列型に変換するという動きにしたいです。 解決法などありますでしょうか。 よろしくお願いします。

  • エクセルVBAで文字列を判定する方法

    たとえばセルA1に何か入力した時にその入力したものが、数列か文字列かを判定する方法はVBAでありませんか?よろしくお願いします。