• 締切済み
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数16
  • 閲覧数1466
  • ありがとう数13

みんなの回答

  • 回答No.16
  • f_a_007
  • ベストアンサー率20% (955/4569)

× DoCmd.RunSQL Replace(strRecord(I), XXXXX, strRecord(I)) 〇 DoCmd.RunSQL Replace(strSQL, ”XXXXX”, strRecord(I))

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 縦持ちになっているデータを横持ちにしたいのですが

    SQLServser2012で縦持ちになっているデータを横持ちにしたいのですが、どうしたらよいでしょうか? 〇以下のように現在、テーブル設計されております。 請求TBL --------------------------------------------- 請求ID 請求先名 001 田中 太郎 002 鈴木 一郎 注文TBL ------------------------------------------------ 請求ID 注文ID 発送先 商品ID 個数 001 001 田中 太郎 A 10 001 002 佐藤 次郎 A 5 002 003 鈴木 一郎 B 3 商品TBL ----------------------------- 商品ID 商品名 A みかん B りんご このデータを以下のような結果として得たいのですが、どのようにしたらSQLを作成したらよろしいでしょうか? 請求ID 請求先 商品内容 ------------------------------------------------- 001 田中 太郎 みかん*10、みかん*5 002 鈴木 一郎 りんご*3 ご教授の程、宜しくお願い致します。

  • 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       以上

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

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

  • 回答No.15
  • f_a_007
  • ベストアンサー率20% (955/4569)

【続】DXSelect() DXSelect()の戻り値は添付図のようです。この戻り値をSplit関数で配列 strRecord()に格納。その後、For-Next でテーブルに挿入。 strSQL = "INSERT INTO テーブル3 (ID, 担当者, 種別, 数量) VALUES (XXXXX)" N=UBound(strRecord) For I = 0 To N   DoCmd.RunSQL Replace(strRecord(I), XXXXX, strRecord(I)) Next I DBSelect関数では敢えて数量0を除外していません。もし、仮にそういう希望であれば、最後に DoCmd.RunSQL "DELETE FROM ・・・・" の1行を。 Public Function DXSelect(ByVal strQuerySQL As String, _              Optional strPause As String = ";") As String On Error GoTo Err_DXSelect   Dim isTopField As Boolean   Dim I      As Integer   Dim J      As Integer   Dim N      As Integer   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strTanto  As String   Dim strList   As String   Dim strNewList As String      Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       J = 0       N = .RecordCount - 1       .MoveFirst       For I = 0 To N         isTopField = True         For Each fld In .Fields           If isTopField Then             strTanto = "'" & fld.Value & "'"             isTopField = False           Else             strList = strList & J & "," & _                  strTanto & "," & _                  "'" & fld.Name & "'" & "," & _                  fld.Value & Chr(13)           End If           J = J + 1         Next fld         .MoveNext       Next I     Else       strList = ""     End If   End With Exit_DXSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DXSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", Chr(13) & "[END]", ""), "")   Exit Function Err_DXSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DXSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DXSelect End Function

共感・感謝の気持ちを伝えよう!

  • 回答No.14

>数量がゼロのところを表示しないようにはできないでしょうか? (1) それでは、Nullの場合も0の場合もはじく、ということならば、   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim j As Long   Dim k As Long   Set db = CurrentDb   Set rs1 = db.OpenRecordset("テーブルA")   Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)     For k = 1 To rs1.Fields.Count - 1       rs1.MoveFirst       Do Until rs1.EOF         If Not IsNull(rs1.Fields(k)) Then           If Not rs1.Fields(k).Value = 0 Then             rs2.AddNew             rs2!担当者 = rs1!名前             rs2!種別 = rs1.Fields(k).Name             rs2!数量 = rs1.Fields(k).Value             rs2.Update           End If         End If         rs1.MoveNext       Loop     Next k   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   db.Close: Set db = Nothing (2) テーブルのデータにはNullがないので、0の場合を はじく、というのであれば、   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim j As Long   Dim k As Long   Set db = CurrentDb   Set rs1 = db.OpenRecordset("テーブルA")   Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)     For k = 1 To rs1.Fields.Count - 1       rs1.MoveFirst       Do Until rs1.EOF           If Not rs1.Fields(k).Value = 0 Then             rs2.AddNew             rs2!担当者 = rs1!名前             rs2!種別 = rs1.Fields(k).Name             rs2!数量 = rs1.Fields(k).Value             rs2.Update           End If         rs1.MoveNext       Loop     Next k   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   db.Close: Set db = Nothing 要するに、         If Not IsNull(rs1.Fields(k)) Then           If Not rs1.Fields(k).Value = 0 Then の条件式を両方入れるか一方にするかの違いです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

