Access95 Version7を使っています。

DateDiff関数を使って日数を出したいのですが、
テーブルにあるデータは”テキスト型”になっています。
これを”日付/時刻型”に変換するには、どうすれば良いのでしょうか?

データ例:20010520

というように、8桁で入っています。

宜しくお願いします・・・。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ANo.2 の続きです。

自分でやるとうまく日付になるんですが・・・その後、演算もできます。

>#Errorになってしまいました

受注日とか日付が未入力のレコードでエラーが起きていませんか?これぐらいしか思いつきませんでした。

例えば、クエリーで受注日を日付にしたいときは、受注日ymdというフィールドを
IIf(Len([受注日])=8,DateSerial(Mid([受注日],1,4),Mid([受注日],5,2),Mid([受注日],7,2)),0)
のように定義して下さい。8桁の文字列しか日付にしません。
これで、DateDiffで日数等を計算する時、両方の日付が未入力の場合は0日になりますが、どちらかの日付に未入力があれば同様の判定が必要でしょう。

また、全体が分かりませんが、[テーブル1]![受注日]のようにしてみたら・・・どうでしょう。
    • good
    • 0

テーブル定義の型を変更したいという事でしょうか?


それでしたら無理です。
もちろん、テーブルの張り替えを行えばできますが。
もう一つテーブルを作って、クエリーで型を変換して落として、元のテーブルを削除して新しい方をリネームすれば大丈夫だと思います。
    • good
    • 0

クエリーで


= DateSerial(Mid([あるデータ],1,4),Mid([あるデータ],5,2),Mid([あるデータ],7,2))
ではどうでしょう。

この回答への補足

お返事ありがとうございます。

[あるデータ]に特定の8桁の数字をあてはめた場合は、これでうまく動きました!

でも、フィールド名を入れることで、そのフィールドの全データを変換することはできないのでしょうか?
同一クエリー内にあるフィールド名を[あるデータ]に代入してみましたが、#Errorになってしまいました。

補足日時:2001/07/19 13:39
    • good
    • 0

dim nowdata as Date


dim strBuff as String

strBuff=format("yyyy/mm/dd","20010520")
とformat関数を使用して、
nowdate=CDate(strBuff)
とDate型に変換ではだめですか?
VBで操作するときは、私は上記のようにしています。

これくらいはやってると怒られるかもしれませんが、こういう質問の
時はどこまで考えたか書いた方がいいかと思います。

この回答への補足

早速のお返事、ありがとうございます。

聞き方がおおざっぱすぎました。すみません・・・。

私がためしてみた方法は、プロパティの”定型入力”とかいじれば変換できるのだろうか?とかいったレベルです。
でも、これだと表示が変わるだけなんですね。

あちこちのサイトなども覗いたのですが、どうしても分かりませんでした。

教えて頂いたコードは、”モジュール”に記入すべきものなのでしょうか?
(この質問でお察し頂ける通り、Access初心者です)
モジュールがよく分からないので、もう少し詳しく教えて頂ければありがたいのですが。

ちなみに、変換したいデータのフィールド名は、
「受注日」「納期予定」「納品日」
などです。

補足日時:2001/07/19 13:29
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QExcel VBAで、セルに入ってるデータ型を調べる方法は?

現在、Excel VBAでプログラムを作成しています。

Do Until ~ Loop の終了条件を
アクティブセルに入っているデータの型が文字列型の時
としたいのですが、そのようなことは可能なのでしょうか?

可能だとしたら、どのように記述したらいいのでしょうか?

当方のPCは
Win XP、Excel2003
です。

よろしくお願いいたします。

Aベストアンサー

VarType 関数を使うとか。

Sub SampleProc()

  Dim i As Long
  
  i = 1
  Do While Len(Cells(i, "A").Value) > 0
    If VarType(Cells(i, "A")) = vbString Then
      Exit Do
    Else
      ' // 処理
    End If
    i = i + 1
  Loop
  MsgBox CStr(i) & "行目で停止"

