• ベストアンサー

ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?

お世話になります。現在大量にデータを前に悩んでいます。 テーブルに以下のようなデータがあります。 | 薬剤名 | 効果 | ----------------------- | A剤  | 頭痛 | | A剤  |生理痛 | | A剤  | 発熱 | | B剤  | 歯痛 | | B剤  |生理痛 | | C剤  | 頭痛 | これを、薬剤名ごとにまとめ効果を横へ並べる。 | 薬剤名 |効果1|効果2|効果3|効果4| ------------------------------------------- | A剤  | 頭痛 |生理痛| 発熱 | | | B剤  | 歯痛 |生理痛|   | | | C剤  | 頭痛 |   |   | | ことって出来るのでしょうか? 効果の数はいくつになるか分かりません。現在は最大7つですが、今後それ以上の物が出る可能性もあります。 ACCESSでは無理なことでしょうか? また、ACCESSのバージョンは2002です。なお、ACCESSについては、使用法を含め初心者に毛が生えたくらいの知識しかありません。申し訳ありませんが「サル」にもわかるくらいの優しさでご指導願えれば幸いです。 よろしくお願いします。

  • kazh
  • お礼率89% (60/67)

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答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

kazh
質問者

お礼

回答ありがとうございました。 >いずれ、この領域に踏み込む必要ありと感じましたので・・・。 そうなのです。もう少しハイレベル?な事を要求されています。今回は私に対応できる物かどうかを判断する第一歩としての意味合いもありました。 ADO?ですか?異国語を聞いてるようですが、勉強すれば解るようになるものでしょうか? 早速、参考書を買いに行こうと決心しました。 でも、何とかなると言うことだけでも分かったので頑張ってみます。まだ、何かと意味不明なことを質問するかも知れませんがよろしくお願いします。

その他の回答 (3)

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答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を選び、集計方法を最大値とすればご希望のような表になるはずです。

kazh
質問者

お礼

補足ありがとうございます。 なるほど!って感じです。確かに希望どおりになりますね。 EXCELと連携させてデータを加工すれば出来るのか~。 う~ん、依頼者(上司)に相談してみます。たぶん、却下?かな。 でも、少し光が見えてきました。ありがとうございました。

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.3

No.1の方の回答で間違いなくご希望のことができると思います。一つ訂正するところは、集計方法として「データの個数」でなく「データの最大値」を選ぶという点です。 「A剤」の「効果1」に該当する項目が一つしかなければ、その値のみが表示されます。(「データの最小値」でも同じですが)

kazh
質問者

お礼

回答ありがとうございます。 クロス集計で出来るのですか。 とやってみました・・・・。 なるほど、かなり希望に近づきました。 でも、No.2の方が言うように今後レポート等で処理して行く予定ですので、効果が左詰めになって頂けると幸いです。 よく考えると、アクセスで扱うには一寸、異質のデータなのかなという気がしてきました。 もう少し、考えてみます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

クエリの新規作成ウィザードで「クロス集計クエリ」を選択 薬剤名を行タイトル、効果を列タイトルとデータ個数にすると | 薬剤名 |効果の個数|頭痛|生理痛|発熱|歯痛| ------------------------------------------- | A剤  |  3  | 1 | 1 | 1 |  | | B剤  |  2  |  | 1 |  | 1 | | C剤  |  1  | 1 |   |  |  | のようにはできますが...

kazh
質問者

お礼

早速の回答ありがとうございます。 クロス集計クエリですね。 でも、今後薬剤ごとにカードを作る事を考えています。(できるのかな?)できれば、薬剤ごとに効果が並ぶとうれしいです。 でも、この一覧表も「使える!」って思いました。ありがとうございました。