できました。 いろいろとお世話になりました。ありがとうございました。

  • 回答No.13

>のようにできればOKなので、(1)のほうでしょうか。 はい。(1)です。できましたか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

コードの実行はできましたが、数量がゼロのところを表示しないようにはできないでしょうか?

  • 回答No.12

失礼しました。訂正です。 No11の(2)の終わりに、 Nullのデータの処理については(1)と同じです。 としていますが、処理には多少コードを 変更しなければならないので、必要ならば 提示しますが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

何度も申し訳ありません。 元々のデータが 佐藤…りんご2、みかん1、ぶどう1、バナナ1、いちご1 鈴木…りんご1、バナナ1、いちご1 田中…りんご1、みかん2、いちご1  となっているテーブルを ID  担当者  種別  数量 1   佐藤   りんご 2 2   鈴木   りんご 1 3   田中   りんご 1 4   佐藤   みかん 1 5   田中   みかん 2 6   佐藤   ぶどう 1 7   佐藤   バナナ 1 8   鈴木   バナナ 1 9   佐藤   いちご 1 10   鈴木  いちご  1 11   田中  いちご  1 のようにできればOKなので、(1)のほうでしょうか。

  • 回答No.11

担当者 種別 佐藤 りんご 2 鈴木 りんご 1 田中 りんご 1 佐藤 みかん 1 田中 みかん 2 佐藤 ぶどう 1 鈴木 ぶどう 1 佐藤 バナナ 1 鈴木 バナナ 1 … といった感じにできれば。 の、.... 以下がどのようになっているのかが 問題なのですが・・・・。 質問のデータでは「鈴木」には「ぶどう」は無かったような・・・。 (1) ともあれ、以下では   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim j As Long   Dim k As Long   Set db = CurrentDb   Set rs1 = db.OpenRecordset("テーブルA")   Set rs2 = db.OpenRecordset("テーブルB", dbOpenDynaset)     For k = 1 To rs1.Fields.Count - 1       rs1.MoveFirst       Do Until rs1.EOF         If Not IsNull(rs1.Fields(k)) Then           rs2.AddNew           rs2!担当者 = rs1!名前           rs2!種別 = rs1.Fields(k).Name           rs2!数量 = rs1.Fields(k).Value           rs2.Update         End If         rs1.MoveNext       Loop     Next k   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   db.Close: Set db = Nothing データは、 ID  担当者  種別  数量 1   佐藤   りんご 2 2   鈴木   りんご 1 3   田中   りんご 1 4   佐藤   みかん 1 5   田中   みかん 2 6   佐藤   ぶどう 1 7   佐藤   バナナ 1 8   鈴木   バナナ 1 9   佐藤   いちご 1 10   鈴木  いちご  1 11   田中  いちご  1 のように、単純に「テーブルA」の先頭レコードから データを取り出し、「テーブルB」に格納します。 なお、「テーブルA」でデータがNullのものも表示するならば、    rs2!数量 = rs1.Fields(k).Value を、    rs2!数量 = Nz(rs1.Fields(k).Value) Nullを0とするならば、    rs2!数量 = Nz(rs1.Fields(k).Value, 0) とします。 (2) 以下では、   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.MoveFirst       Do Until rs1.EOF         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.MoveNext       Loop     Next k   Next j   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   db.Close: Set db = Nothing 取り出したデータは、 ID  担当者  種別  数量 1   佐藤   りんご 2 2   鈴木   りんご 1 3   田中   りんご 1 4   佐藤   みかん 1 5   田中   みかん 2 6   佐藤   ぶどう 1 7   佐藤   バナナ 1 8   鈴木   バナナ 1 9   佐藤   いちご 1 10   鈴木  いちご 1 11   田中  いちご 1 12   佐藤  りんご 2 13   田中  みかん 2 のように、「テーブルB」に格納されます。 Nullのデータの処理については(1)と同じです。 (1)と(2)のどちらのデータの並びが必要なのかを もう少し・・・。 以上です。たぶん動くと思いますが。

