• 締切済み

Accessで縦と横を入れ替えたい

りんご みかん ぶどう バナナ いちご 佐藤 2   1    1   1  1 鈴木 1      1   1 田中 1   2       1 上記のようなテーブルがあるのですが、これを下記のようにしたいです。 担当者 種別 田中 りんご 鈴木 りんご 佐藤 りんご 田中 みかん 佐藤 みかん 佐藤 ぶどう 鈴木 バナナ 佐藤 バナナ 田中 いちご 鈴木 いちご 佐藤 いちご 佐藤 りんご 田中 みかん 種別の隣に数量がきてもOKです。 ご教授お願い致します。

みんなの回答

回答No.6

【補足】追加クエリの書き方! INSERT INTO テーブル3 SELECT * FROM クエリ33; 先のユニオンクエリを"クエリ33"だとします。その場合、これで添付図のようにテーブルに行が追加されます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

わざわざデータの並びが特徴的に表記してあるので、 取得するデータの方向と並びを質問の例から推論すると、 1 出発は最初のフィールドの一番最後のレコードを取得 2 同じフィールドを最初のレコードに向かってレコードを取得 3 次のフィールドに移動し、一番最後のレコードを取得し、2を行なう 4 一度、全レコードの全フィールドを取り出したら、再び1に戻り  フィールドの値が+1のものを検索してレコードを取得 5 以降繰り返し のようなことですかね。テーブルのデータの並びが よく分からないので、並び替えのデータからすると、 以下のようなことでいいですか。    りんご  みかん  ぶどう  バナナ  いちご 佐藤 2     1      1     1     1 鈴木 1                 1     1 田中 1     2                  1 そこで、上記のテーブルのフィールド名を付け加えて、 名前 りんご みかん  ぶどう  バナナ  いちご 佐藤  2     1      1     1     1 鈴木  1                 1     1 田中  1      2                 1 のように、します。このテーブルの名前を「テーブルA」とします。 要するにテーブルのデザインでいえば、  名前     テキスト型  りんご    数値型  みかん    数値型  ぶどう    数値型  バナナ    数値型  いちご    数値型 次に並び替えたデータを受け取るテーブルを「テーブルB」とします。 フィールドは、 ID     オートナンバー 担当者   テキスト型 種別    テキスト型 数量    数値型 とします。IDは主キーにはしません。並びを確保する ために使用します。 以下のコードを標準モジュールに貼り付け、保存し 実行してみてください。 なお、DAOを使っているので、コード表のツールから 参照設定を選択し、   Microsoft DAO xx Object Library にチェックが入っているか確認してください。 Sub test()   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim i As Long   Dim iMax As Long   Dim j As Long   Dim k As Long   Set db = CurrentDb   Set rs1 = db.OpenRecordset("テーブルA")   Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)   iMax = 1   rs1.MoveFirst   Do Until rs1.EOF     For i = 1 To rs1.Fields.Count - 1       If Not IsNull(rs1.Fields(i)) Then         If rs1.Fields(i).Value > iMax Then           iMax = rs1.Fields(i).Value         End If       End If     Next i     rs1.MoveNext   Loop   For j = 1 To iMax     For k = 1 To rs1.Fields.Count - 1       rs1.MoveLast       Do Until rs1.BOF         If Not IsNull(rs1.Fields(k)) Then           If rs1.Fields(k).Value >= j Then             rs2.AddNew             rs2!担当者 = rs1!名前             rs2!種別 = rs1.Fields(k).Name             rs2!数量 = rs1.Fields(k).Value             rs2.Update           End If         End If         rs1.MovePrevious       Loop     Next k   Next j   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   db.Close: Set db = Nothing End Sub なお、「テーブルA」レコードの順序は確保されているものとします。 単純に「横のものを縦に」ということであれば、こんなまわりくどいことを する必要はありませんが。

回答No.4

【お詫び】バグがありました! × SELECT 担当者, DBLookup("SELECT 'りんご' AS 種別 FROM Test3 WHERE Nz([りんご])>0") As 種別, りんご As 数量 FROM Test3 〇 SELECT 担当者, DBLookup("SELECT 'りんご' AS 種別 FROM Test3") As 種別, りんご As 数量 FROM Test3 WHERE Nz([りんご])>0 テストはしてませんが、WHERE 節の位置が間違っていました。ですから、0でもレコードが発生しています。0でも発生して良いのであれば 〇 SELECT 担当者, DBLookup("SELECT 'りんご' AS 種別 FROM Test3") As 種別, りんご As 数量 FROM Test3 でOKかと思います。(多分)

