
お世話になります。現在大量にデータを前に悩んでいます。
テーブルに以下のようなデータがあります。
| 薬剤名 | 効果 |
-----------------------
| A剤 | 頭痛 |
| A剤 |生理痛 |
| A剤 | 発熱 |
| B剤 | 歯痛 |
| B剤 |生理痛 |
| C剤 | 頭痛 |
これを、薬剤名ごとにまとめ効果を横へ並べる。
| 薬剤名 |効果1|効果2|効果3|効果4|
-------------------------------------------
| A剤 | 頭痛 |生理痛| 発熱 | |
| B剤 | 歯痛 |生理痛| | |
| C剤 | 頭痛 | | | |
ことって出来るのでしょうか?
効果の数はいくつになるか分かりません。現在は最大7つですが、今後それ以上の物が出る可能性もあります。
ACCESSでは無理なことでしょうか?
また、ACCESSのバージョンは2002です。なお、ACCESSについては、使用法を含め初心者に毛が生えたくらいの知識しかありません。申し訳ありませんが「サル」にもわかるくらいの優しさでご指導願えれば幸いです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こういう場合は、<薬剤別効果一覧>などのテーブルを作成したらどうですか?
・<薬剤別効果一覧>テーブルをクリアする。
・<薬剤別効果情報>を取得する。
・<薬剤別効果一覧>テーブルに追加する。
一種の一時テーブルを作成するということです。
これですと、作成後は、いとも簡単に閲覧したりレポートに出力できます。
*少し、ADO を利用することになります。コードはサワリだけ。
薬剤名 効果総数 効果名_1 効果名_2 効果名_3
A剤 3 頭痛 生理痛 発熱
このように、<薬剤別効果一覧>テーブルにデータを登録するコードは以外と簡単です。
Private Sub コマンド_薬剤別効果一覧追加_Click()
Dim isOK As Boolean
Dim strSQL As String
isOK = CnnExecute("DELETE FROM 薬剤別効果一覧")
If isOK Then
strSQL = "INSERT INTO 薬剤別効果一覧 " & _
"(薬剤名, 効果総数, 効果名_1, 効果名_2, 効果名_3)" & _
" Values " & _
"('A剤', 3, '頭痛', '生理痛', '発熱')"
isOK = CnnExecute(strSQL)
If isOK Then
MsgBox "[薬剤別効果一覧] にデータを追加しました。"
End If
End If
End Sub
僅かに、CnnExecute()を自作ライブラリに追加するだけで、このように読めば判るコードが書けます。
これならば、質問者にとっても別に難しいことではないと思います。
SQL文は、Accessプロジェクトのそれですので Jetとは違うかも知れませんが基本は同じです。
課題は、strSQL の生成にあります。
ここが一つにハードルです。
まあ、それも含めて書くと、一つのプロシージャ全体を請け負うことになりますのでチョットです。
質問レベルからして、いずれ、この領域に踏み込む必要ありと感じましたので・・・。
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CnnExecute(ByVal strSQL As String) As Boolean
On Error GoTo Err_CnnExecute
Dim isOK As Boolean
Dim cnn As ADODB.Connection
isOK = True
Set cnn = CurrentProject.Connection
With cnn
.Errors.Clear
.BeginTrans
.Execute strSQL
.CommitTrans
End With
Exit_CnnExecute:
On Error Resume Next
cnn.Close
Set cnn = Nothing
CnnExecute = isOK
Exit Function
Err_CnnExecute:
isOK = False
If cnn.Errors.Count > 0 Then
ErrMessage cnn.Errors(0), strSQL
cnn.RollbackTrans
Else
MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _
vbExclamation, " 関数エラーメッセージ"
End If
Resume Exit_CnnExecute
End Function
回答ありがとうございました。
>いずれ、この領域に踏み込む必要ありと感じましたので・・・。
そうなのです。もう少しハイレベル?な事を要求されています。今回は私に対応できる物かどうかを判断する第一歩としての意味合いもありました。
ADO?ですか?異国語を聞いてるようですが、勉強すれば解るようになるものでしょうか?
早速、参考書を買いに行こうと決心しました。
でも、何とかなると言うことだけでも分かったので頑張ってみます。まだ、何かと意味不明なことを質問するかも知れませんがよろしくお願いします。
No.4
- 回答日時:
No.3ですが、補足を少しだけ。
クロス集計クエリを作る際には、ACCESSでは各薬剤のどの行が効果1、効果2、効果3に相当するのかわかりません(人間なら上から順番に判断できますが、コンピュータはそんなには賢くありません)。従って明示的に各薬剤の効果NOがわかるように、下記のようにNOの項目をつけてやる必要があります。
| 薬剤名 | NO | 効果 |
-----------------------
| A剤 | 1 | 頭痛 |
| A剤 | 2 |生理痛 |
| A剤 | 3 | 発熱 |
| B剤 | 1 | 歯痛 |
| B剤 | 2 | 生理痛 |
| C剤 | 1 | 頭痛 |
EXCELのデータなら薬剤ごとにソートしたり、NOの列を挿入して同じ薬剤に番号を振ることはそんなに難しくはないと思います。(オートフィルなどでできると思います)
後は集計クエリの列としてNOを選び、集計方法を最大値とすればご希望のような表になるはずです。
補足ありがとうございます。
なるほど!って感じです。確かに希望どおりになりますね。
EXCELと連携させてデータを加工すれば出来るのか~。
う~ん、依頼者(上司)に相談してみます。たぶん、却下?かな。
でも、少し光が見えてきました。ありがとうございました。
No.3
- 回答日時:
No.1の方の回答で間違いなくご希望のことができると思います。
一つ訂正するところは、集計方法として「データの個数」でなく「データの最大値」を選ぶという点です。「A剤」の「効果1」に該当する項目が一つしかなければ、その値のみが表示されます。(「データの最小値」でも同じですが)
回答ありがとうございます。
クロス集計で出来るのですか。
とやってみました・・・・。
なるほど、かなり希望に近づきました。
でも、No.2の方が言うように今後レポート等で処理して行く予定ですので、効果が左詰めになって頂けると幸いです。
よく考えると、アクセスで扱うには一寸、異質のデータなのかなという気がしてきました。
もう少し、考えてみます。
No.1
- 回答日時:
クエリの新規作成ウィザードで「クロス集計クエリ」を選択
薬剤名を行タイトル、効果を列タイトルとデータ個数にすると
| 薬剤名 |効果の個数|頭痛|生理痛|発熱|歯痛|
-------------------------------------------
| A剤 | 3 | 1 | 1 | 1 | |
| B剤 | 2 | | 1 | | 1 |
| C剤 | 1 | 1 | | | |
のようにはできますが...
早速の回答ありがとうございます。
クロス集計クエリですね。
でも、今後薬剤ごとにカードを作る事を考えています。(できるのかな?)できれば、薬剤ごとに効果が並ぶとうれしいです。
でも、この一覧表も「使える!」って思いました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
アクセスで教えてください。 縦持ちデータを横持ちデータに変更したいです。 項目数が多くてクロス集計で
Access(アクセス)
-
【アクセス】クエリで、行と列を入れ替えるには?【access】
Access(アクセス)
-
-
4
Access 縦(行)のデータを横(列)並びに
その他(データベース)
-
5
アクセスで同じ種類のものを横に並べたい
Access(アクセス)
-
6
Accessで縦と横を入れ替えたい
その他(プログラミング・Web制作)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
縦持ちのデータを横持ちにする方法
Excel(エクセル)
-
9
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
10
ACCESS IIF関数 複数条件の設定について
Excel(エクセル)
-
11
Access サブフォームでの選択行の取得
その他(データベース)
-
12
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
13
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
14
アクセスでレポート作成時にデータを横に並べたいとき
その他(データベース)
-
15
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
16
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
17
複数列フィールド値のクロス集計
Access(アクセス)
-
18
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
19
ACCESSのテーブルの行と列を入れ替えたい
Excel(エクセル)
-
20
アクセスでデータを横に並べる方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ACCESSで縦に並んだテーブルデ...
-
5
トルマリンを使用した電気の省...
-
6
KR効果とは何ですか?
-
7
テスト勉強の徹夜のモンスター...
-
8
自動車学校の卒業前効果測定が2...
-
9
変量効果と固定効果
-
10
サブミナル効果について。
-
11
日本語教育で「床面効果」って...
-
12
「固定効果」の意味を教えてく...
-
13
にがりの消費期限?
-
14
「にがり」の危険性について
-
15
ヨーグルトと緑茶の食べ合わせ...
-
16
ヨーグルトの食べすぎは体に悪い?
-
17
回帰水
-
18
一日にバナナ2本って多いですか?
-
19
粉末のにがりを液体にするには?
-
20
自家製ヨーグルトに赤い斑点
おすすめ情報
公式facebook
公式twitter