End Sub

QAccess2000テーブルでのデータ型(日付/時刻型)

とても初歩的な質問で申し訳ありません。
データの入力を"○○年××月"という形にしたいのですが、
日付/時刻型にしてしまうとテーブルでの表示が”○○年××月01日”になってしまいます。
のちのち、計算をして”○○年×ヶ月”というようにしたいので、
日付/時刻型にした方がいいと思っているのですが・・・。
どうしたらよいか、どなたかいいアドバイスをお願い致します。

Aベストアンサー

私ならそのフィールドを「テキスト型」または「数値型」の6桁で作成します。
のちのち計算する場合も、Datediff関数で、不足している1日を追加することによって計算できます。
あと、別の用途として、年度変換テーブルを用意することによって、
年度、半期、四半期ごとなどに集計することも容易になるからです。

御参考まで。

QVBAで計算した結果がデータ型により相違してしまいます。VBAに詳しい

VBAで計算した結果がデータ型により相違してしまいます。VBAに詳しい方、理由を教えてください。よろしくお願いします。

Dim 税率 As Single
Dim 売上 As Double
単価=Range("b5").Value:個数=Range("d5").value:税率=Range("f5").Value
売上=(1+税率)*単価*個数
(1)単価=30000、個数=15、税率=0.05と入力すると売上の数値=472500.000335276となります。
(2)売上のデータ型をsingleにした場合は、売上=472500となります。
(3)売上のデータ型Single、税率のデータ型をDoubleとした場合も売上=472500となります。
(1)の結果の小数点以下の数値の意味がわかりません。
よろしくお願いいたします。

Aベストアンサー

計算する値がDouble型を含む場合、その項と計算する項はDouble型でなくとも、Double型に自動キャストされて計算が行われます。

Double型での計算結果は誤差が付き物です。

「Double」と「誤差」で履歴を検索
http://okwave.jp/search?word=Double+%E8%AA%A4%E5%B7%AE&boolean=and&target=&ques_stat=&c_select=true&date=&sort=score&c=257


あまり大きな桁が異なる計算を行うと誤差が出るかも知れませんが、
※全ての変数 As Currency
とすると、ある程度の対応が出来ます。

QAccess テキスト型を日付/時刻型へ変更

いつもお世話になっております。
Accessについてお願い致します。
テーブル「メインデータ」に日付と時刻が一緒になっているデータがあります。例:2004/01/01/ 10:00
現在、
フィールド名:受付時間
データ型:テキスト型
フィールドサイズ:12
定数入力:0000/00/00\ 00:00;0;_
と設定してあり、問題はこのデータをテキスト型から日付/時刻型「「yyyy/mm/dd @@:@@」)へ変更したいのですが、
テキスト型→日付/時刻型へ変更すればデータが消えてしまいます。
そこで、クエリでFormatを使ったのですがエラーが出てしまいます。
何か良い案はございませんでしょうか?
宜しくお願い致します。

Aベストアンサー

1)新しくフィールド(仮に「受付時間2」とするを追加し、書式を「日付/時刻型」にし、その他の項目も設定する。
2)データシートビュー表示で「受付時間」の列を選択し、新しく設定した「受付時間2」の列に貼り付ける。
3)デザインビューで「受付時間」を削除し、「受付時間2」を「受付時間」に変更する。
※フォーム、クエリなどのリンクは、再設定する必要が有るかもしれません。
※適当なテーブルをつくってテストしてみて下さい。
※バックアップもしておくと良いと思います。

QVBAでの0のデータ型は

VBAの初心者です。ExcelのVBAで小数点2桁の変数Xのデータ型を宣言したいのですが、このXは”0”の時もあります。
このような時はこの変数の型はどのように宣言したら良いのでしょうか、定義では、”Single”には正の範囲と負の範囲があって”0”がないようなのですが?

Aベストアンサー

Singleで問題ないと思います。
(通貨型の方がいい場合もありますが;詳細はヘルプを参照下さい)