回答No.3

【補足の補足】As 数量 SELECT 担当者, DBLookup("SELECT 'りんご' AS 種別 FROM Test3 WHERE Nz([りんご])>0") As 種別, りんご As 数量 FROM Test3

回答No.2

【補足】UNIONクエリの補足 SELECT 担当者, DBLookup("SELECT 'りんご' AS 種別 FROM Test3 WHERE Nz([りんご])>0") As 種別, りんご FROM Test3 1、 As 種別・・・欠落していました。 2、ORDER BY 節・・・指定していません。

回答No.1

【VBA】 VBAで変換・登録するのが一番確実で実際的かと思います。次は、その第一ステップのテスト結果です。 >ID:1;担当者:佐藤;りんご:2;みかん:1;ぶどう:1;バナナ:1;いちご:1; DXSelect()の戻り値を手がかりに DoCmd.RunSQL SQL文 で、新しいテーブルに行を挿入すれば目的は達成できます。 【UNIONクエリ】 もちろん、簡便にUNIONクエリを利用する手もなきにしもあらずです。 SELECT   担当者,   DBLookup("SELECT 'りんご' AS 種別 FROM Test3 WHERE Nz([りんご])>0"),   りんご   FROM Test3 UNION SELECT   担当者,   DBLookup("SELECT 'みかん' AS 種別 FROM Test3 WHERE Nz([みかん])>0"),   みかん   FROM Test3 UNION SELECT   担当者,   DBLookup("SELECT 'ぶどう' AS 種別 FROM Test3 WHERE Nz([ぶどう])>0"),   ぶどう   FROM Test3 UNION SELECT   担当者,   DBLookup("SELECT 'バナナ' AS 種別 FROM Test3 WHERE Nz([バナナ])>0"),   バナナ   FROM Test3 UNION SELECT   担当者,   DBLookup("SELECT 'いちご' AS 種別 FROM Test3 WHERE Nz([いちご])>0"),   いちご    FROM Test3; こういうUNIONクエリの結果を INSERT するという手もあります。 ※DBLookup() DBLookup()は、UNIONクエリを安直に書くためのユーザー関数です。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst     As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

