Access VBA質問箱 IV

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

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


368 / 500 ページ ←次へ | 前へ→

【5847】Re:最終項目の最後の移動
回答  小僧  - 05/8/12(金) 10:45 -

引用なし
パスワード
   ▼安久 さん:
とりあえず…。

SELECT P.saidayの最大 AS 検査日,
    dbo_kenkekdt.ukeno AS 受付番号,
    P.kancd AS カルテNO,
    dbo_kanmf.kjnam AS 患者氏名,
    dbo_kenmasf.kensacode AS 検査コード,
    dbo_kenmasf.kensaname AS 検査名,
    dbo_kenkekdt.kekka AS 検査結果,
    dbo_kenmasf.unit AS 単位
FROM (([
SELECT dbo_kenkekdt.kekcode,
    Max(dbo_kenkekdt.saiday) AS saidayの最大,
    dbo_kenirahd.kancd
FROM dbo_kenkekdt
INNER JOIN dbo_kenirahd ON (dbo_kenkekdt.ukeymd = dbo_kenirahd.ukeymd)
   AND (dbo_kenkekdt.ukeno = dbo_kenirahd.ukeno)
GROUP BY dbo_kenkekdt.kekcode, dbo_kenirahd.kancd
]. AS P
INNER JOIN dbo_kanmf ON P.kancd = dbo_kanmf.code)
INNER JOIN dbo_kenmasf ON P.kekcode = dbo_kenmasf.kensacode)
INNER JOIN dbo_kenkekdt ON P.saidayの最大 = dbo_kenkekdt.saiday
GROUP BY P.saidayの最大,
     dbo_kenkekdt.ukeno,
     P.kancd, dbo_kanmf.kjnam,
     dbo_kenmasf.kensacode,
     dbo_kenmasf.kensaname,
     dbo_kenkekdt.kekka,
     dbo_kenmasf.unit;

上記 SQL で患者氏名ごとに最新の検査結果が抽出できないでしょうか?
・ツリー全体表示

【5846】Re:テキストボックスデータをテーブルに
質問    - 05/8/12(金) 10:43 -

引用なし
パスワード
   ▼小僧 さん:
実行コマンドボタンクリック時イベントで早速やらせていただきました!が、実行ボタンを押すと

SQLステートメントが正しくありません。'DELETE','INSERT','PROCEDURE','SELECT',または'UPDATE'を使用してください。

とエラーがでます。対処法を教えてください_(_^_)_

また、先ほどはクリック時のイベントにコードビルダを設定していましたが、ご指示がでたので変更しました。そこでもう一つご質問ですが、マクロのSQLの実行=コードビルダで先ほど設定したものと同じものということですか?


>▼桜 さん:
>おはようございます。
>
>>そのフォームの実行ボタンを押すとテキストボックスIDがIDテーブルに
>>登録されるように教えていただきましたが、
>>それとプラスしてその実行ボタンを押すとIDテーブルから
>>エクセルシートが開くまで設定したいのです。
>
>マクロで行っているのでしたら、先ほど提示させて頂いた「ワークシート変換」です。
>同じマクロの中に
>
>アクション
>SQLの実行
>ワークシート変換
>
>の順に記述すればいけると思うのですがいかがでしょうか?
・ツリー全体表示

【5845】Re:テキストボックスデータをテーブルに
発言  小僧  - 05/8/12(金) 10:11 -

引用なし
パスワード
   ▼桜 さん:
おはようございます。

>そのフォームの実行ボタンを押すとテキストボックスIDがIDテーブルに
>登録されるように教えていただきましたが、
>それとプラスしてその実行ボタンを押すとIDテーブルから
>エクセルシートが開くまで設定したいのです。

マクロで行っているのでしたら、先ほど提示させて頂いた「ワークシート変換」です。
同じマクロの中に

アクション
SQLの実行
ワークシート変換

の順に記述すればいけると思うのですがいかがでしょうか?
・ツリー全体表示

【5844】Re:最終項目の最後の移動
発言  小僧  - 05/8/12(金) 10:07 -

引用なし
パスワード
   ▼安久 さん:
おはようございます。

SQL の解析をして1時間、まだ全体が掴めていません。
質問者の方がSQL さえ提示すれば回答者は全てが解る訳もなく、
回答者(少なくとも自分)は SQL の内容からテーブル構成を
想像しながら作っていかなければいけません。

少なくともテーブル構成とフィールドのデータ型は情報としてご提示して頂きたいです。


まだクエリ1しかみておりませんが、現在のところ解っているのは

