Access VBA質問箱 IV

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

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


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

【6070】Re:では、質問です
回答  小僧  - 05/8/26(金) 15:29 -

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

条件が固定なのか、可変なのかにもよりますが仮に固定とします。

クエリ3年をいじるので、後で元に戻せるようにバックアップをとっておいて下さい。

>1.T_疾病管理の疑いをつけたい 

クエリ3年をデザインビューで開くと、
左上に「T_疾病管理」のフィールド名がリストボックスになってますよね。

ここにある「疑い」をダブルクリックすると、下半分の方に「疑い」が出現します。

疑いの「抽出条件」欄を 1 にした後、
データシートビューを開くか [クエリ] → [実行] で結果を確認してみて下さい。

※たまに 「 [ ] の使い方が…」と Access君に に怒られる場合がありますが、
 SQL ビューで開いて、PARAMETERS のところの余計なカッコを外してください。


>健管コードSだけの人をピックアップしたい。

さて、ここからが RDB (リレーショナルデータベース)です (笑)

ツールバーの [クエリ] → [テーブルの表示] で、「T_ID」を表示させて下さい。

T_疾病管理 と T_ID は職番で関連付けなのでしょうかね。
そうでしたらT_疾病管理 の 職番 を T_ID の 職番 へ ドラッグ&ドロー
(職番同士に線が引かれます)

先程と同じ様に T_ID の職番をダブルクリックして下半分に表示させ、
抽出条件 に "S" と入れてください。(S でも自動変換されます)

RDB とか言っておきながらこれだけです。
SQL ビューで確認すると INNER JOIN 句ができていると思います。
・ツリー全体表示

【6069】Re:任意のレコードのみを抽出
お礼  たんけん  - 05/8/26(金) 15:16 -

引用なし
パスワード
   おぉ。できました。ありがとうございます。

すみません。問題は解決したのですが、少し謎に思ったところがあるので、追加で質問させていただきます。

先ほどちょっと待っている間にいろいろ試していて疑問に思ったのですが、フォームの情報をもとにマクロ中でクエリに後で条件を追加するときは、クエリの条件のところにはどのように書けばよかったのでしょうか?

フォーム上にあるテキストボックス等を条件氏指定する場合は、
=[forms]![フォーム名].[テキストボックス名]
と書けば良いとわかりましたが・・・
マクロの中の変数で指定したい場合、どうするんだろ?と悩んでおりました。

へんな質問でもうしわけありません。
・ツリー全体表示

【6068】Re:任意のレコードのみを抽出
回答  小僧  - 05/8/26(金) 15:00 -

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

In句 を使ったパラメータクエリがうまくいかなかったので、
B) の方法をとっています。

Private Sub エクセル抽出_Click()
'要参照設定 Microsoft DAO x.x Object Library
Dim ctl As Control
Dim varItem As Variant
Dim strWhere As String
Dim MyFile As String
Dim SQLCode As String
Dim QD As DAO.QueryDef

  Set ctl = Me!lst_Select
  If ctl.ItemsSelected.Count = 0 Then
    If MsgBox("社員が選択されていません。全員抽出しますか?", _
               vbQuestion + vbYesNo) = vbNo Then
      Me!lst_Select.SetFocus
      Exit Sub
      strWhere = ""
    End If
  Else
    
    For Each varItem In ctl.ItemsSelected
      If strWhere = "" Then
        strWhere = "'" & ctl.ItemData(varItem) & "'"
      Else
        strWhere = strWhere & ",'" & ctl.ItemData(varItem) & "'"
      End If
    Next
        strWhere = "WHERE [社員コード] In (" & strWhere & ")"
  End If
      SQLCode = "SELECT * FROM Q_社員情報抽出 " _
          & strWhere
        
  If DCount("*", "MsysObjects", "Name = 'Q_抽出用'") > 0 Then
    DoCmd.DeleteObject acQuery, "Q_抽出用"
  End If
  
  Set QD = CurrentDb.CreateQueryDef("Q_抽出用", SQLCode)
    QD.Close
  Set QD = Nothing
  MyFile = "c:\社員情報.xls"

  DoCmd.TransferSpreadsheet acExport, _
            acSpreadsheetTypeExcel9, "Q_抽出用", MyFile, True
End Sub