共感・感謝の気持ちを伝えよう!

  • 回答No.10

No9の追加ですが、 もし、数量を加えるならば、 担当者 種別 数量 田中 りんご  1 鈴木 りんご  1 佐藤 りんご  1 田中 みかん  1 佐藤 みかん  1 佐藤 ぶどう  1 鈴木 バナナ  1 佐藤 バナナ  1 田中 いちご  1 鈴木 いちご  1 佐藤 いちご  1 佐藤 りんご  1 田中 みかん  1 のようにすることですか? そのあたりがあいまいなのですが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

曖昧な記述になり申し訳ないです。 担当者 種別 佐藤 りんご 2 鈴木 りんご 1 田中 りんご 1 佐藤 みかん 1 田中 みかん 2 佐藤 ぶどう 1 鈴木 ぶどう 1 佐藤 バナナ 1 鈴木 バナナ 1 … といった感じにできれば。

  • 回答No.9

>何故かデータがダブって出てきてしまうところがありました どのようなことですか? 質問の並べ替えのデータは 担当者 種別 田中 りんご 鈴木 りんご 佐藤 りんご 田中 みかん 佐藤 みかん 佐藤 ぶどう 鈴木 バナナ 佐藤 バナナ 田中 いちご 鈴木 いちご 佐藤 いちご 佐藤 りんご 田中 みかん のように複数のデータがだぶっているので このような結果がほしいのだろうという意図で コードを作成しています。あとは単純に 数量をくっつけただけですが。このような 結果だけならば数量を除いてください、と 補足しています。 もし、  佐藤 みかん 2  佐藤 みかん 2 ならば、  佐藤 みかん 2 だけの表示にしたいのであれば そのようにしますが、 >上記のようなテーブルがあるのですが、これを下記のようにしたいです >種別の隣に数量がきてもOKです。 のような説明があれば、普通はこのように考えるのが 妥当だと思いますが。

共感・感謝の気持ちを伝えよう!

  • 回答No.8
  • f_a_007
  • ベストアンサー率20% (955/4569)

【ADOと参照設定】 http://accessvba.pc-users.net/ado/ 紹介のサイトを一読下さい。 ========================================= PS、DLookup()関数でもOK! ========================================= http://www.accessclub.jp/samplefile/help/help_166_1.htm DBLookup()は、Access が提供している DLookup() のADO版です。 (1)Select文を生で書く。 (2)DLookup()の重さを克服する。 この二つの目的で開発したものでDLookup()の三倍速で動作します。今回は、DLookup()を多用するので高速版であるDBLookup()を利用しています。そういうことですから、該当部分は当然にDLookup() でも書けます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 DBLookupで問題なく実行することができました。

  • 回答No.7

