Access VBA質問箱 IV

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

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


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

【6009】毎年の集計について サチチ 05/8/25(木) 12:00 質問[未読]
【6010】Re:毎年の集計について 小僧 05/8/25(木) 14:27 発言[未読]
【6012】Re:毎年の集計について サチチ 05/8/25(木) 15:22 質問[未読]
【6013】Re:毎年の集計について 小僧 05/8/25(木) 16:10 回答[未読]
【6014】Re:毎年の集計について サチチ 05/8/25(木) 16:39 質問[未読]
【6015】Re:毎年の集計について 小僧 05/8/25(木) 16:54 発言[未読]
【6017】Re:毎年の集計について サチチ 05/8/25(木) 17:15 質問[未読]
【6019】Re:毎年の集計について 小僧 05/8/25(木) 17:34 発言[未読]
【6029】Re:毎年の集計について サチチ 05/8/26(金) 9:29 質問[未読]
【6031】Re:毎年の集計について サチチ 05/8/26(金) 9:38 質問[未読]
【6032】Re:毎年の集計について 小僧 05/8/26(金) 9:54 発言[未読]
【6033】クエリ3年動きました!! サチチ 05/8/26(金) 9:59 質問[未読]
【6035】Re:クエリ3年動きました!! 小僧 05/8/26(金) 10:29 回答[未読]
【6037】OKです! サチチ 05/8/26(金) 10:42 質問[未読]
【6038】フォームの値をパラメータクエリに 小僧 05/8/26(金) 11:07 回答[未読]
【6041】Re:フォームの値をパラメータクエリに サチチ 05/8/26(金) 11:32 質問[未読]
【6043】Re:フォームの値をパラメータクエリに 小僧 05/8/26(金) 11:52 発言[未読]
【6045】出来ました!! サチチ 05/8/26(金) 12:00 質問[未読]
【6044】勘違い? サチチ 05/8/26(金) 11:53 質問[未読]
【6051】帳票フォームで縦計、横計を出す 小僧 05/8/26(金) 13:17 回答[未読]
【6055】これもOKです サチチ 05/8/26(金) 13:41 質問[未読]
【6059】Re:これもOKです 小僧 05/8/26(金) 14:02 発言[未読]
【6066】では、質問です サチチ 05/8/26(金) 14:26 質問[未読]
【6070】Re:では、質問です 小僧 05/8/26(金) 15:29 回答[未読]
【6073】SQLも直してOKです。(*^_^*) サチチ 05/8/26(金) 15:56 質問[未読]
【6078】Re:SQLも直してOKです。(*^_^*) 小僧 05/8/26(金) 16:44 発言[未読]
【6080】インポート サチチ 05/8/26(金) 17:15 質問[未読]
【6081】Re:インポート 小僧 05/8/26(金) 17:54 発言[未読]
【6082】Re:インポート サチチ 05/8/26(金) 19:16 お礼[未読]

【6009】毎年の集計について
質問  サチチ  - 05/8/25(木) 12:00 -

引用なし
パスワード
   今回も教えて下さい。

毎年のデータをインポートし、クロス集計で人数を出したいのです。
こんな感じです。

     1900年  1901年  1902年  1903年・・・2005年 ここに次の年が入る
高血圧   1            1
心疾患       1        1
水虫                       4
・・・
 計    1   1        2     4

毎年のデータをつけて増やしていきたいのですが、テーブルに追加していく方法と
見やすくしたいので、フォームを1回作ったら、変更しないで見られる方法を
教えて欲しいのです。今は、上記の様に作成しましたが、2006年が増えると
一回・一回改廃しないとなので・・・。
今現在は、T_疾病管理(職番・名前・診断名・開始年月日〜)からクロス集計で
作成しましたが、今後増えていく時どうしていいか分らないので、ご教授願います。
なお、データは15年分で、15万件です。1年1万件ぐらいです。
よろしくお願いします。

【6010】Re:毎年の集計について
発言  小僧  - 05/8/25(木) 14:27 -

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

元のテーブルの詳細がご提示されていませんので、適当に作ってみました。

年度  人数  項目
2005年  1   水虫
2004年  2   高血圧
2003年  2   水虫
2004年  5   心疾患
2003年  4   高血圧
2002年  2   高血圧
2001年  3   心疾患
2001年  3   高血圧


こんな感じのテーブルに対して、以下のSQLを発行します。