こんな感じでエクセルに抽出されると思います。

>※この掲示板を見て、ほとんどコピペをしていたので、
> あまり意味がわかっておりません。

コードの意味が解らない所がありましたら遠慮せずに
質問なさって下さいね。
・ツリー全体表示

【6067】Re:オブジェクトのコピー
質問  リキラリアット  - 05/8/26(金) 14:53 -

引用なし
パスワード
   ▼小僧 さん:
>▼リキラリアット さん:
>おはようございます。
>
>別mdb から 自mdb へのコピーが可能 (インポート)
>自mdb から 別mdb へのコピーが可能 (エクスポート)
>
>であれば、
>
>別mdb から 自mdb を通じて 他mdb にオブジェクトを
>コピーできると思うのですが…。
>
>的を外していたらすみません。

ありがとうございました。
自mdbは実行だけして直接、別mdbから他mdbへオブジェクトをコピーしたいのですが。むりなのでしょうか?
・ツリー全体表示

【6066】では、質問です
質問  サチチ  - 05/8/26(金) 14:26 -

引用なし
パスワード
   ▼小僧 さん:

ありがたいです。今現在はT_疾病管理の診断名・ms_msg・管理開始を使用ですが

以前にT_疾病管理とT_IDがあると申した、

>T_疾病管理

>ID  職番   氏名  s_hantei s_type 診断名  ms_msg  疑い 
>1  123456  サチチ  B     1    2859   貧血   1 

>管理開始  治療開始  治療終了 
>19901010  19901101  20011010  

>と、T_ID

>ID  職番   氏名  生年月日   事業所  組織   健管  退職日
>1  123456  サチチ  19801111   10   9999999  S  20050930


例えば、1.T_疾病管理の疑いをつけたい 疑い=1,疑いでない=0,他=2・3・4・・・とあり
T_疾病管理の診断名・ms_msg・疑い=1(条件つき)・管理開始としたい場合
はどうすればいいでしょうか?

2.T_疾病管理とT_IDをつけて、健管コードが知りたい。健管コードSだけの人を
ピックアップしたい。

というのが、追加質問内容です。お願いします。
・ツリー全体表示

【6065】Re:クエリの抽出条件
発言  まっち  - 05/8/26(金) 14:25 -

引用なし
パスワード
   ▼クロ さん:
おっと・・。間違えました。これは演習ができるのですね!やってみます★と言いたいところですが、もうすぐネットができない場所へ・・(;;)やはり本を探してみます!
・ツリー全体表示

【6064】Re:クエリの抽出条件
回答  まっち  - 05/8/26(金) 14:21 -

引用なし
パスワード
   ▼クロ さん:
VBAってなんでしょう?ごめんなさい、私が来るようなところではなかったのかなぁ。授業ではAccess扱ってないんです。いきなりデータベース作成しなさいと言われ・・Accessに初めて触れてみたところです。やはり基本からしないと無理ですよね(++)推薦本探してみます。ありがとうございます。
・ツリー全体表示

【6063】Re:クエリの抽出条件(1部訂正)
発言  クロ  - 05/8/26(金) 14:19 -

引用なし
パスワード
   >Between 200001 Abd 200012となっているのでなく
×Abd ○And
・ツリー全体表示

【6062】Re:クエリの抽出条件
お礼  まっち  - 05/8/26(金) 14:15 -

引用なし
パスワード
   ▼クロ さん:

>こりゃ!「授業の課題」ならこんなとこで聞いちゃダメでしょ!
>ちゃんとテキストで勉強しなさい。

怒られてしまいました。しょぼーん・・(。。)
夕方頃から3週間程ネットができない環境に移ります。まだまだ教えて頂きたいのですが残念です。でも、とっても助かりました!3週間また自力頑張ってみます。どうもありがとうございました。感謝感謝です★★★
・ツリー全体表示

【6061】Re:クエリの抽出条件
発言  クロ  - 05/8/26(金) 14:12 -

引用なし
パスワード
   分からないでもないけど、授業(Access?)を聞いていれば
できることですよ。
※しかも、この掲示板はVBA専用ですし…