>WHERE AND ((ki.ukeno)=・・・

WHERE 句の後にいきなり「AND」 はありえません。

>(ki.ukeymd)<`90000000`)

「ki.ukeymd」は dbo_kenirahd テーブルと dbo_kenkekdt テーブルで持っている
「受付日」にあたる項目ではないのでしょうか?
それが「90000000」という文字列と比較している…「kancd」の間違いでは?

フィールドの名前からある程度判断はできるのですが回答者の想像に委ねることなく、
安久 さんが伝えたい情報をできるだけ正確に回答者(当方だけにでなく)に伝えられる様に
ご提示する内容を検討されてみて下さい。
・ツリー全体表示

【5843】Re:テキストボックスデータをテーブルに
質問    - 05/8/12(金) 9:38 -

引用なし
パスワード
   おはようございます。またまたすいません。。
そのフォームの実行ボタンを押すとテキストボックスIDがIDテーブルに登録されるように教えていただきましたが、それとプラスしてその実行ボタンを押すとIDテーブルからエクセルシートが開くまで設定したいのです。
 
できますでしょうか?
・ツリー全体表示

【5842】Re:最終項目の最後の移動
質問  安久  - 05/8/11(木) 18:08 -

引用なし
パスワード
   今は、ka検査クエリとka検査クエリ2を作っています。
そして、フォームの中のリストボックスは非連結で値集合ソースに 
 SELECT ka検査.検査日,ka検査.検査名,ka検査.検査結果,ka検査.単位 FROM ka検査 ORDER BY ka検査.検査日 DESC; というふうにしています。
 もうひとつのFormにはカルテNoだけを一致させるようにつくっています。

ka検査クエリのSQLビューには
 SELECT kek.saiday AS 検査日,kiukeno AS 受付番号,k.code AS カルテNO,k.kjnam AS 患者氏名,km.kensacode AS 検査コード,km.kensaname AS 検査名,kek.kekka AS 検査結果,km.unit AS 単位
 FROM dbo_kenmasf AS km,dbo_kenkekdt AS kek,dbo_kanmf AS k,dbo_kenirahd AS ki
WHERE AND ((ki.ukeno)=[kek].[ukeno])AND((k.code)=[Forms]![患者名]![カルテNo]AND (ki.kancd)=[k].[code] And (ki.ukeymd)<`90000000`) AND ((kek.kekcode)=[km].[kensacode])AND((ki.ukeymd)=[kek].[ukeymd]))
ORDER BY kek.saiday,ki.kancd;


ka検査クエリ2のSQLビューには
 SELECT kek.saiday AS 検査日,kiukeno AS 受付番号,k.code AS カルテNO,k.kjnam AS 患者氏名,km.kensacode AS 検査コード,km.kensaname AS 検査名,kek.kekka AS 検査結果,km.unit AS 単位
 FROM dbo_kenmasf AS km,dbo_kenkekdt AS kek,dbo_kanmf AS k,dbo_kenirahd AS ki