No5です。 「数量」が必要なければ、「テーブルB」の 「数量」フィールドを除き、コードの    rs2!数量 = rs1.Fields(k).Value をコメントアウトするか、削除してください。 なお、「テーブルB」は、コードを実行すると、 ID 担当者 種別    数量 1  田中  りんご   1 2  鈴木  りんご   1 3  佐藤  りんご   2 4  田中  みかん   2 5  佐藤  みかん   1 6  佐藤  ぶどう   1 7  鈴木  バナナ   1 8  佐藤  バナナ   1 9  田中  いちご   1 10  鈴木  いちご   1 11  佐藤  いちご   1 12  佐藤  りんご   2 13  田中  みかん   2 のようにデータが格納されます。 当然ながら、数量はたとえば、まちまち であっても同じことです。 なお、コードについて若干補足しますと、 「テーブルA」は、 名前 りんご みかん  ぶどう  バナナ  いちご 佐藤  2     1      1     1     1 鈴木  1                 1     1 田中  1      2                  1 のようになっていますが、コードでは「テーブルA」のフィールドを     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 のようにして追いかけていますが、フィールドのIndexは0から はじまるので、先頭の「名前」フィールドは rs1.Fields(0) です。したがってこの先頭の「名前」フィールドを除くため For i = 1 To rs1.Fields.Count - 1 のようにして1からデータを取得するようにしています。 その他、あれやこれやの説明が必要であれば、補足してください。 なお、このコードは、フィールドがいくら増えてもこのまま 使用できます。コードを変更する必要はありません。たとえば、 データのフィールドが、 りんご みかん  ぶどう  バナナ  いちご メロン すいか トマト・・・・ のようになってもこのままです。 IDフィールドは順序を確定するだけなので、順序の確保が必要なければ IDフィールドを取り除けば単に「横を縦に」というだけのテーブルが できます。ただ、その場合も基本的なコードはほとんど同じで、 無駄なループをなくすだけです。このままでも使えますが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 実行はできたのですが、何故かデータがダブって出てきてしまうところがありました。 なぜでしょうか。

関連するQ&A

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

    下記(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
  • エクセル 同名の場合はB列にC列の数値を入れたい!

     A列  B列   C列     D列 りんご        50    みかん みかん        30    ぶどう いちご        20    ばなな ぶどう        40    りんご ばなな        60     いちご ↑上記のような表があります。 もしA列とD列が同名であればC列の金額をB列に表示したいのですがよい関数はありますでしょうか?? おわかりの方教えてくださーい!

  • エクセル出の並び替えについて質問

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方がありましたら教えてください。 どうぞ宜しくお願いします。

  • Excel2003 並び替えに関する質問 VBA初心者

    エクセルの並び替えにおいて質問させていただきます。  A列  B列  C列   D列 りんご  1  バナナ  4 バナナ  2  みかん  6 すいか  3  いちご  8 みかん  4  もも   3 いちご  5  すいか  2 ドリア  6  ぶどう  1 というものを  A列  B列  C列   D列 りんご  1   バナナ  2  バナナ  4 すいか  3  すいか  2 みかん  4  みかん  6 いちご  5  いちご  8 ドリア  6           もも   3         ぶどう  1 というようにA列にならってC,D列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方をVBAで組みたいのですが、まずはどうすればよいのかわかりません。 もし、これを見て答えられるようであれば、どなたか教えていただければ幸いです。 どうか宜しくお願いします。

  • 【Excel】文字データの検索&一致不一致の判断

    Excelで以下のような列があります。    A 1 りんご 2 みかん 3 ぶどう 4 いちご (以下略) ここで、A列に対してすでにA列に存在しているデータが入力された場合、B列に×を返し、存在していないデータなら○を返すような式を入れたいです。    A    B 1  りんご   ○ 2  みかん   ○ 3  ぶどう   ○ 4  いちご   ○ ・・・ 19 ばなな  ○ 20 りんご  × どのような関数を入れれば良いか、教えていただきたいです。 よろしくお願いします。

  • エクセル 関数

    りんご   8 みかん   13 ぶどう   5 スイカ   2 いちご   4 の場合 みかん   13 りんご   8 ぶどう   5 いちご   4 スイカ   2 にできますか? =LARGE(* *)で数字は大→小に並べますが隣の文字(果物)も 一緒に動かしたいのです よろしくお願いします

  • 行と列の条件に一致したら印を付けたい

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

  • エクセルでの質問です

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

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

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

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

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