• ベストアンサー

日付型のデータに変換するには!?

初めて、利用します!! テキストボックスに日付型のデータを入れたら、 指定した日付型のフォーマットに変換する関数を作ってます。 例えば、[20010101]と入力したら[2001/01/01]に変換! それで、入力桁数によって・・・年月日をそれぞれ算出しようとしてました。 例えば、2桁入力時は[1桁目]を「月」[2桁目]を「日」という具合に! そうしていくうち、5桁入力時に、年と月と日の判断をどうやったら良いのか わからなくなってしまいました。 今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが 判断の方法を教えてください。_(_^_)_ ※Y:年 M:月 D:日

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

>今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが そうですね。定まりませんね。 11111 と入力されたとき、 1年11月11日 11年11月1日 11年1月11日 111年1月1日 これは判断がつきません。 入力の書式が決まらないことには、プログラムで勝手に判断をつけるわけには行きません。 なので制限をつけるとか、MsgBoxを出して注意を促したり、Popupのフォームを出し、候補をリスト一覧に出し、ユーザー側に選択させるとかが必要になると思います。 なんにしても、この仕様では無理だと思います。(^^;)

hyu_ya
質問者

お礼

ありがとうございます。<m(__)m> やはりそうですよねぇ・・・ 各年月日の間に[/]が入っていれば以下の要領で大丈夫なのですが・・・ If IsDate(変数) Then 変数 = Format(変数, "yyyy/mm/dd") End If

その他の回答 (5)

  • urk
  • ベストアンサー率33% (18/53)
回答No.6

やっぱり、#2さんのように、年月日別々でコンボボックス等を設けて、選ばせるのが普通だと思います。  #1さんと同じで、この仕様では無理だと思います。 なにせ Excelの場合でも入れ方によって、勝手に間違った日付で処理するぐらいですから。(^_^)"

hyu_ya
質問者

お礼

ありがとうございました。_(._.)_ やはり、桁数を固定にするか年月日を別々に・・・ した方が無難かもしれませんね!!

回答No.5

(1)日付の入力桁は固定とし指定桁数以外の入力桁ははじく。 (2)IsDate関数を使用し日付値としての整合性チェックを行う。 (3)整合性が確認できれば任意のフォーマットに変換し出力。 でどう?

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

再度、田吾作7です。 >各年月日の間に[/]が入っていれば以下の要領で大丈夫なのですが・・・ そうですね[/]が入っていたら、日付の区切りが定まりますね。 しかし、[/]が存在しない要領では、法則がありません。 2つ以上のパターンが存在するならば、プログラムで勝手な判断をするわけにはいきません。 ユーザーの意思と反する結果を生む恐れがあるからです。 ユーザーの意思を反映させるためには (1)ありえない法則はエラー (2)ユーザーに問い合わす という処理を行うべきだと思います。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 No.1の方の言う通り、桁数を自由にして自動的に判断というのは、限界があります。 したがって、年、月、日を別のテキストボックス(またはコンボボックス)で入力するか、8桁連続入力にして、文字数判定をする(+日付として無効かどうかの判定も)などにした方がよいと思います。 日付の入力程度のことに自由度を持たせても、プログラムが煩雑になるのでやめた方がいいと思います。 では。

hyu_ya
質問者

お礼

ありがとうございました。_(._.)_ やはり桁数は固定で10桁、もしくは8桁固定が作る方としても楽です! とにもかくにも、(ソフトとか別のOCXを使わずに)テキストボックスで フォーマットが上手くできればいいのですがねぇ!

回答No.2

やるんであれば年月日それぞれにテキストボックスを設け、 年:4桁又は2桁固定。 月:2桁以内で1以上12以下。 日:2桁以内で1以上31以下。(月の値によって最大値変動) それ以外であればメッセージボックスで注意を促す こんな感じでしょうか?

hyu_ya
質問者

お礼

ありがとうございます。<(_ _)> やはり固定にした方が良いですよね!! ちなみに2桁~4桁までと7桁~8桁までは 何とか対応できた?と思ったのですがね・・・

