Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1514 / 2272 ツリー ←次へ | 前へ→

【6627】クエリで質問があります TOMO 05/10/27(木) 11:56 質問[未読]
【6643】Re:クエリで質問があります YU-TANG 05/10/27(木) 21:28 回答[未読]
【6649】Re:クエリで質問があります TOMO 05/10/28(金) 9:39 質問[未読]
【6658】Re:クエリで質問があります YU-TANG 05/10/28(金) 15:33 発言[未読]
【6689】Re:クエリで質問があります TOMO 05/10/31(月) 11:36 回答[未読]
【6700】Re:クエリで質問があります YU-TANG 05/10/31(月) 18:29 回答[未読]
【6736】Re:クエリで質問があります TOMO 05/11/4(金) 10:46 質問[未読]
【6737】Re:クエリで質問があります YU-TANG 05/11/4(金) 12:16 回答[未読]
【6767】Re:クエリで質問があります TOMO 05/11/8(火) 16:23 質問[未読]
【6777】Re:クエリで質問があります YU-TANG 05/11/9(水) 7:14 発言[未読]
【6778】Re:クエリで質問があります TOMO 05/11/9(水) 9:52 お礼[未読]
【6796】Re:クエリで質問があります YU-TANG 05/11/11(金) 11:21 回答[未読]

【6627】クエリで質問があります
質問  TOMO  - 05/10/27(木) 11:56 -

引用なし
パスワード
   クエリで、現在の日付から出荷日、又は再出荷日を引いた期間で、商品の寿命を
表示させたいのですがどうしたらいいのでしょうか。
なお、出荷日と再出荷日両方に日付が入力されている場合は再出荷日で計算します。
宜しく御願い致します。

【6643】Re:クエリで質問があります
回答  YU-TANG WEB  - 05/10/27(木) 21:28 -

引用なし
パスワード
   こんばんは、YU-TANG です。

> クエリで、現在の日付から出荷日、又は再出荷日を引いた期間で、
> 商品の寿命を表示させたいのですがどうしたらいいのでしょうか。
> なお、出荷日と再出荷日両方に日付が入力されている場合は再出荷日で
> 計算します。

あくまで一例ですが。

Int( Date() - IIf( IsNull([再出荷日]), [出荷日], [再出荷日] ) )

…みたいな演算フィールドをクエリ上に設けるとか。
なお、「出荷日と再出荷日両方に日付が入力されてい」ないケースは
想定していません。

【6649】Re:クエリで質問があります
質問  TOMO  - 05/10/28(金) 9:39 -

引用なし
パスワード
   回答頂き有難う御座います。
早速試みてみたのですが、以下の様に式を入れてデータシートビューで
確認したところリストが一つも挙がってきませんでした。
何か問題があるのでしょうか。
ちなみに、商品の寿命はテーブルでフィールドを設けていません。
クエリで新たに追加しても宜しいのでしょうか。
何分独学でACCESSをはじめたところで初歩的な質問をしてしまい
すみません。

▼YU-TANG さん:
>こんばんは、YU-TANG です。
>
>> クエリで、現在の日付から出荷日、又は再出荷日を引いた期間で、
>> 商品の寿命を表示させたいのですがどうしたらいいのでしょうか。
>> なお、出荷日と再出荷日両方に日付が入力されている場合は再出荷日で
>> 計算します。
>
>あくまで一例ですが。
>
>Int( Date() - IIf( IsNull([再出荷日]), [出荷日], [再出荷日] ) )
>
>…みたいな演算フィールドをクエリ上に設けるとか。
>なお、「出荷日と再出荷日両方に日付が入力されてい」ないケースは
>想定していません。

【6658】Re:クエリで質問があります
発言  YU-TANG WEB  - 05/10/28(金) 15:33 -

引用なし
パスワード
   こんにちは、YU-TANG です。

>早速試みてみたのですが、以下の様に式を入れてデータシートビューで
>確認したところリストが一つも挙がってきませんでした。
>何か問題があるのでしょうか。

現状の SQL 文と、関連フィールドのデータ型を提示していただけますか。
もし↑の意味が分からなければ、そう言ってください。
別の説明を試みますので。

>ちなみに、商品の寿命はテーブルでフィールドを設けていません。
>クエリで新たに追加しても宜しいのでしょうか。

はい。
それでよいです。

【6689】Re:クエリで質問があります
回答  TOMO  - 05/10/31(月) 11:36 -

引用なし
パスワード
   お返事遅くなり申し訳御座いません。
以下の内容で宜しいでしょうか。
もし誤っておりましたらご指示下さいませ。
宜しく御願い致します。

