Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
テキスト型の値を、日付型に整えて変換
投稿日時: 20/03/30 10:22:50
投稿者: yurappy

お世話になります。
 
日付の値を、テキスト型から日付型に変換する方法で悩んで困っておりまして、教えてください。
 
 
悩んでいる内容は、ネット販売のシステムからダウンロードした販売履歴のCSVファイルを
エクセルに貼り付けてから、アクセスにリンクテーブルで読み込んでいます。
 
ダウンロードするCSVファイルは、週毎か隔週でダウンロードして、リンクしているエクセルの
1つのシートにまとめて貼り付けております。
 
その中で、唯一の日付の値がテキスト型で、
 
 2月1日*時*分
 2月15日**時*分
 3月1日*時**分
 3月30日*時**分
 10月1日**時*分
 10月15日*時*分
 
のように、月日と注文時間が一緒になったテキスト型なのですが、これを
 
 2020/02/01
 2020/02/15
 2020/10/01
 2020/10/15
 
もしくは
 
 2020年02月01日
 2020年02月15日
 2020年10月01日
 2020年10月15日
 
のように、日付のみの値にして、日付型に変換する方法がわからずに困っております。
 
さらに、もともとのデータに年度の情報も無くて、どの様に足すかもわかりません。
 
 
無理難題のようなご相談で、申し訳ございません。
 
 
良い方法がございましたら教えてください。
 
よろしくお願い申し上げます。
 

回答
投稿日時: 20/03/30 13:36:48
投稿者: sk

引用:
悩んでいる内容は、ネット販売のシステムからダウンロードした販売履歴のCSVファイルを
エクセルに貼り付けてから、アクセスにリンクテーブルで読み込んでいます。

引用:
ダウンロードするCSVファイルは、週毎か隔週でダウンロードして、
リンクしているエクセルの1つのシートにまとめて貼り付けております。

要するに、ある Excel ワークシートをリンク先とする
1 つのリンクテーブルが存在している、ということでしょうか。
 
引用:
その中で、唯一の日付の値がテキスト型

引用:
月日と注文時間が一緒になったテキスト型なのですが、これを

引用:
日付のみの値にして、日付型に変換する方法がわからずに困っております。

DateValue 関数を使用なさればよろしいのではないかと。
 
-----------------------------------------------------------
 
IIf(IsDate([フィールド名]),DateValue([フィールド名]),Null)
 
-----------------------------------------------------------

投稿日時: 20/03/30 21:20:10
投稿者: yurappy

sk様
 
お世話になります。
ご親切にご教授いただいてありがとうございます。
 
 

引用:
IIf(IsDate([フィールド名]),DateValue([フィールド名]),Null)

 
思うような表示をいたしましたが、恐れ入りますが年の箇所がすべて今年2020年になって
しまいまして、前年度のデータも今年の分もすべて2020年になりました。
 
私の書き方がいけなかったのですが、データは前年度分も今年度分も一緒になっておりまして
 

 
 前略
 11月25日
 12月5日
 12月12日
 1月5日
 1月25日
 1月30日
 後略
 
のようになっているのを
 
 2019/11/25
 2019/12/05
 2019/12/12
 2020/01/05
 2020/01/25
 2020/01/30
 
のようになって欲しいのですが、何か方法をご存知でしたら教えてくださいませ。
 
難しいようでしたら、年を省いて
 
 11/25
 12/05
 12/12
 01/05
 01/25
 01/30
 
のような形でも表示できれば嬉しいです。
 
 
sk様、皆様のご親切に甘えて申し訳ございません。
 
お願い申し上げます。
 

回答
投稿日時: 20/03/31 09:45:11
投稿者: sk

引用:
思うような表示をいたしましたが、恐れ入りますが年の箇所が
すべて今年2020年になってしまいまして、前年度のデータも
今年の分もすべて2020年になりました。

「年の記述が省略されている日付文字列」を
日付/時刻型のデータに型変換した場合、
その時点でのシステム日付と同じ年が
暗黙的に適用されるのが Access / Excel / VBA の
仕様なので、当然の結果です。
 