関連するQ&A

  • Accessで縦に情報が展開されてるテーブルの処理

    作業環境は以下の通りで、Accessの知識は初心者です。 OS:Windws7/使用ソフト:Access2003 やりたい事はこれに近いのですが、もう一ひねりある為困っています。 http://okwave.jp/qa/q2452277.html?from=recommend テーブルに以下のようなデータがあります。 薬剤/配番/効果/使用方法 A剤/00001/頭痛/1回1錠 A剤/00002/発熱/食後…(長文) B剤/00001/頭痛/1回2錠 B剤/00003/裂傷/清潔な手で…(長文) これを薬剤名ごとに、効果(数は120を超えます)と使用方法を横へ並べる事はできますか?

  • Accessのテーブル

    普段はExcelで簡単なデータ入力くらいしかしていない者です。 Accessのテーブルで A1 A2 A3 … A30 B1 B2 … B30 C1 C2 … C30 となっているデータを A1 B1 C1 A2 B2 C2 A3 B3 C3 ・   ・   ・ ・   ・   ・ A30 B30 C30 と並び替えなければいけないのですが、方法がわかりません。 Excelに変換したほうがよいのでしょうか。 よい方法がありましたら教えていただきたいです。 よろしくお願いします。

  • アクセス 項目毎にデータを横に並べる方法

    こんにちは。宜しくお願いします。 アクセスのデータで 商品/SEQ/値段 a   1  500 a   2  600 a   3  700 b   1  200 c   1  450 c   2  520 というデータを 商品/値段1/値段2/値段3/・・・ a   500  600   700 b   700 c   450  520 のように横に並べたいのですが、 このようにする方法はありますでしょうか? 最終的にエクセルファイルにするので、アクセスかエクセルで何か方法があれば教えて下さい。

  • エクセルで縦に並んだデータを横に並び替えたい

    エクセルで↓ のようなデータがあります  | A | B | C | D 1|A店|りんご| 2 | 2|A店|みかん| 3 | 3|A店|バナナ| 4 | 4|B店|りんご| 3 | 5|B店|バナナ| 2 | これを以下のようなかたちにしたいのですが、一つずつ移動する以外に方法はありますか?  | A | B | C | D | E | F | G | 1|A店|りんご| 2 |みかん| 3 |バナナ| 4 | 2|B店|りんご| 3 |バナナ| 2 | 100以上データがあり、手作業で移すのは大変です。 ちなみにVBAなどはほとんど理解できません。 何か解決策があればと質問させていただきたました。 よろしくお願いします。

  • エクセル2003で横に並んだデータを縦に並べたい

    エクセル2003で最終的には簡単なデータベースを作りたいのですが、 現在の形を変えないと希望しているデータが取れないそうです。データ量が多い為、 一括処理してくれるようなマクロもしくはVBAを希望しております。 下記に具体的なデータを記載しますので、どうかお知恵をお貸し下さい。 よろしくお願い致します。 ○現在の形 A1: (名前) A2: 太郎 B2: 12月90点 C2: 11月34点 D2: 10月54点 A3: 花子 B3: 12月39点 A4: 健介 B4: 12月100点 C4: 11月75点 A5: 二郎 B5: 12月45点 C5: 11月47点 D5: 10月33点 E5: 9月76点 ・・・ A6: 美佐子 B6: 12月22点 ・・・・以下3000行ぐらいあります。またB列以降の列は最大でも30列ぐらいまであります。 ↓希望している形 A1: (名前) B1: (点数一覧) A2: 太郎 B2: 12月90点 A3: 太郎 B3: 11月34点 A4: 太郎 B4: 10月54点 A5: 花子 B5: 12月39点 A6: 健介 B6: 12月100点 A7: 健介 B7: 11月75点 A8: 二郎 B8: 12月45点 A9: 二郎 B9: 11月47点 A10: 二郎 B10: 10月33点 A11: 二郎 B11: 9月76点 A12: 美佐子 B12: 12月22点 ・・・・と並べたいのです。

  • エクセル縦に入ったデータを横に…

    例えばエクセルに以下のようにA 1~A4まで数字が入っていたとして   A 1 ■ 2 ○ 3 × 4 ▲ 以下のよう(A1~D1)にしたいのですが  A  B  C  D 1 ■ ○ × ▲ すぐに出来るような関数などはありませんか? データ数多く簡単に出来る方法を探しております。 よろしくお願いします。

  • データアクセスページ1ページに複数のテーブルデータを載せる方法について

    当方Access2003のデータアクセスページ機能を用いて Webページを作成しております. これは、イントラネットを用いて拠点同士でアクセスする為です. ここで、a,b,cの3つのテーブルのデータを データアクセスページ1ページにまとめて 載せたいと考えています. bはaにリンクし、cはbにリンクするといった感じのページです. 例えるならば、フォームにサブフォームを作成し、 フォーム表示データにリンクしてサブフォームデータも変化するという感じです. このようなページを作成するのに なにか方法ありましたら教えてください. よろしくお願いします.

  • アクセス2010 3つのデータ

    アクセス2010で3つのデータを1つのデータにまとめたいと思っています。 A配布先 A名前 A住所 B配布先 B名前 B住所 C配布先 C名前 C住所 がそれぞれのデータに入っています。 3つのデータには重複しているデータがあるのでそのデータを名前でまとめて1行にまとめたいのですが、うまくいきません。 (AとBとCが同じ)名前 A配布先 B配布先 C配布先 A住所  B住所 C配布先 というふうにし、かつ名前がAとBのみ同じ、BとCのみ同じ、AとCのみ同じのものも出力したいです。 現状、AND検索でしかできず、AとBとCでデータ出力するとAとCのみなどのデータが抜けてしまうので、どうしたらOR条件で出力できるのかがわかりません。 初心者で初歩的な質問で申し訳ありませんが教えていただけると助かります。

  • アクセスの違うファイルデータをひとつのテーブルにしたい

    アクセス初心者です。 今回仕事でデータを分析することになったのですが、わからないので教えて頂きたいです。 あるデータをアクセス移行し、Aファイル Bファイルのアクセスファイルを作りました。 Aファイルのテーブル 商品NO  枝NO   出荷年月  店  商品 123    01    2007.08   東京  A 345    01    2007.08   大阪  A 567    02    2007.08   東京  B Bファイルのテーブル 商品NO+枝NO   店   担当者 12301       東京   山田 34501       大阪   鈴木 56702       東京   佐藤 C(作りたいテーブル) 商品NO  枝NO   出荷年月  店  商品  担当者 123     01   2007.08  東京  A   山田 345     01   2007.08  大阪  A   鈴木 567     02   2007.08  東京  B   佐藤 *Bの担当者項目をAに加えたい もしくは D(作りたいテーブル) 商品NO+枝NO   店   担当者 出荷年月   商品 12301       東京   山田  2007.08    A 34501       大阪   鈴木  2007.08    A 56702       東京   佐藤  2007.08    B *Aの出荷年月 商品をBに加えたい 私は AファイルにBファイルをリンクさせました。 その後、AとBのテーブルをリレーションシップしようと思いましたが、 KEYにしようと思った商品NOが Aでは 商品NO と 枝NOでわかれていたためわからなくなってしまいました。 CもしくはDを作る方法はあるのでしょうか? 他の社員がまったくアクセスを利用していない人なので、困っています。 長くなってすいません。

  • access テーブルの内容を合計して別テーブルに

    accessでテーブルの数値を合計して別のテーブルに追加するにはどうしたら良いでしょうか。よろしくお願いします。 テーブルA チーム名 名前 点数 チームA ああ 100 チームA いい 250 チームB うう 300 チームB ええ 200 チームC おお 150 テーブルB チーム名 点数 (チームごとに点数を集計・最初はデータは空です)

専門家に質問してみよう