Between "[Forms]![F_抽出条件]![txt開始日]" And "[Forms]![F_抽出条件]![txt終了日]"
が実際どのようになってるか分かりますか?
「"」で括られたものは文字列として認識されます。
ということは
Between 200001 Abd 200012となっているのでなく
Between [Forms]![F_抽出条件]![txt開始日] And [Forms]![F_抽出条件]![txt終了日]となってるわけです。

これでは「年月日(数値型)」に対して抽出条件を入れても「データ型うんねん」のエラー
が出ても当然。

この辺までいいかな?
市販の教本を購入されるか、
http://www.mahoutsukaino.com/
で基礎演習をしたほうがいいですよ。
・ツリー全体表示

【6060】Re:任意のレコードのみを抽出
発言  たんけん  - 05/8/26(金) 14:02 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。お返事ありがとうございます。

>「FileSystemObject」を呼び出しているのと、
> Excel ファイルを開いているのが謎なのですが…。

申し訳ないです。この掲示板を見て、ほとんどコピペをしていたので、あまり意味がわかっておりません。


>A) Q_社員情報抽出をパラメータクエリにして、パラメータでWhere句を作る。
>
>B) Q_社員情報抽出を元にしたクエリを一時的に作り、
>  そのクエリをエクスポートする。
>  ("SELECT * FROM Q_社員情報抽出 WHERE " & strWhere)
>
>C) クエリの内容をレコードセットに入れてフィルタ、
>  オートメーションを用いてExcel 側で「CopyFromRecordset」
>  メソッドで貼り付ける。

えっと、Q_社員情報抽出は他ではつかっていないので、A)の方法でお願いいたします。

フォームで取得した条件をQ_社員情報抽出の社員コードの条件に指定して・・・
その後、条件を追加したクエリで抽出する・・・

申し訳ないです。どのように書いて良いのか・・・わかりません。
・ツリー全体表示

【6059】Re:これもOKです
発言  小僧  - 05/8/26(金) 14:02 -

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

フォームに関する事はこれくらいでしょうか。
2006年データが入っても txt年 の値によって結果が変わるので
フォームやクエリを作り変えなくて良くなったと思います。

あと、

>それと、インポートの件も・・・。

こちらですが、具体的にどのようにしたいのかが解りかねますので
もうちょっと詳しく説明をして下さい。

>追加質問が出てきたのですが・・・^_^;

フォームやクエリ3年に関する事でしたらそちらを先に片付けちゃいましょう。
・ツリー全体表示

【6058】Re:任意のレコードのみを抽出
発言  小僧  - 05/8/26(金) 13:54 -

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

「FileSystemObject」を呼び出しているのと、
Excel ファイルを開いているのが謎なのですが…。

A) Q_社員情報抽出をパラメータクエリにして、パラメータでWhere句を作る。

B) Q_社員情報抽出を元にしたクエリを一時的に作り、
  そのクエリをエクスポートする。
  ("SELECT * FROM Q_社員情報抽出 WHERE " & strWhere)

C) クエリの内容をレコードセットに入れてフィルタ、
  オートメーションを用いてExcel 側で「CopyFromRecordset」
  メソッドで貼り付ける。

当方でしたら、

Q_社員情報抽出がエクスポート用にしか使われていないのであれば A)、
他フォームのコントロールソース等に使われているのであれば B)、
他に Excel を開かなければいけない作業があるのであれば C)

を使います。
・ツリー全体表示

【6057】Re:クエリの抽出条件
発言  まっち  - 05/8/26(金) 13:53 -

引用なし
パスワード
   ▼クロ さん:

教科書で説明されていないのです・・。完成図だけははっきり載ってるんですが、使い物にならない教科書のようです。いろんな友人に聞いても分からず、これは専門家にお聞きするしかない!と思いましてこのサイトを見つけました。
・ツリー全体表示

【6056】Re:クエリの抽出条件
発言  クロ  - 05/8/26(金) 13:47 -

引用なし
パスワード
   ▼まっち さん:
>授業の課題なので、一応テキスト通りにと思いまして。

こりゃ!「授業の課題」ならこんなとこで聞いちゃダメでしょ!
ちゃんとテキストで勉強しなさい。
・ツリー全体表示

【6055】これもOKです
質問  サチチ  - 05/8/26(金) 13:41 -

引用なし
パスワード
   ▼小僧 さん:

いや〜ん。素敵!!出来ました。
すごいですねぇ。