確かに、ヘルプで単精度浮動小数点型(Single)を見ると「負の数は~、正の数は~」と表記されて
いますが、実際に代入してみるとわかるように「0」も設定可能です。

にもかかわらず、長整数型のように「-○○~+○○」といった表記をしないのは、それと同じように
しまうと、実際に使用可能な桁数より小さいものまで含むことになってしまうからです。

・・・まあ、「負の数は~、正の数は~」に続けて、「及び0が設定可能」とするのが、確かに
一番親切な表記だとは思いますけれど。

Qアクセス上で4桁の数字を時刻として何時間経過したか計算する方法

0930と2215という2つの4桁のただの数字があります。
2215-0930=1285と言う答えになります。
が、この4桁の数字を時刻として
09:30と22:15の間は12時間45分と計算し、表示形式を12.75とする方法を知りたいです。これをアクセス上のデータで行いたいのですが、いい方法がありましたら教えて下さい。

Aベストアンサー

アクセスのことは全然わからんのですが、
割り算の余りをもとめる、とか、
小数点以下を切り捨てた値を求める、という関数や、
変数などはありますか?
あれば、わりと簡単な計算でできます。

t1=930 (または、2215)
とすると、
h1 = 小数点以下切り捨て関数(t/100)
m1 = あまりを求める関数(t,100)
のような計算をすると、
hに9が、mに30が入ります。こうすると、
t1=h+m/60
でt1が9.5になります。
2215の方も同様の計算で t2=22.25 になります。
こうなれば、普通の引き算 t2-t1 で12.75が出せます。

Qエクセル2013VBA 列のデータ型更新の最速なやり方は?

Excel 2013 VBA
A列に16000行の数字が文字列として入っています。
これを数値型に変えたいのですが、一番早い方法はありますか?
今VBAでしている方法は、For nextで回して、セルのデータ型を数値型に変換→Aのセルの値を同じセルに入れなおすというやりかた

これは気が遠くなるほど時間がかかります。

教えていただけると非常に助かります。

Aベストアンサー

外部データをインポートしたりすると数値が数字になってしまいイラつきますよね。
現在は VBA でやっているようですが、VBA 以外の方法でもよいのでしょうか?

【方法 1】
(テキストファイルをインポートするのであれば)
1. 外部データ ファイルの拡張子が csv なら txt に変更する。
2. Excel で開くときに [テキスト形式] のファイルに切り替えて上記のファイルを読み込む。
3. データをインポートするウィザードが動くので、当該列の形式を数値に指定する。

【方法 2】
別の列にいったん移す方法
問題の列が B列だとして、
1. 隣の C1 に 「=B1*1」 というように 1を掛ける計算式を仕込む。
2. C列を選択してコピーし、B列に値貼り付けする。

【方法 3】
方法 2 を別のアプローチで行う方法
1. 問題のセルの書式設定が「文字列」になっていれば「標準」に変更する。
2. まったく関係ないセルに数値の 1 を入力する。
3. そのセルをコピーする。
4. 問題のセルを選択する。
5. [ホーム] タブの [クリップボード] にある [貼り付け] の下の矢印をクリックして [形式を選択して貼り付け] を選択。 [演算] の [乗算] を選択して [OK] をクリックする。

【方法 4】
データの区切り位置ウィザードで一気に解決する方法
1. 問題のセルの書式設定が「文字列」になっていれば「標準」に変更する。
2. 問題の列が B列だとして、B列全体を選択する。
3. [データ] リボンの [データ ツール] タブにある [区切り位置] をクリックする。
4. 区切り位置指定ウィザードが起動する。
5. [次へ] ボタンじゃなく、いきなり [完了] ボタンをクリックする。

【方法 5】
Excel のエラー チェック機能で一気に解決する方法
1. 問題の列全体、または問題のセル群を選択する。
2. 選択範囲の右上にドッキリマークのアイコンが表示される。
3. アイコンをクリックして [数値に変換する] をクリックする。