関連するQ&A

  • EXCELピボットテーブルの集計項目を追加したい

    ピボットテーブルで集計した結果に集計項目を追加したいのですが、 可能でしょうか? 追加したい項目は、数量合計÷担当件数です。 <元データ> 担当 支店 種目 数量 川上 東京  りんご 50 川上 名古屋 りんご 20 川上 埼玉  みかん 10 川上 埼玉  りんご 5 鈴木 大阪  りんご 25 鈴木 神戸  みかん 10 佐藤 福岡  みかん 30 <ピボットテーブル>       みかん  みかん  りんご   りんご 担当 合計数量 件数 合計数量 件数 佐藤 30  1 川上 10 1 75    3 鈴木 10   1 25    1 計 50 3 100    4     上記このテーブルに「みかん合計数量÷みかん件数」「りんご合計数量÷りんご件数」で 計算した項目「みかん平均」「りんご平均」を追加して、以下のようにしたいと思っています。 担当 みかん みかん平均 りんご りんご平均 佐藤 30 30.0 川上 10 10.0        75 25.0       鈴木 10 10.0        25 25.0       総計 50 16.7        100 25.0       以上

  • エクセルでの重複データの抽出とフラグ

    エクセルでのデータの作成で困っております 下記のように「送り主」と「届け先」の重複データを抽出し数字を与えたいのですが、どうしてよいか判らず困っております。 教えて頂けますでしょうか ギフト配送先のデータ抽出 送り主     届け先  商品 田中太郎  1 佐藤花子(りんご1個) 田中太郎  1 佐藤花子(みかん1個) 田中太郎  1 佐藤花子(バナナ1本) 田中太郎  2 山本○子(みかん1個) 田中太郎  2 山本○子(バナナ1本) 山本○次  1 鈴木△子(りんご詰め合わせ) 山本○次  2 高橋×子(みかん詰め合わせ) 山本○次  3 田中□子(りんご詰め合わせ) 宜しくお願い致します

  • 1対多結合で多を絞り込み条件とするSQLについて

    sqlalchemy を使用 親テーブル id name 1 スズキ 2 タナカ 3 マイク 4 ルイ 5 ジャック 子テーブル id user_id pname number 1 1 リンゴ 2 2 1 バナナ 1 3 1 ブドウ 3 4 2 リンゴ 2 5 2 バナナ 2 6 2 ブドウ 1 7 3 イチゴ 5 8 3 バナナ 3 9 3 ブドウ 1 リンゴを持っている且バナナのnumberで並べ替えしたいので実現方法おしえていただければと思います。

  • エクセルでの質問です

    毎度お世話になっております。 エクセルで下記のような事は出来ますでしょうか? シート1に品名、数量が記載されておりますがシート2に抽出された結果のみ表示する 例)シート1    りんご 100    みかん 200    バナナ 200    りんご 200    バナナ 300    いちご 200 シート2(結果表示)     りんご 300     みかん 200     バナナ 500     いちご 200 と、それぞれの合計数量を抽出結果として表示して管理を行いたいと思ってます。 教えてください

  • 一つのテーブルの複数のフィールドから抜き出す方法について

    一つのテーブルの複数のフィールドから抜き出す方法について 例えば下記のようなテーブルがあったとします。       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル C商店  イチゴ   パイナップル バナナ D商店  イチゴ   バナナ   りんご のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル よろしくお願いいたします。 尚、使用しているデータベースはACCESS2000です。

  • Accessでテーブルの文字列フィールドを連結する

    次のようなフィールドが2列のデータがあります。 1:りんご 1:みかん 1:バナナ 2:みかん 2:ぶどう 3:りんご 3:バナナ それを 1:りんご、みかん、バナナ 2:みかん、ぶどう 3:りんご、バナナ とクエリーでまとめたいのですが どのようにしたらよろしいでしょうか?

  • 重複データを除外する際に条件をつけたい

    下記(A)の状態から(B)のような結果を出したくて、group by やサブクエリなどで試行錯誤しましたが、 欲しい結果が取れず困っております。 どなたかわかる方、ご教授いただけましたら助かります。よろしくお願いいたします。 (MYSQLバージョン:4.1.21) (A)  NO|入荷日付|種別|名称   3|20080730|2|りんご   4|20080801|2|りんご   5|20080728|2|りんご   8|20080801|2|りんご  10|20080812|2|りんご   7|20080811|25|ぶどう   9|20080811|25|ぶどう   1|20080731|36|みかん   2|20080728|36|みかん   6|20080808|50|いちご (B)抽出結果  NO|入荷日付|種別|名称  10|20080812|2|りんご   9|20080811|25|ぶどう   1|20080731|36|みかん   6|20080808|50|いちご ■抽出条件  ・【種別】ごとに【入荷日付】が最新のデータを1件だけ抽出。  ・ NO:7やNO:9のデータのように、【種別】と【入荷日付】が同じ場合は、【NO】が最大のデータを抽出。

    • ベストアンサー
    • MySQL
  • 行と列の条件に一致したら印を付けたい

    シート1に名前と商品のリストがあります 名前 商品 佐藤 りんご 佐藤 みかん 佐藤 ぶどう 加藤 みかん 山本 バナナ 山本 みかん 小林 りんご 小林 ぶどう 小林 みかん 小林 バナナ シート2の行に名前、列に商品名の表があり、シート1のリストを元に 行と列の条件に一致した箇所に印をつけたいのですが、 何か適当な関数はありますでしょうか? りんご みかん ぶどう バナナ 佐藤 加藤 山本 小林

  • エクセルで、スペースで区切られた言葉をわける。

    たとえば、セルのA1に、  りんご■バナナ■みかん■ぶどう■いちご (■=半角スペース) とあったときに、 B1のセルにりんご C1のセルにバナナ D1のセルにみかん E1のセルにぶどう F1のセルにいちご となるようにB1~F1に入力する関数があれば教えてください。

  • エクセルで何件もあるコードと商品の件数を調べたい

    エクセルで コード 名称 009 りんご 005 みかん 009 りんご 003 バナナ 010 イチゴ 005 みかん 003 バナナ 001 ぶどう : : というようなデータが一万件近くあって、 コード 商品  件数 001 ぶどう  ○ 002 すもも  △ 003 バナナ  □ : : というように、コード順に、それぞれの商品の件数を調べてこういった表を作りたいのですがどうしたらいいでしょうか。

専門家に質問してみよう