追加質問が出てきたのですが・・・^_^;
全て終わってから、再度教えて下さい。

そして、ゴールは後少し????
・ツリー全体表示

【6054】Re:任意のレコードのみを抽出
発言  たんけん  - 05/8/26(金) 13:38 -

引用なし
パスワード
   あ、エクスポートの方が書き足りないです。

'クエリで表示されるすべての情報をエクセルにエクスポートする
  MyFile = "c:\社員情報.xls"

  Set Fso = CreateObject("Scripting.FileSystemObject")
  DoCmd.TransferSpreadsheet acExport, _
          acSpreadsheetTypeExcel9, strQuery, MyFile, True
  Set xlsWkb = xlsApp.Workbooks.Open(MyFile)
  xlsWkb.Save
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing

となっています。

エクスポートしたい情報が複数のテーブルにまたがっているので、クエリには複数のテーブルが指定されています。

よろしくお願いします。
・ツリー全体表示

【6053】Re:クエリの抽出条件
発言  まっち  - 05/8/26(金) 13:35 -

引用なし
パスワード
   ▼クロ さん:
できましたーーー!!!すごい!感激です!ありがとうございます★
「F_抽出条件」を「グラフ期間」、「txt会社コード」を「会社コード」と名前だけを変更しても良いのですか?授業の課題なので、一応テキスト通りにと思いまして。
・ツリー全体表示

【6052】Re:クエリの抽出条件
回答  クロ  - 05/8/26(金) 13:17 -

引用なし
パスワード
   ▼まっち さん:
>▼クロ さん:
>SELECT 株価.会社コード, 会社情報.会社名, 株価.年月日, 株価.終値
>FROM 会社情報 INNER JOIN 株価 ON 会社情報.会社コード = 株価.会社コード
>WHERE (((株価.会社コード) Like [Forms]!「F_抽出条件]![txt会社コード]") AND ((株価.年月日) Between "[Forms]![F_抽出条件]![txt開始日]" And "[Forms]![F_抽出条件]![txt終了日]"));

1.「[」が全角になってる→半角で
2.Likeを使わず「=」にしてください。Likeにするのは次のステップ
3.「"」はいりません。

WHERE句以降は以下の通り

WHERE (((株価.会社コード) =[Forms]![F_抽出条件]![txt会社コード]) AND ((株価.年月日) Between [Forms]![F_抽出条件]![txt開始日] And [Forms]![F_抽出条件]![txt終了日]));

※フォーム「txt会社コード」「txt開始日」「txt終了日」の「txt」は
 全角にしたのでしょうか?
・ツリー全体表示

【6051】帳票フォームで縦計、横計を出す
回答  小僧  - 05/8/26(金) 13:17 -

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

ツリーが見難くなるので、こちらにレスを付けていきます。

さて、最低限の所が整ったところで、

>フォームでは、1年目・2年目・3年目の縦計と横計も出したいなーなんて・・・。

これを片付けていきましょう。

クエリでも縦計、横計を計算できるのですが、
結構複雑になる(クロス集計クエリだと特に)ので、
フォームの機能を使って計算させましょう。

【詳細】の3年目のテキストボックスの右に
テキストボックス
 名前:txt横計
 コントロールソース:=Nz([1年目],0)+Nz([2年目],0)+Nz([3年目],0)

【フォームフッター】の1年目の下あたりに
テキストボックス
 名前:txt1年目縦計
 コントロールソース:=Sum([1年目])

を配置して下さい。2年目、3年目も同様に…。

※横計は Null値 が含まれると足し算ができなるなるため、
 Nullだったら0にするという処理が必要になっています。


>1年目・2年目の表示は、その年の表示は出来ないのですよね?

ついでにこいつも…。

オートフォームで作ったのであれば、
「1年目」のラベル名が「1年目_ラベル」になっていると思います。
この「Caption」(表題)を変えてあげましょう。

txt年の「更新後処理」に追加して下さい。

Private Sub txt年_AfterUpdate()
  Me.[1年目_ラベル].Caption = Me.txt年 & "年"
  Me.[2年目_ラベル].Caption = Me.txt年 + 1 & "年"
  Me.[3年目_ラベル].Caption = Me.txt年 + 2 & "年"
  Me.Requery
End Sub
・ツリー全体表示

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