TRANSFORM Sum(テーブル名.人数) AS 人数の合計
SELECT テーブル名.項目
FROM テーブル名
GROUP BY テーブル名.項目
PIVOT 1+DateDiff('yyyy',[年度を入力] & '1月1日',
   CDate(テーブル名.年度 & '1月1日')) & '年目'
In ('1年目','2年目','3年目');

「年度を入力」とでるので、「2002年」と答えると、
「2002年」「2003年」「2004年」のデータが表示されます。

フィールド名は「1年目」「2年目」「3年目」と固定なので
こういったクエリを元にすると、1つのフォームで対応が可能かと思われます。

【6012】Re:毎年の集計について
質問  サチチ  - 05/8/25(木) 15:22 -

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

ご返答ありがとうございます。すみませんが、私SQLを作成して
作った事がないので、作成しているテーブルを書かせてもらいます。

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

があります。
T_疾病管理で診断名・管理開始 を使いたいです。そこから、人数を
もとめたいです。他に、治療開始・治療終了も作成は管理開始を参考に
作成してみます。

T_IDの職番とT_疾病管理の職番をくっつけて、まとめのクエリ
(退職年: Left([退職日],4)などの関数を作成しただけですが、年だけが
でるようにしました。
これでなくても、SQLで出来る様でしたら、是非!!

ちなみに、これは小僧さんが作成していただけたSQlをモジュールに貼り付け、
ボタンを作れば、フォームが出来るという事ですか?
先に、フォームを診断名・管理開始・人数というカラのものを作成しておくの
ですか?
初心者すぎて申し訳ないのですが、よろしくお願いします。
 

【6013】Re:毎年の集計について
回答  小僧  - 05/8/25(木) 16:10 -

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

>ちなみに、これは小僧さんが作成していただけたSQlをモジュールに貼り付け、
>ボタンを作れば、フォームが出来るという事ですか?

そんなにAccess君は便利ではありません(笑)
ですが、SQL(クエリ)さえしっかりしてれば、フォームを作るのはかなり楽になるはずです。

なので 希望となる SQL(クエリ)をまず作ってみましょう。

>T_疾病管理で診断名・管理開始 を使いたいです。そこから、人数を
>もとめたいです。他に、治療開始・治療終了も作成は管理開始を参考に
>作成してみます。

まずは全年の集計クエリです。

クエリ全年:

TRANSFORM Count(T_疾病管理.ID) AS 人数
SELECT T_疾病管理.診断名
FROM T_疾病管理
GROUP BY T_疾病管理.診断名
PIVOT Left([管理開始],4);

次に指定した年から3年分のデータを集計するクエリです。

クエリ3年:

TRANSFORM Count(T_疾病管理.ID) AS 人数
SELECT T_疾病管理.診断名
FROM T_疾病管理
GROUP BY T_疾病管理.診断名
PIVOT 1+DateDiff('yyyy',[年度を入力] & '/01/01',
   CDate(Left(T_疾病管理.管理開始,4) & ' /01/01')) & '年目'
In ('1年目','2年目','3年目');

クエリ3年を実行すると「年度を入力」ときかれますので、
「1990」のような数字4桁を返すと「1990」「1991」「1992」の3年分のデータが
抽出されるはずです。 ※クエリ全年と比較してみてください。


まずはここまでがうまくいかないと進まないので確認してみて下さい。

【6014】Re:毎年の集計について
質問  サチチ  - 05/8/25(木) 16:39 -

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

貼り付けてみました。エラーがでました。
クエリ3年を実行すると、
『式に未定義関数  '  CDate'があります』とでます。

一つ、これが原因?と思うものがあるのですが、管理開始の日にち(他も)は
数値型にしている事。日付/時刻にしてません。元データが、19991010の
様に、日付になっていないデータを使っているためです。
これが原因ですか?
その為、前作ったクエリに、左から4コ目をという関数を組みました。
なお、日付は全て8ケタです。

【6015】Re:毎年の集計について
発言  小僧  - 05/8/25(木) 16:54 -

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

>『式に未定義関数  '   CDate'があります』とでます。

こちらでも再現致しました!

…。
'   CDate'って …なんか離れすぎていません?

と言う事で、「 '/01/01',CDate…」のように前のスペースを削除して下さい。

【6017】Re:毎年の集計について
質問  サチチ  - 05/8/25(木) 17:15 -

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

こんにちは。同じ現象が出ると、心強いです。それ以前に教えていただける事が
ありがたいです。

>'/01/01',CDate…」のように前のスペースを削除して下さい。
削除しました!!「年度を入力」が出て、1990と入力したら、今度は・・・
『式が正しく入力されていないか、複雑すぎる為に評価できません。
例えば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を
簡単にして下さい。』
と出てしまいました。なんじゃ???評価できないって〜どういう事よ!と
ついつい・・・。

それと、診断名は9890など番号なので、
SELECT T_疾病管理.診断名, ms_msg←これを追加しました。

【6019】Re:毎年の集計について
発言  小僧  - 05/8/25(木) 17:34 -

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

>こんにちは。同じ現象が出ると、心強いです。それ以前に教えていただける事が
>ありがたいです。

いえいえ、こちらも自分の勉強になりますから。


>『式が正しく入力されていないか、複雑すぎる為に評価できません。
>例えば、数式に複雑な要素が多すぎます。変数に式の一部を割り当て、式を
>簡単にして下さい。』

こちらが再現されないですね。(Ac97 と Ac2002で確認)

>それと、診断名は9890など番号なので、
>SELECT T_疾病管理.診断名, ms_msg←これを追加しました。

という事なので、一度 SQL を記載して頂けませんでしょうか。
改行がうまくいかなくても良いので、コピー&ペーストそのままで
載せて頂きたいです。

【6029】Re:毎年の集計について
質問  サチチ  - 05/8/26(金) 9:29 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます!!昨日より、長々ご指導願います。

>こちらが再現されないですね。(Ac97 と Ac2002で確認)
残念です。こちらは、Acs202です。

>一度 SQL を記載して頂けませんでしょうか

TRANSFORM Count(T_疾病管理.ID) AS 人数
SELECT T_疾病管理.診断名, ms_msg
FROM T_疾病管理
GROUP BY T_疾病管理.診断名, ms_msg
PIVOT 1+DateDiff('yyyy',[年度を入力] & '/01/01',CDate(Left(T_疾病管理.管理開始,4) & ' /01/01')) & '年目' In ('1年目','2年目','3年目');

↑クエリ3年です。貼り付けさせていただきました。
よろしくお願いします。

【6031】Re:毎年の集計について
質問  サチチ  - 05/8/26(金) 9:38 -

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

先ほどの件に追加です。件数を3件にしてみたら、出来ました!!

しかし、今現在の106422件のデータでは、複雑な〜というエラーが
出てしまいます。件数が多すぎるとダメなんでしょうかね?

【6032】Re:毎年の集計について
発言  小僧  - 05/8/26(金) 9:54 -

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

>先ほどの件に追加です。件数を3件にしてみたら、出来ました!!

うーむ、レコード数の問題でしたか。
もう1種類 SQL を組んだので試してみてください。

先ほどのSQLと動作は同じなのですが、少し変えてみました。

PARAMETERS [年度を入力] Long;
TRANSFORM Count(T_疾病管理.ID) AS 人数
SELECT T_疾病管理.診断名, T_疾病管理.ms_msg
FROM T_疾病管理
GROUP BY T_疾病管理.診断名, T_疾病管理.ms_msg
PIVOT (Left(T_疾病管理.管理開始,4)-[年度を入力])+1 & '年目'
In ('1年目','2年目','3年目');

こちらのSQLで動くと良いのですが…。

【6033】クエリ3年動きました!!
質問  サチチ  - 05/8/26(金) 9:59 -

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

感動!!動きました!!あきらめかけてたのですが、
まだ、がんばれそうです。

まだ、ゴールじゃなかったのですよね。。
その後の、ご指導お願いします。

【6035】Re:クエリ3年動きました!!
回答  小僧  - 05/8/26(金) 10:29 -

引用なし
パスワード
   ▼サチチ さん:

>感動!!動きました!!

おぉ、これで先にすすめますね。

ではクエリ3年を元にフォームを作ってみましょう。

Access のオートフォーム機能をそのまま使います。
「オートフォーム:表形式」、元になるテーブル/クエリ「クエリ3年」

フォームの名前を「結果表示」とでもしておいて下さい。

このフォームは開く度に「年度を入力」ときかれる感じになると思います。
このままだと不便ですので、ここまでできたら次のステップへ…。

【6037】OKです!
質問  サチチ  - 05/8/26(金) 10:42 -

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

順調です!台風の去った、晴天。このまま、順調に行くことを願って・・・。

お願いします!そうそう、フォームでは、1年目・2年目・3年目の縦計と
横計も出したいなーなんて・・・。
それと、インポートの件も・・・。

ちなみに、1年目・2年目の表示は、その年の表示は出来ないのですよね?
2000年・2002年など1年間があいたり、何年から3年だっけ?と思っちゃうかしら?
なんて、思ったので。欲張りすぎてはいけないので、出来なければ、OKです。

先生!よろしくお願いします。

【6038】フォームの値をパラメータクエリに
回答  小僧  - 05/8/26(金) 11:07 -

引用なし
パスワード
   ▼サチチ さん:

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

まぁ、順々にやっていきましょう。

フォーム「結果表示」のフォームヘッダを広げて、
テキストボックス「txt年」を配置して下さい。

次に「クエリ3年」をいじります。

現在のパラメータは [年度を入力] ですが、
ここを Forms![結果表示].[txt年] とします。(2箇所ありますよね)

PARAMETERS Forms![結果表示].[txt年] Long;
TRANSFORM Count(T_疾病管理.ID) AS 人数
SELECT T_疾病管理.診断名, T_疾病管理.ms_msg
FROM T_疾病管理
GROUP BY T_疾病管理.診断名, T_疾病管理.ms_msg
PIVOT (Left(T_疾病管理.管理開始,4)-Forms!結果表示.txt年)+1 & '年目'
In ('1年目','2年目','3年目');


テキストボックス「txt年」の値をパラメータとして
「txt年」が変化する度にフォームの値が変えるのが目的なのですが、
このままですと見た目が更新されません。

「txt年」の更新後処理に

Private Sub txt年_AfterUpdate()
  Me.Requery
End Sub

とコードを記述して下さい。

テキストボックスの値を変える度に件数が変わるようでしたら成功です。
長くなりましたが、まずはここまで…。


>先生!よろしくお願いします。

先生なんて言うと授業料取りますよ(笑)

【6041】Re:フォームの値をパラメータクエリに
質問  サチチ  - 05/8/26(金) 11:32 -

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

(ToT)出来ませーん。

>フォーム「結果表示」のフォームヘッダを広げて、
>テキストボックス「txt年」を配置して下さい。

ここは、3年目の横に作ればいいのですか?作りました。
でもって、名前をtxt年。
イベントの更新後に
>Private Sub txt年_AfterUpdate()
>  Me.Requery
>End Sub
を貼り付けさせてもらいました。[イベント プロシージャ]にしてあります。


>「クエリ3年」をいじります。
いじりました。記入していただいたものを貼り付けました。

フォームのtxt年の所に、数字がでるのですよね?
何も出ません・・・詳細欄は何もいじってません。

【6043】Re:フォームの値をパラメータクエリに
発言  小僧  - 05/8/26(金) 11:52 -

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

>フォームのtxt年の所に、数字がでるのですよね?
>何も出ません・・・詳細欄は何もいじってません。

いや…txt年に「1990」と入れると「1990」年から3年分、
       「1991」と入れると「1991」年から3年分のデータが

出るはず…なのですが…。

【6044】勘違い?
質問  サチチ  - 05/8/26(金) 11:53 -

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

勘違い?していた様です。。
テキストBOXに2000とか入れるのですね?
2000と入れたら、パラメータ入力というのが出て『Forms!結果表示.txt年』
に再度2000と入れたら、値が変わりました。
txt年と、パラメータと2回入力するのですよね?2回入力するのなら、
OKでした!!

【6045】出来ました!!
質問  サチチ  - 05/8/26(金) 12:00 -

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

すみません。フォームの名前にスペースが入っていたようで・・。
とったら、キチンと動きました〜!!
ありがとうございます。

さて、午後の授業をお願いします。m(__)m

【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

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

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

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

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

そして、ゴールは後少し????

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

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

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

あと、

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

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

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

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

【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だけの人を
ピックアップしたい。

というのが、追加質問内容です。お願いします。

【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 句ができていると思います。

【6073】SQLも直してOKです。(*^_^*)
質問  サチチ  - 05/8/26(金) 15:56 -

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

出来ました〜。これで、応用データも出来そうです。嬉しいです。

さて、インポートの件ですが・・・
今現在10年分のデータがT_疾病管理にバラバラに入っています。
このT_疾病管理にどんどん追加する方法でもOKなのですが、
本当は、T_疾病管理のテーブルに欲しいデータのみインポートする
みたいな・・・、つまり、1年につき1個のデータ(csvかEXCEL)で
で、2000年をインポートして、つぎに2002年・2003年・2004年・・・
と。いらなくなったら、削除するみたいな。
ただし、とても難しい作業なら、NGでOKです。
今心配しているのは、今現在で16万件のデータなので、今後使うにあたって
パンクするかも・・・心配なのです。
まずは、一般的な、T_疾病管理にどんどん追加する方法を教えて下さい。
お願いします。

【6078】Re:SQLも直してOKです。(*^_^*)
発言  小僧  - 05/8/26(金) 16:44 -

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

まずはフォームの(一応?)完成お疲れ様でした。
要はクエリなんですよね。
こいつがしっかりできれば、フォームの作成等も楽になるんですよね。

>さて、インポートの件ですが・・・

まず、外部データとする必要がありますでしょうか。
CSV や Excel で他の部署とのやりとりがあったりするのであれば
さほど難しい事をするわけでないので可能なのですが、
この Access で使うのだけであれば、別テーブルでとっておくのが良いと思いますよ。

例えばですが…。
(以下、データの削除等も行いますので必ずバックアップを)

T_疾病管理 をデータごと丸々コピーして、「T_全データ」とします。
その後、 T_疾病管理 のレコードを全て消去します。


適当をにフォームを作成して、
・コンボボックス:
  名前:cmb年
  値集合ソース:
   SELECT Left([管理開始],4) AS 式1 FROM T_全データ GROUP BY Left([管理開始],4);

・コマンドボタン:追加

・コマンドボタン:削除

を配置し、それぞれのクリック時に

Private Sub 追加_Click()
Dim SQLCode As String
  
  SQLCode = "INSERT INTO T_疾病管理 " _
      & "SELECT * " _
      & "FROM T_全データ " _
      & "WHERE Left(管理開始, 4) = '" & Me.cmb年 & "'"
  
  DoCmd.RunSQL SQLCode
End Sub


Private Sub 削除_Click()
Dim SQLCode As String
  
  SQLCode = "DELETE FROM T_疾病管理 " _
      & "WHERE Left(管理開始, 4) = '" & Me.cmb年 & "'"
  
  DoCmd.RunSQL SQLCode
End Sub

こんな感じでコードを組みます。

コンボボックスで年を選び、「T_疾病管理」に追加、削除が可能です。


>今後使うにあたってパンクするかも・・・

Access のヘルプより、

テーブルのサイズ 2 GB からシステム オブジェクトに必要な領域のサイズを引いた値

いったい何レコードくらいなのでしょうか(笑)

当方が使用している Access のツールで19万レコードを持つ mdb は普通に運用できていますよ。

【6080】インポート
質問  サチチ  - 05/8/26(金) 17:15 -

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

こんにちは。出来ました。追加も削除も!!スゴイです!!

そして、最後の質問!(になるといいのですが・・・)
2006年のデータが来年できたら、
データは、外部よりcsvかexcelでもらいます。
それを落とし込むには、どうやるのですか?

形式は、作成したものとまったく同じなので、
インポートできるはずなのですが、
インポートがうまくできません。
外部からもらったとして作成したのですが、
管理開始年を2006にして、IDをカラにして(主キーなので)エクセルでデスクトップに
おき、_全データにインポートとしたのですが、うまく入りません。
希望としては、T_全データの下に追加したいのですが・・・。

どうすればいいのでしょうか?お願いします。

【6081】Re:インポート
発言  小僧  - 05/8/26(金) 17:54 -

引用なし
パスワード
   ▼サチチ さん:
実際のCSVのデータの様式によっても変わってきますね。

・連番がついているのか。
・フィールド名が先頭行にあるのか。

etc…

※業務の都合でこれ以降は明日になります。すみません。

【6082】Re:インポート
お礼  サチチ  - 05/8/26(金) 19:16 -

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

こんばんわ!丸2日間ありがとうございます。

>実際のCSVのデータの様式によっても変わってきますね。
>
>・連番がついているのか。
>・フィールド名が先頭行にあるのか。
>
>etc…

複雑なのですねぇ・・・。と、気になったので、小僧さんのコメントを参考に
やってみた所、出来ました!!IDはなしで、フィールド名が先頭で、インポート
出来ました。ただ、これは、自宅にもってきたので、データの個数は6個ですが・・・
月曜に会社でやってみようと思います。

これで出きれば、応用を作成してみたいと思います。
本当に、手取り・足取り、どっぷりとありがとうございました。
お礼がしたい位、感謝です。

一応、この件は、OK!!完璧!!という事で〜。もし、不都合がでたら、
お呼びさせていただきます。
今後とも、よろしくお願いします。小僧先〜生o(^o^)o

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