SELECT 電化製品.件数, 電化製品.購入累計, 電化製品.オーダーNo, 電化製品.顧客名, 電化製品.英語名, 電化製品.[No], 電化製品.本体No, 電化製品.電化製品No, 電化製品.電化製品.入荷日, 電化製品.出荷日, 電化製品.再出荷日, [電化製品].電化製品の寿命 AS 式1, 電化製品.故障日, 電化製品.故障箇所, 電化製品.記号, 電化製品.備考
FROM 電化製品
WHERE ((([電化製品].[電化製品の寿命])=Int(Date()-IIf(IsNull([再出荷日]),[出荷日],[再出荷日]))));

▼YU-TANG さん:
>こんにちは、YU-TANG です。
>
>>早速試みてみたのですが、以下の様に式を入れてデータシートビューで
>>確認したところリストが一つも挙がってきませんでした。
>>何か問題があるのでしょうか。
>
>現状の SQL 文と、関連フィールドのデータ型を提示していただけますか。
>もし↑の意味が分からなければ、そう言ってください。
>別の説明を試みますので。

【6700】Re:クエリで質問があります
回答  YU-TANG WEB  - 05/10/31(月) 18:29 -

引用なし
パスワード
   こんばんは、YU-TANG です。

検証用に、下記 SQL 文の選択クエリを作成してみてください。

SELECT
 電化製品の寿命,
 Int(Date()-IIf(IsNull([再出荷日]),[出荷日],[再出荷日])) AS 出荷後経過日数,
 (電化製品の寿命 = 出荷後経過日数) AS 比較
FROM
 電化製品;

クエリを開いて視認した段階で、[比較] 列に True(-1) が 1 件も
見当たらないようであれば、少なくともこの SQL 文ではレコードが
上がってこないのが正常です。

[電化製品の寿命] フィールドには、具体的にどんな値が入っているの
でしょうか。

また「([電化製品].[電化製品の寿命])=...」だと、たまたまちょうど
寿命が切れたジャスト当日にクエリを開かないと該当が出ないような
気がしますが、そういう仕様で本当によろしいんでしょうか。

その辺も合わせて確認するとよいでしょう。

【6736】Re:クエリで質問があります
質問  TOMO  - 05/11/4(金) 10:46 -

引用なし
パスワード
   お返事有難うございます。
御送り頂きました通り行いましたら電化製品の寿命が
表示されました。
尚、以下の式を追加したいのですがどのようにしたら
宜しいでしょうか。

1.故障日と再出荷日が空白の場合→現在から出荷日をひく
2.故障日のみが空白の場合→現在から再出荷日をひく
3.再出荷日のみ空白(故障日有り)→故障日から出荷日をひく

また、寿命の表示が現在、日数で表示されているのですが
○○年○○ヶ月○○日としたいのですが
どのようにしたらよろしいでしょうか。
何度も質問しまして申し訳御座いません。
宜しく御願い致します。

【6737】Re:クエリで質問があります
回答  YU-TANG WEB  - 05/11/4(金) 12:16 -

引用なし
パスワード
   こんにちは、YU-TANG です。

> 御送り頂きました通り行いましたら電化製品の寿命が
> 表示されました。

ということは、「リストが一つも挙がって」こないという問題は
解決されたのでしょうか。
それは「([電化製品].[電化製品の寿命])=...」が原因だったので
しょうか。それとも、他の原因だったのでしょうか。

ここは公開掲示板なので、ROM の方々や過去ログ用にフィードバック
をお願いします。

> 1.故障日と再出荷日が空白の場合→現在から出荷日をひく
> 2.故障日のみが空白の場合→現在から再出荷日をひく
> 3.再出荷日のみ空白(故障日有り)→故障日から出荷日をひく

話が変わってきていますね。
条件判断が 2 フィールドではなく 3 フィールドに依存するとなると、
ここまでの話はご破算です。

私はこういうのを「後出しジャンケン」と呼んでいますが、後から
「実は…」と前提を変えられることによって、それまでのやりとりが
水泡に帰します。

あなたにとっても私にとっても時間の無駄ですから、説明は端折らず
正確にお願いします。


まず前提を仕切り直しましょう。
3 フィールドの組み合わせだと 2^3 で 8 通りの組み合わせが
有り得ますが、3 通りしか提示されていません。
この 3 通りしか有り得ないのでしょうか?

とりあえず仕様を明確にしてください。
でないと、また後で「実は出荷日のみが空白の場合はこうしたいんです
が…」と、無駄にスレが伸びるリスクを懸念しなければなりません。

また、この前提だとクエリ上の式のみで組むのは危険です。
不可能ではありませんが、おそらく式が複雑になって、初心者では
メンテナンス不能になります。
私がやるならユーザー定義関数を使いますが、VBA の使用は問題あり
ませんか?

# と言っても、元々こちらは「VBA質問箱」ですが。
              ~~~