WHERE((kek.saiday)=[Forms]![2]![テキスト2]AND ((ki.ukeno)=[kek].[ukeno])AND((k.code)=[Forms]![患者名]![カルテNo]AND ((ki.kancd)=[k].[code] And (ki.kancd)<'90000000') AND ((kek.kekcode)=[km].[kensacode]) AND ((ki.ukeymd)=[kek].[ukeymd]))
ORDER BY kek.saiday,ki.kancd;

としています。先に教えてもらったコードはどこに入力すればいいのか教えて下さい。

後、
>SELECT P.検査日, P.検査名, Ka検査.検査結果, Ka検査.単位
>FROM [
>SELECT Max(Ka検査.検査日) AS 検査日, Ka検査.検査名
>FROM Ka検査
>GROUP BY Ka検査.検査名
このコードのFROM[ の所と
2個目のSELECTがわかりません。
 お願いします。
・ツリー全体表示

【5841】Re:テキストボックスデータをテーブルに
発言  小僧  - 05/8/11(木) 17:57 -

引用なし
パスワード
   ▼桜 さん:
こんにちは。

>テーブルがエクセルに・・って事はできるんですか?

VBA で行うのでしたら「TransferSpreadsheet」メソッドを
マクロで行うのでしたら「ワークシート変換」が使えます。

Excel シートの指定した場所に(Sheet1 の A5 のセルにとか…)
になると複雑な処理が必要になってきますね。

(過去ログを「オートメーション」で検索を掛けるとでてきます)
・ツリー全体表示

【5840】Re:クロス集計
質問  ふじ  - 05/8/11(木) 17:26 -

引用なし
パスワード
   ▼Gin_II さん:
ユニオンクエリが、???なので、フォームでやってみます。

>フォーム・レポートで表示できればいいのであれば、フッターで
>集計関数が使えるかも。

1つ質問なのですが、クロス行見出し2つで、行見出し1つ

   テスト  3月  4月  5月 合計
佐藤  疑   1    1  2   4
佐藤  正       2      2
吉田  疑   4          4
中村  正       4      4

とあった場合、フォームで=sum([3月])という風に縦計が出たのですが、
毎月、データを入れた場合、今回は3月と4月と5月があったケド、
来月の集計は9月だけという場合は、フォームをつくり直さなければなりません
よね?そんな時は、どうすればいいのですか?
(これは例なので、月ですが・・・実は年で作成なのです。)
3月・4月と出ている月の名前は、管理開始月です。
よろしく、ご教授願います。
(一応、上記の様に、=sum([3月])の様に、今は作成しています。)

ちなみに、質問をして勝手なのですが、8/23日以降のお返事になります。
スミマセン・・・長い夏休みでリフレッシュしてきます。
・ツリー全体表示

【5839】Re:クロス集計
回答  Gin_II  - 05/8/11(木) 16:55 -

引用なし
パスワード
   >クロス集計で、縦の合計を出したいのですが、
>どうすればいいですか?

どこで?
クエリのデータシートビューで出したいのなら、ユニオンクエリを
使う必要があると思います。

フォーム・レポートで表示できればいいのであれば、フッターで
集計関数が使えるかも。
・ツリー全体表示

【5838】Re:ソートの仕方
回答  Gin_II  - 05/8/11(木) 16:52 -

引用なし
パスワード
   「ツール」⇒「参照設定」で、Microsoft DAO 3.x Object Library に
チェックが入っているかを確認してください。

> Dim MyDb As Recordset ' 型(/--)/違うと怒られます。

Dim MyDb As DAO.Recordset


> ' 2.ここで ソートさせたいです。
Recordset で、Sort は可能ですよ。

MyDB.Sort = "掲載の順位 DESC"
Set MyDB = MyDB.OpenRecordset()

かな ^^; (未検証)

ただ、フォーム上で並べ替えをしたいのであれば、Recordset ではなく、
フォームのプロパティを使います。

Me.OrderBy = "[掲載の順位] DESC"
Me.OrderByOn = True

とかのように。
・ツリー全体表示

【5837】Re:テキストボックスデータをテーブルに
質問    - 05/8/11(木) 16:16 -

引用なし
パスワード
   小僧さん・・すいませんが、もう一つ教えて下さい。
そのIDテーブルを実行ボタンを押すことによって追加はされましたが、追加され、かつ、テーブルがエクセルに・・って事はできるんですか?
・ツリー全体表示

【5836】Re:フォームに合計を出したい
お礼  サチチ  - 05/8/11(木) 16:04 -

引用なし
パスワード
   ▼クロ さん:
>こんにちは。
ありがとうございます。参考にさせていただきます!!
・ツリー全体表示

【5835】ソートの仕方
質問  りすりす  - 05/8/11(木) 15:54 -

引用なし
パスワード
   アクセス2000で ソートさせる方法を教えてください。


' 1. Dim MyDb As Recordset ' 型(/--)/違うと怒られます。
'  Me.Refresh
 
 Set MyDb = Me.RecordsetClone
 
' 2.ここで ソートさせたいです。
 
 MyDb.MoveFirst

 While Not (MyDb.EOF)
' ここに処理を書いています。
' MyDb.Fields("").Value = ...
  MyDb.MoveNext
 Wend

------------------------------------------
1.で宣言すると実行時 型が違うといわれます。
 コメントにしていれば実害ないのでいいですが、
 入力支援のたびにコメント をはずすので
 正確な型を教えてもらえるとうれしいです。

2. ソートさせるものは 数字で優先度を付けているので
 特定のデータに対して降順になるようにしたいです。
 MyDb.Fields("掲載の順位").Value

ヘルプを見ても例文が載っていないのでどうしていいのかわかりません。
データ数は 数十個しかないので
別の一時テーブルを動的に作ってソートさせる方法でもいいです

よろしくおねがいします。 (^_^)
・ツリー全体表示

【5834】Re:フォームに合計を出したい
発言  クロ  - 05/8/11(木) 15:44 -

引用なし
パスワード
   こんにちはクロです。
参考のために
http://ww3.tiki.ne.jp/~kaya/Ac_tips.html#Tips0_001
・ツリー全体表示

【5833】Re:時間の計算について
お礼  わん  - 05/8/11(木) 15:17 -

引用なし
パスワード
   小僧さん
こんにちわ。

小僧さんはホントに素晴らしい!!
私のような初心者にこんなに解りやすく
親切丁寧に説明していただけるなんて有難うございます。
感激です。
時間や日付に関する考え方がかなり理解できました。
あとは、実際の時間計算だけですね。
何とか自力でできるよう頑張ってみます。

>他の回答者の方が答え難くなっちゃいますよ ^^;
失礼致しました。
基本をしっかり身につけるのには、状況を把握してくださっている方に
教えて頂く方が賢明かと思ったものですから。
ここのルールに反していたら申し訳ありません。
・ツリー全体表示

【5832】クロス集計
質問  ふじ  - 05/8/11(木) 15:07 -

引用なし
パスワード
   クロス集計で、縦の合計を出したいのですが、
どうすればいいですか?
・ツリー全体表示

【5831】Re:時間の計算について
回答  小僧  - 05/8/11(木) 14:35 -

引用なし
パスワード
   ▼わん さん:
こんにちは。

>小僧さんお願いします。

他の回答者の方が答え難くなっちゃいますよ ^^;


>コード自体の意味を完全に理解できていないからだと思います。

では前回のおさらいからという事で…。

出勤時間   分 Mod 15    補正された時間
xx:10      10     →    xx:00   
xx:15      0     →    xx:15   
xx:37      7     →    xx:30   
xx:59      14     →    xx:45

>>DateAdd("n", - Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤丸め,

「出勤時間」 から 「出勤時間の[分]を15で割った余り」 を 
「引いたもの(実際には−をつけたものを足しています。)が補正された時間です。

>繰り上げにトライしたのですが上手くいきません。
>単純に-を+にしただけではダメなのですね。

さて、こちらの方ですが

出勤時間   分 Mod 15     切捨てた時間   切り上げた時間
xx:10        10     →    xx:00      (xx:15)
xx:15        0     →    xx:15      (xx:30)
xx:37       7     →    xx:30      (xx:45)
xx:59       14     →    xx:45      (xx:00)繰り上がって

「切上」と考えるとややこしくなりますがちょっと発想を変えると
切捨てた時間に15分足せば良い事に気が付きませんか?

SELECT 社員労働時間.社員番号, 社員労働時間.出勤時間,
DateAdd("n",-Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤切捨,
DateAdd("n",15-Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤切上
FROM 社員労働時間;

切捨てと切上げを見比べてみて下さい。
・ツリー全体表示

【5830】Re:フォームに合計を出したい
お礼  サチチ  - 05/8/11(木) 14:33 -

引用なし
パスワード
   *****
すみません。1990だとむりなので、&"年"とつけたら、出来ました。
皆様、お騒がせしました。
・ツリー全体表示

【5829】時間の計算について
質問  わん  - 05/8/11(木) 14:01 -

引用なし
パスワード
   小僧さんお願いします。

前回の投稿が長くなったので、
新規投稿に変えました。
質問内容は、前回の続きと考えております。

現在の自分のレベルを考慮し、ユーザー定義関数を使用しないでやってみました。

SELECT 社員労働時間.社員番号,
DateAdd("n", - Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤丸め,
DateAdd("n", - Minute([退勤時間]) Mod 15,[退勤時間]) AS 退勤丸め
FROM 社員労働時間;

↑について問題なくできました。

繰り上げにトライしたのですが上手くいきません。
単純に-を+にしただけではダメなのですね。

DateAdd関数、Mod演算子については少し理解できましたが、
コード自体の意味を完全に理解できていないからだと思います。
(何とも自分が情けなく、お恥ずかしい限りです)

度々で申し訳ありませんが教えて頂きたいと思います。
宜しくお願いします。
・ツリー全体表示

【5828】フォームに合計を出したい
質問  サチチ  - 05/8/11(木) 13:58 -

引用なし
パスワード
   フォームヘッダーに、診断名・疑い・1990・2000・2001〜
とあります。
1990・2000というのは、1990年という意味です。
詳細に診断名が200位あり、それぞれ何人という様なフォームを作りました。

例)
     1990 2000  合計   
高脂血症  1   1   2
糖尿病      2   2 

こんな感じです。縦計を出したいのですが、どんな関数にすればいいのですか?
=sum([1990])だと、エラーになってしまいます。
=sum(1990)だと、1990×列になってしまいます。

クエリのクロス集計にて作成し、フォームでみやすくしたいのです。
どうすれば、いいかご教授下さい。
・ツリー全体表示

368 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084732
(SS)C-BOARD v3.8 is Free