関連するQ&A

  • Excel 日付形式に変換したい。

    Excel2003を使用しています。 入手したシートに日付項目があり、入力方法が以下のようになっています。 S50.10.15 S51. 3.10 S51. 4. 3 年、月、日が2桁の場合は日付形式になるのですが、年、月、日のいずれかが1桁の場合、日付形式になりません(スペースが入っている 1スペース月.ワンスペース日)。 このスペースを取る方法、または、日付形式に変換する方法はないでしょうか? よろしくお願いします。

  • エクセルで日付形式への変換方法

    エクセルに日付形式でなく数字8桁で日付のつもりで入力されているセルがあります。 たとえば「2004年10月1日」なら「2004/10/01」ではなく「20041001」と8桁数字で入ってるのです。 セルの書式変更では、この8桁の数字は日付とみなされずエラーになってしまいます。 この8桁数字のはいってるセルを一挙に日付形式に変換するにはどうすればいいのでしょうか

  • 文字列として入力した日付を日付データに変換したい

    OS=Windowds7 エクセルバージョン MicroOffice Home and Buisiness 2010 の中のエクセル です A列に下記のように文字列としての日付が入力されています。 例) 2014年1月5日(日) (セルの属性も”文字列”です) ここから、日付データを取り出したいです。 なお、年は4ケタ固定 プラス 漢字の”年”ですが、 月、日は十の位はゼロ表示していないので、一桁表示、二桁表示、とばらつきがあります。 また曜日表示は全角のカッコの間に漢字一文字で曜日表記してあります。 ま、文字列の日付表示から日付データさえ取り出せれば、あとは曜日のデータ取出しは簡単にできますからこれは後回しにします。 とりあえず無い知恵を絞ってこんなことをやってみました。 =LEFT(A14,LEN(A14)-3) 結果はこうなります。 計算結果 2014年1月5日 これで文字列表記の日付データが何月何日であっても(つまり、月、日が一桁表示でも二桁表示でも、どっちでも)「YYYY年M月D日」の形式での年月日表示にすることはできました。 しかし、この状態ではまだ計算結果として表示している「2014年1月5日」は依然、文字列データのままです。これでは加工ができません。 私は 2014年1月5日(日) という文字列データを日付データに変換して、例えば H26.1.5 平成26年01月05日 1/5 (それを基にして別ののセルに)sunday、日曜日、日曜、日 などなどなどの多彩に曜日表記する など「日付データとしての表記の加工」を自由に行いたいのです。 どなたか、やり方を教えてください。 なお、データ加工の為の作業用セル、作業用列を作るのは構いませんがなるべく少ない領域で お願いします。 また私が無い知恵を絞って作成した計算式 =LEFT(A14,LEN(A14)-3) が無意味ならば(多分、無意味でしょう)、全く無視していただいて構いません。 よろしくお願いします

  • 日付と曜日から、1週間前(7日前)の日付を算出するプログラム

    ツェラーの公式を用いて、日付(年月日)から曜日を算出する方法があります。 例えばY年M月D日の曜日は、下式で求められます。 (Y + Y/4 - Y/100 + Y/400 + (13*M + 8)/5 + D) % 7 *但し、1月・2月は、前年の13月・14月とする。 *答えは0=日曜~6=土曜 これを応用して(別に応用しなくても良いんですが・・・)日付と曜日から、1週間前の同一曜日の日付を求めるプログラムを考えております。 例) 入力:2005年9月21日、水曜日 出力(解):2005年9月14日 この例は非常に簡単に求められますが、完全汎用型のプログラムを考えております。 しかし、なかなか良い知恵が出ません!! どなたかご教示頂けると助かります。 よろしくお願いします。

  • エクセルの日付表記に関して(書式の強制化

    エクセル(2003)で日付を入力すると勝手に書式が決まってしまい困ってます。 セルに 11/24/09(09年11月24日) と入力するとこのままの状態で打ち込めるのですが 11/9/09(09年11月09日)と入力すると2011/9/9に強制的に変換されてしまい書式も変更されてしまいます。 日付の部分が一桁の日(1日~9日)だとエクセルの方が月だと勝手に 判断してこのような強制変換をしているようなのですがこれを させない方法?はありますでしょうか。

  • 日付データ変換

    itunesでバックアップしたデータから、メッセージの送受信日時を調べています。 1388793751という数値(dateという項目)が、「2014年1月4日09時02分31秒」だとわかりました。 (かろうじて残っていたデータからわかりました。) 数値の変換式というんでしょうか、10桁の数値から、正確な日付データになおすときの法則のようなものがあれば嬉しいです。 この数値から日付を割り出すのって無理でしょうか? ファイル形式は.dbとなっています エクセルのシリアル値でもないような(詳しくなくてすみません) お助け願います

  • Access での 「年」 のみの和暦変換について

    Accessで今、レポートの作成をしているのですが、その時に「数値」で持っている西暦の年度(例,2004)を和暦で表示する作業を行っています。  「年月日」がある日付型のデータに関しては、Format([年月日],"ggge")で表示されるのですが、数値で持っている4桁の数字に関しては、上記のように書くと突拍子も無い和暦が算出され、ちゃんとした和暦変換がなされないようです。  年度だけをDataとして持ちたいので、日付型で持つ訳にもいきません。解決策が見つからずに困っています。  どなたか、解決策をご提案いただける方、ご回答をお願いします。

  • Excelにおける日付

    仕事用に他部署からデータをExcelでいただいたのですが、1万件近くのデータが入っており、このデータの日付が全て7桁の数値として入力されているため、活用できず困っています。 Excelに詳しい方のお知恵を拝借したく、質問に参りました。 行いたい処理は、Excelのあるセルに「20050301」という7桁の数字が入力されている場合、これを別の1つのセル内に「2005年3月1日」という日付として認識させたいのです。 そういったことはできるのでしょうか? セルの書式で、表示形式をユーザー定義・####年##月##日とすれば、「2005年03月01日」と表示させることは簡単にできますが、そうではなく、7桁の数字を日付として認識させ、日付関数を使って日数の計算をしたいのです。 A1セルに「20040301」、B1セルに「20050301」と入力されているとしたら、これをそれぞれ「2004年3月1日」、「2005年3月1日」と認識させ、その間の日数が365日という結果を算出するのが目的です。 ダイレクトにできなければ、途中にいくつかの列を経由しても構いません。 よろしくお願いします。

  • Exel2003で8桁の数字を日付に変換する方法

    Exel2003で“20120123”といったような8桁数字の日付を“2012年1月23日”と置き換えたく、セルの書式をyyyy/mm/ddと設定し、8桁の数字を入力したところ、#がセルいっぱいに表示され、「負の日付または時間は####と表示されます」と出てきました。また、「セルの書式設定」にある「日付」も試してみましたが、どれもダメでした。どのような方法をとれば8桁の数字を年月日に変えることができるのか教えてください。

  • EXCELの日付の変換方法

    はじめまして。質問させていただきます。 他システムへデータを移行すため、EXCELで既に入力されている日付データを下記に変換させる方法を教えてもらえませんか? 「/」が使えずに8桁にするのが必須条件です。 1万行ほどデータがあります。   日付      日付  2006/3/1   → 20060301(月日が1桁の時は/を取り0を入れる)  2006/11/15 → 20061115(月日が2桁の時は/を取るだけ) よろしくお願いします。