外部データをインポートしたりすると数値が数字になってしまいイラつきますよね。
現在は VBA でやっているようですが、VBA 以外の方法でもよいのでしょうか?

【方法 1】
(テキストファイルをインポートするのであれば)
1. 外部データ ファイルの拡張子が csv なら txt に変更する。
2. Excel で開くときに [テキスト形式] のファイルに切り替えて上記のファイルを読み込む。
3. データをインポートするウィザードが動くので、当該列の形式を数値に指定する。

【方法 2】
別の列にいったん移す方法
問題の列が ...続きを読む

Q時刻データを日付データへ (Access2.0)

あるシステムからデータを抜き出し、アクセスやエクセルにて二次加工
利用しています。システム側では、以下のように時刻欄を(便宜的に)
日付として利用しています。

時刻欄に入力されている 6:01:27 (2006年01月17日の意味)

これを数値表示させた場合以下の通りであり、当然、時刻として扱われ
てしまいます。

2006/01/27  (38744)
6:01:27 (0.2510069)

やむなく 6:01:27 のまま日付表示を意味するとして印字しているので
すが、このままでは日数計算など数式に取り込むことができません。

6:01:27 を計算式にて日付データへ変換することは可能でしょうか?
識者の方、ご経験者の方アドバイスいただけましたら幸いです。

Aベストアンサー

これは?
Sub aaa()

Dim strDate As String

strDate = "6:01:27"
strDate = Replace(strDate, ":", "/")

Debug.Print DateValue(strDate) '2006/1/27

End Sub

QVBAのデータ型に関する質問です。 以下のような宣言と処理をしました。

VBAのデータ型に関する質問です。 以下のような宣言と処理をしました。
Dim 数値1 As Integer
Dim 数値2 As Integer
Dim 数値3 As Long
数値1=Range("b5").Value
数値2=Range("c5").Value
数値3=数値1*数値2 この式では、数値3がLongの型ではなくIntegerになってしまいオーバーフローのエラーになってしまいます。(10000×5の場合等)Long型のまま代入する方法がありましたら教えてください。よろしくお願いいたします。

Aベストアンサー

数値3はlong型で宣言してあるので、long型だと思います。
この場合は数値1*数値2の時点でinteger型×integer型なので、
代入以前の演算の段階でオーバーフローが発生すると思われます。

全ての変数をlong型で宣言するのはどうでしょうか?

integer型というのは1世代前のプログラミング概念による変数型です。
当時は8ビットまたは16ビット処理だったのでinteger型がコンパクトで
処理も速かったのです。
しあkし、現在では32ビットまたは64ビット処理なので、long型の
方が都合がいいのです。今のinteger型は以前のプログラムと互換性を
保つためにあり、long型の半分をマスクしているに過ぎず、32ビット
ずつメモリーを消費します。つまり、integer型のメリットは無くなって
いるのです。

それから、厳密に言えばセルの値はバリアント型です。
Long型=variant型 でもプログラムは自動的に左辺の型に合わして
くれますが、正式にはint関数をかませたほうがいいでしょう。

QACCESSで10桁の中から中の3桁を抜き出す関数

ACCESSで7けたの数値7654321から765の部分3桁と43の部分の2桁、21の桁を分けて抜きとりたいのですが、どういう関数を使ったらよいかわかりません、LEFT関数を使ってみたりしたのですがどうも欲しいものが取り出せないので基礎的なことですが教えてください
よろしくおねがいします

Aベストアンサー

クエリのデザイングリッドの「フィールド」のセルに

a: [x] \ 10000
b: ([x] Mod 10000) \ 100
c: [x]-[a]*10000-[b]*100

と入力してください。ここで、x は 7654321 などが入っているフィールドの名前、a, b, c は計算結果が入るフィールドの名前です。

7654321 に対しては、a に 765、b に 43、c に 21 が得られます。


人気Q&Aランキング

おすすめ情報