> また、寿命の表示が現在、日数で表示されているのですが
> ○○年○○ヶ月○○日としたいのですが

こちらも先のケースと同じ理由で、VBA の方が適切に思います。
Microsoft 社が類似のサポート技術情報をリリースしていますが、
そちらでもユーザー定義関数を使っています。

http://support.microsoft.com/kb/100136/JA/
http://support.microsoft.com/kb/210522/JA/

上記の応用で実現できるでしょう。

【6767】Re:クエリで質問があります
質問  TOMO  - 05/11/8(火) 16:23 -

引用なし
パスワード
   すみません。ご指摘の通りです。
申し訳御座いません。

>それは「([電化製品].[電化製品の寿命])=...」が原因だったので
>しょうか。それとも、他の原因だったのでしょうか。

「([電化製品].[電化製品の寿命])=...」が原因でした。
有難う御座いました。

>3 フィールドの組み合わせだと 2^3 で 8 通りの組み合わせが
>有り得ますが、3 通りしか提示されていません。
>この 3 通りしか有り得ないのでしょうか?

3通りしかありません。

>また、この前提だとクエリ上の式のみで組むのは危険です。
>不可能ではありませんが、おそらく式が複雑になって、初心者では
>メンテナンス不能になります。
>私がやるならユーザー定義関数を使いますが、VBA の使用は問題あり
>ませんか?
>
># と言っても、元々こちらは「VBA質問箱」ですが。
>              ~~~
>> また、寿命の表示が現在、日数で表示されているのですが
>> ○○年○○ヶ月○○日としたいのですが
>
>こちらも先のケースと同じ理由で、VBA の方が適切に思います。
>Microsoft 社が類似のサポート技術情報をリリースしていますが、
>そちらでもユーザー定義関数を使っています。
>
>http://support.microsoft.com/kb/100136/JA/
>http://support.microsoft.com/kb/210522/JA/
>
>上記の応用で実現できるでしょう。

VBAは使用したことはありません。他の方法で出来ないでしょうか。

【6777】Re:クエリで質問があります
発言  YU-TANG WEB  - 05/11/9(水) 7:14 -

引用なし
パスワード
   おはようございます、YU-TANG です。

> VBAは使用したことはありません。他の方法で出来ないでしょうか。

出来るでしょうが、私はそちらの方法に興味が無いので、パスします。
申し訳ありませんが、他の方のレスをお待ちください。

【6778】Re:クエリで質問があります
お礼  TOMO  - 05/11/9(水) 9:52 -

引用なし
パスワード
   >出来るでしょうが、私はそちらの方法に興味が無いので、パスします。
>申し訳ありませんが、他の方のレスをお待ちください。

色々有難う御座いました。
本当に御手数をお掛け致しました。

【6796】Re:クエリで質問があります
回答  YU-TANG WEB  - 05/11/11(金) 11:21 -

引用なし
パスワード
   こんにちは、YU-TANG です。

> 出来るでしょうが、私はそちらの方法に興味が無いので、パスします。
> 申し訳ありませんが、他の方のレスをお待ちください。

…と書いてから 48 時間経過しましたが、レスが付かないようですね。

こういうのは犯罪捜査と同じで、経験則的には 48 時間以内に被疑者を
検挙…じゃなくて、レスが付かないと、解決率が急激に低下する傾向が
あります。

オチの付かないツリーほど見苦しいものもないので、再レスを。

SELECT
 *,
 IIf(IsNull([再出荷日]), [出荷日], [再出荷日])       AS 開始日,
 IIf(IsNull([故障日]),Date(),[故障日])           AS 最終日,
 Format$([開始日], "mm\.dd") > Format$([最終日], "mm\.dd") AS 補正,
 DateDiff("m", [開始日], [最終日]) + [補正]        AS 月,
 (DateDiff("yyyy", [開始日], [最終日]) + [補正])
  & "年" & ([月] Mod 12) & "ヶ月"
  & ([最終日] - DateAdd("m", [月], [開始日])) & "日"   AS 寿命
FROM
 [電化製品]
WHERE
 [電化製品の寿命]
  = IIf(IsNull([故障日]), Date(), [故障日])
  - IIf(IsNull([再出荷日]), [出荷日], [再出荷日]);

上記 SQL 文をクエリの SQL ビューに貼り付けて保存してください。

簡易ロジックで、閏年対応を省いています。
2/29 が絡むと寿命が 1 日くらいズレるかもしれませんが、ご容赦を。

これを使うなら、SQL 文の意味を把握するようにしてください。
でないとメンテ不能になります。
クエリの SQL ビューとデザインビューを見比べるとか、関数ごとに
分割して解析するなどしてください。
その上で、不明点は質問してください。

それでは。

1514 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free