引用:
もともとのデータに年度の情報も無く

引用:
私の書き方がいけなかったのですが、データは
前年度分も今年度分も一緒になっておりまして

引用:
2019/11/25
2019/12/05
2019/12/12
2020/01/05
2020/01/25
2020/01/30
  
のようになって欲しいのですが、何か方法をご存知でしたら教えてくださいませ。

それぞれの日付が、どの年の日付なのかをどうやって区別するのか次第です。
 
日時の範囲が今年か去年に限られるならばまだやりようもあるでしょうけど、
もし一昨年以前の日付のレコード(データ上は区別がつかない)まで
含まれているならば、Access のクエリでどうこうするのはまず無理です。
 
引用:
ネット販売のシステムからダウンロードした販売履歴のCSVファイルを
エクセルに貼り付けてから、アクセスにリンクテーブルで読み込んでいます。

引用:
ダウンロードするCSVファイルは、週毎か隔週でダウンロード

大元の CSV ファイル上のその日時列において、日付の「年」が
省略されている状態であるならば、ダウンロードした CSV ファイルの
レコードを Excel ワークシートに貼り付ける都度、新たに追加した
レコードの日時列の各セルの値を加工する(年を付加する作業を行なう)
ようにされた方が安全です。
 
もしくは、例えばその Excel ワークシート上において、
それらのレコードの並び順が日時の昇順であることが
保証されているのであれば、また違った解決策もあるでしょう。
 
引用:
難しいようでしたら、年を省いて
  
 11/25
 12/05
 12/12
 01/05
 01/25
 01/30
  
のような形でも表示できれば嬉しいです。

どのオブジェクト(テーブル/クエリのデータシートビュー、または
フォーム/レポート)で「表示」する場合の話をされているのでしょうか。

投稿日時: 20/03/31 11:48:09
投稿者: yurappy

sk様
  
お世話になります。
ご親切にご教授いただいてありがとうございます。
 
また、わかりやすいご説明までいただいて恐縮です。
 

引用:

レコードを Excel ワークシートに貼り付ける都度、新たに追加した
レコードの日時列の各セルの値を加工する(年を付加する作業を行なう)
ようにされた方が安全です。

 
年度の箇所はエクセルで追加して作業をするように考えます。
詳しくご説明いただいて、ありがとうございます。
 
 
引用:
どのオブジェクト(テーブル/クエリのデータシートビュー、または
フォーム/レポート)で「表示」する場合の話をされているのでしょうか。

 
月ごとに、商品別や地域別で集計をしないといけなくて、幾つかのクエリで抽出や集計をした後に、
フォームで表示を確認して、その後にレポートで印刷をする手順で考えております。
 
ご親切に甘えて、ご面倒なご質問やご相談までして申し訳ございません。
 
よろしくお願い申し上げます。
 

回答
投稿日時: 20/03/31 13:20:11
投稿者: sk

引用:
月ごとに、商品別や地域別で集計をしないといけなくて、
幾つかのクエリで抽出や集計をした後に、フォームで
表示を確認して、その後にレポートで印刷をする手順で
考えております。

それなら尚更、年を含む正確な日時をデータとして
保持しておく必要があるでしょう。
(異なる年の同じ月同士のレコードがまとめて抽出/集計されることになる)
 
フォームやレポートにおける「データの見た目(書式)」を
どうこうする以前の問題です。

投稿日時: 20/03/31 16:02:17
投稿者: yurappy

sk様
  
お世話になります。
ご親切にご教授いただいてありがとうございます。
 
また、適切なアドバイスもありがとうございます。
 
昨日教えていただいた関数や、先ほどのアドバイスを参考に、年度の箇所はエクセルでの手作業に
なりますが追記をすることにして、Format関数なども利用してスマートなやり方や正攻法では
無いかも知れませんが、数回のクエリで思うような表示やレポート印刷ができました。
 
できないかと諦めておりましたが、教えていただいたりアドバイスのおかげでできました。
 
本当にありがとうございました。
 
また、困った時には助けてくださいませ。
 
ありがとうございました。