表の統合方法を探しています

このQ&Aのポイント
  • エクセルで表を作る際に、データの統合方法を教えてください。
  • データ1とデータ2を統合して、新しいデータを作成する方法について教えてください。
  • 名前と出身地のデータを持つデータ1とデータ2を統合し、新しいデータを作成する方法を教えてください。
回答を見る
  • ベストアンサー

表の統合

エクセルで表を作るときの簡単な方法を探しています。 今、下のようなデータ1とデータ2があります。(ほんとうはたくさんあるのですが、省略させていただきます) そのデータを統合してtotalというデータを作る場合、どのような方法があるでしょうか。 D1   D2 名前 出身 頻度 名前 出身 頻度 山田 東京 3 山田 東京 2 伊藤 埼玉 1 山田 埼玉 1 梅田 大分 2 伊藤 埼玉 2      total 名前 出身  D1 D2 山田 東京 3 2 伊藤 埼玉 1 2 梅田 大分 2 0 山田 埼玉 0 1

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

  • ベストアンサー
  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.3

┌─┬──┬──┬─┬──┬──┬─┐ │ │ A │ B │ C│ D │ E │ F│ ├─┼──┼──┼─┼──┼──┼─┤ │1 │名前│出身│D1│名前│出身│D2│ ├─┼──┼──┼─┼──┼──┼─┤ │2 │山田│東京│3 │山田│東京│2 │ ├─┼──┼──┼─┼──┼──┼─┤ │3 │伊藤│埼玉│1 │山田│埼玉│1 │ ├─┼──┼──┼─┼──┼──┼─┤ │4 │梅田│大分│2 │伊藤│埼玉│2 │ └─┴──┴──┴─┴──┴──┴─┘ 表を上記のようにします。データの統合を行うため作業列を設け 次のような表にします。 C2==A2&" "&B2、G2=E2&" "&F2として名前と出身を間に半角スペースを入れて結合する ┌─┬──┬──┬─────┬─┬──┬──┬─────┬─┐ │ │ A │ B │ C │ D│ E │ F │ G │ H│ ├─┼──┼──┼─────┼─┼──┼──┼─────┼─┤ │1 │名前│出身│ │D1│名前│出身│ │D2│ ├─┼──┼──┼─────┼─┼──┼──┼─────┼─┤ │2 │山田│東京│山田 東京 │3 │山田│東京│山田 東京 │2 │ ├─┼──┼──┼─────┼─┼──┼──┼─────┼─┤ │3 │伊藤│埼玉│伊藤 埼玉 │1 │山田│埼玉│山田 埼玉 │1 │ ├─┼──┼──┼─────┼─┼──┼──┼─────┼─┤ │4 │梅田│大分│梅田 大分 │2 │伊藤│埼玉│伊藤 埼玉 │2 │ └─┴──┴──┴─────┴─┴──┴──┴─────┴─┘ 次にTOTALの表を作成するセル範囲の基準位置としてセルJ1を選択し、 [データ]→[統合]を選択します。 「統合の設定」ダイアログボックスで 集計の方法を「合計」 統合元範囲として、セル範囲C1:D4を入力し、追加ボタンをクリック 統合元範囲として、セル範囲G1:H4を入力し、追加ボタンをクリック 統合の基準の「上端行」と「左端列」の両方にチェックを入れて、 OKをクリックと次のような表が作成されます。 ┌─┬─────┬─┬─┐ │ │ J │ K│ L│ ├─┼─────┼─┼─┤ │1 │ │D1│D2│ ├─┼─────┼─┼─┤ │2 │山田 東京 │3 │2 │ ├─┼─────┼─┼─┤ │3 │山田 埼玉 │ │1 │ ├─┼─────┼─┼─┤ │4 │伊藤 埼玉 │1 │2 │ ├─┼─────┼─┼─┤ │5 │梅田 大分 │2 │ │ └─┴─────┴─┴─┘ ここでJ列の名前と出身を分割するために、K列を選択して、1つ列を挿入します。 ┌─┬─────┬─┬─┬─┐ │ │ J │ K│ L│ M│ ├─┼─────┼─┼─┼─┤ │1 │ │ │D1│D2│ ├─┼─────┼─┼─┼─┤ │2 │山田 東京 │ │3 │2 │ ├─┼─────┼─┼─┼─┤ │3 │山田 埼玉 │ │ │1 │ ├─┼─────┼─┼─┼─┤ │4 │伊藤 埼玉 │ │1 │2 │ ├─┼─────┼─┼─┼─┤ │5 │梅田 大分 │ │2 │ │ └─┴─────┴─┴─┴─┘ 次にJ列を選択して、[区切り位置]で「区切り文字」にスペースを選択して、 「完了」をクリックすると次のようになります。 ┌─┬──┬──┬─┬─┐ │ │ J │ K │ L│ M│ ├─┼──┼──┼─┼─┤ │1 │ │ │D1│D2│ ├─┼──┼──┼─┼─┤ │2 │山田│東京│3 │2 │ ├─┼──┼──┼─┼─┤ │3 │山田│埼玉│ │1 │ ├─┼──┼──┼─┼─┤ │4 │伊藤│埼玉│1 │2 │ ├─┼──┼──┼─┼─┤ │5 │梅田│大分│2 │ │ └─┴──┴──┴─┴─┘ データの空欄を0にするために、L列とM列を選択して、[編集]→[ジャンプ] 「選択オプション」ダイアログボックスで「空白セル」をONにして、OKをクリック そのままの状態で、0を入力し、CTRL+ENTERで確定する。

hiromi310
質問者

お礼

ありがとうございます。かなりのヒントになりました。スペースで結合して、後で切り離すという斬新な方法があるとは気付きませんでした。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

Accessで、標準では出来ない、完全外部結合というのを使えば出来ます。参考URLの様に、同じデータから、右外部結合、左外部結合それぞれのクエリを作って、SQLを取得し、UNIONを介してくっつければできます。 下記は、Sheet2及びSheet3のデータからインポートしたテーブルについてやってみた事例です。 SELECT Sheet2.名前, Sheet2.出身, Sheet2.頻度, Sheet3.頻度 FROM Sheet2 LEFT JOIN Sheet3 ON (Sheet2.出身 = Sheet3.出身) AND (Sheet2.名前 = Sheet3.名前) UNION SELECT Sheet3.名前, Sheet3.出身, Sheet2.頻度, Sheet3.頻度 FROM Sheet2 RIGHT JOIN Sheet3 ON (Sheet2.名前 = Sheet3.名前) AND (Sheet2.出身 = Sheet3.出身) ORDER BY 1; 結果は下記の通り(0は入りませんけどね)Office LinkでExcelに書き出しました。 ..1..................名前..................出身.....Sheet2.頻度.....Sheet3.頻度 ..2..................伊藤..................埼玉.........................1........................2 ..3..................山田..................埼玉...................................................1 ..4..................山田..................東京........................3........................2 ..5..................梅田..................大分........................2.......................... ついでに、興味本位でVBAでやってみた事例です。「簡単に」からは非常に外れると思いますが... Const delimiterChar As String = "☆" Sub conbine() Dim i As Long, j As Long Dim splitArray As Variant Dim targetRange As Range Dim targetRow As Range Dim destRange As Range Dim myDic As Object, myKey As Variant '2番目、3番目のシートのA1から入っているデータを結合して、4番目のシートに出力 Set myDic = CreateObject("Scripting.Dictionary") Sheets(4).Range("a1:d1") = Array("名前", "出身", "D1", "D2") Set destRange = Sheets(4).Range("A2") Set targetRange = Sheets(2).Range("A1").CurrentRegion Set targetRange = targetRange.Offset(1, 0).Resize(targetRange.Rows.Count - 1, targetRange.Columns.Count) Call classify(targetRange, myDic) Set targetRange = Sheets(3).Range("A1").CurrentRegion Set targetRange = targetRange.Offset(1, 0).Resize(targetRange.Rows.Count - 1, targetRange.Columns.Count) Call classify(targetRange, myDic) myKey = myDic.keys For i = 1 To myDic.Count splitArray = Split(myKey(i - 1), delimiterChar) destRange.Value = splitArray(0) destRange.Offset(0, 1).Value = splitArray(1) For j = 1 To myDic(myKey(i - 1)).Count With myDic(myKey(i - 1))(j) Select Case .Parent.Name Case "Sheet2" destRange.Offset(0, 2) = .Value Case "Sheet3" destRange.Offset(0, 3) = .Value End Select End With Next j Set destRange = destRange.Offset(1, 0) Next i Set myDic = Nothing End Sub Private Sub classify(targetArray As Range, ByRef myDic As Object) Dim targetRow As Range Dim keyString As String Static rangeCollection As Collection For Each targetRow In targetArray.Rows With targetRow keyString = .Cells(1) & delimiterChar & .Cells(2) If Not myDic.exists(keyString) Then Set rangeCollection = New Collection rangeCollection.Add .Cells(3) myDic.Add keyString, rangeCollection Else myDic.Item(keyString).Add .Cells(3) End If End With Next End Sub ※rangeCollectionはstatic宣言しなくても動きます。myDicの一部として保持されるのかも。

hiromi310
質問者

お礼

ありがとうございます。でも、ちょっと、自分の実力では難しいかもしれません。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

エクセルには「統合」という特別な機能があり、いわばエクセルの術語です。 それと関係のない、一般的な意味で使っているようだ。紛らわしいのではっきりさせること。 質問では「表の組み換え」といったような意味かな。 ーーーー 実例を挙げるのはよいが、どういうことをするのか、文章でも書き添えないとわかり難い。 2塊(名前 出身 頻度)のデータを別シートにおいて1塊(名前 出身 頻度)に並べるのかな。 その際名前+出身地で1個人と判定するのかな。そして同一人のD1、D2は加算しないで別列に保存するのかな。 D1の塊のデータ内では同一人が再度出現は無いのだろうね。 ーー こういう表の組み換えは関数では複雑になって難しい。 VBAを使う必要があると思う。 VBAでも、相当経験したものでないと、コードを作れないように予想する。 ーー 例データ 3塊(A-I列の3x3列)でやってみた。 Sheet1 A-I列 山田 東京 3 山田 東京 2 山田 東京 3 伊藤 埼玉 1 山田 埼玉 1 山田 長野 1 梅田 大分 2 伊藤 埼玉 2 伊藤 埼玉 5 木村 神奈川 5 木村 神奈川 3 鈴木 靜岡 2 ーーー 3列(1塊)に整形する。下の方に継ぎ足す。 標準モジュール Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") c = sh1.Range("IV1").End(xlToLeft).Column ' MsgBox c k = 1 no = 1 For j = 1 To c Step 3 d = sh1.Cells(65536, j).End(xlUp).Row sh1.Range(sh1.Cells(1, j), sh1.Cells(d, j + 2)).Copy sh2.Cells(k + 1, 1) sh2.Range(sh2.Cells(k + 1, "D"), sh2.Cells(k + d, "D")) = no k = k + d no = no + 1 Next j End Sub ーー 結果 Sheet2 上記結果が出るが、それを A,B、D列でソートして 木村 神奈川 5 2 木村 神奈川 3 3 鈴木 靜岡 2 2 伊藤 埼玉 1 1 伊藤 埼玉 2 2 伊藤 埼玉 5 3 山田 長野 1 3 山田 埼玉 1 2 山田 東京 3 1 山田 東京 2 2 山田 東京 3 3 梅田 大分 2 1 ーーー 標準モジュールに Sub test02() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet2") Set sh2 = Worksheets("Sheet3") d = sh1.Range("A65536").End(xlUp).Row MsgBox d k = 1 m = "" For i = 2 To d If m = sh1.Cells(i, "A") & sh1.Cells(i, "B") Then sh2.Cells(k, 2 + sh1.Cells(i, "D")) = sh1.Cells(i, "C") Else k = k + 1 sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, 2 + sh1.Cells(i, "D")) = sh1.Cells(i, "C") End If m = sh1.Cells(i, "A") & sh1.Cells(i, "B") Next i End Sub そして上記test02を実行する。 ーーー 結果 Sheet3 A-E列(DはC列、d2はD列、D3はE列にセット) 木村 神奈川 5 3 鈴木 靜岡 2 伊藤 埼玉 1 2 5 山田 長野 1 山田 埼玉 1 山田 東京 3 2 3 梅田 大分 2 ーー 少数例でしかテストできてない。 氏名等の並び順が漢字コード順になり、当初の順番を崩す、という欠点があるが、とりあえずやってみました。

hiromi310
質問者

お礼

ありがとうございます。

関連するQ&A

  • エクセルの表の集計について

    エクセルの『集計』や『ピボットテーブル』を使わずに、関数でやる方法があれば教えてください。 1 名前  住所  りんご  みかん 2 山田 東京   1    3 3 鈴木 神奈川  3   8 4 佐藤 埼玉   4    10 5 山田 東京   5    5 6 佐藤 埼玉   6    5 とエクセルに表があるとします。 (7行目以降はデータが追加されるとします。) 別シートに下記のように名前ごとにりんご・みかんの数の合計を表に反映するようにしたいのです。 1 名前 住所  りんご  みかん 2 山田 東京   6   8 3 鈴木 神奈川  3  8 4 佐藤 埼玉   10  15 説明不足のところがありましたら補足いたしますので、お願いいたします。

  • 2つの表を統合するVBAマクロについて(2)

    「2つの表を統合するVBAマクロについて」での質問を補足いたしますのでどうかお力をお貸しください。 前回の質問で例にあげたsheet1の表とsheet2の表を統合してsheet3に統合表を作りたいのですが、どのように統合したいのかといいますと、 (1)それぞれの表のA列をキーに、sheet1にもsheet2にもあるデータは新たに統合する表に採用します。前回の例でいうと、sony1,2,5,7ですね。この両者共通のものは新たに統合する表には、sheet2の方のデータを採用します。(複数ある場合は全て採用します。) (2)次にsheet1にしかないデータは統合する表に採用します。前回の例ではsony003が該当します。 (3)最後にsheet2の方にしかないデータは統合する表には採用しません。無視します。 この(1)から(3)を実行して下記のようは統合表を作成したいのです。 (sheet3 統合表)   A   B   C    D sony001 男  東京 Japan ←(sheet2のデータ) sony002 女  埼玉 Japan ←(sheet2のデータ) sony002 女  千葉 U S A ←(sheet2のデータ) sony003 女  千葉 U S A ←(sheet1のデータ) sony005 女  東京 Russia ←(sheet2のデータ) sony007 男  東京 U S A ←(sheet2のデータ) sony007 女  東京 Russia ←(sheet2のデータ) そしてできれば採用されなかった(無視されたデータ)をsheet4にリストアップしたいのです。 (sheet4 無視されたデータ) sony004 男  大阪 Canada sony006 女  東京 Russia このような処理を自動的にできるVBAマクロがわかる方がいらっしゃいましたら、どうかご教授くださいませ。データが大量なので手動ではとても時間がかかってしまい困っております。どうかお力をお貸しください。よろしくお願いいたします。

  • 2つの表を統合するVBAマクロについて

    2つの表を統合したいのですがどなたかお知恵をお貸しください。 (例) sheet1に古い表、sheet2に新しい表があります。それぞれの表はこんな感じです。 (sheet1)   A    B    C    D sony001 男  東京 Japan sony002 女  埼玉 Japan sony003 女  千葉 U S A sony005 男  大阪 Canada sony007 女  東京 Russia (sheet2)   A    B   C   D sony001 男  東京 Japan sony002 女  埼玉 Japan sony002 女  千葉 U S A sony004 男  大阪 Canada sony005 女  東京 Russia sony006 女  東京 Russia sony007 男  東京 U S A sony007 女  東京 Russia これらの表をsheet3にどのように統合したいかといいますと、下記のようは統合表を作成したいのです。 (sheet3 統合表)   A    B    C   D sony001 男  東京 Japan sony002 女  埼玉 Japan sony002 女  千葉 U S A sony003 女  千葉 U S A sony005 女  東京 Russia sony007 男  東京 U S A sony007 女  東京 Russia 質問の長さが800字を超えてしまいますので、この統合表を作成するための手順を「2つの表を統合するVBAマクロについて(2)」で補足したいと思いますのでどうぞよろしくお願いいたします。

  • テキストファイルの文字操作の仕方

    下記の[元データ]ようなテキストファイルのデータをCSV形式の データとして取り扱いたいのですが、[処理後]のように 変換する良い方法はないでしょうか? 何らかしらのプログラミングが必要になるかと思いますが ご教授いただければ幸いです。 どうかよろしくお願い致します。 [元データ] 出身地:東京 名前:山田太郎 性別:男 年齢:26歳 生年月日:1976年1月1日 出身校:東京大学 住所:東京都杉並区 電話:03-0000-0000 FAX:03-0000-0001 出身地:埼玉 名前:鈴木一郎 性別:男・・・・(以下同様) [処理後] 東京,山田太郎,男,26歳,1976年1月1日,東京大学,東京都杉並区,03-0000-0000,03-0000-0001 埼玉,鈴木一郎,・・・

  • エクセルで2つのリストを統合するには?

    エクセルの別々のシートにある2つのリストを統合したいのですが、過去の質問などを見てもうまくいきません。具体的には 【表1】 番号 氏名 住所 A 佐藤 東京 B 高橋 神奈川 C 渡辺 埼玉 D 田中 千葉 E 小林 山梨 【表2】 番号 氏名 年齢 B 高橋 22 D 田中 45 という2つの表で、これを 番号 氏名 住所 年齢 A 佐藤 東京 B 高橋 神奈川 22 C 渡辺 埼玉 D 田中 千葉 45 E 小林 山梨 のようにまとめたいのです。 「データの統合」を使ってみましたがうまくいきませんでした。よろしくお願いします。

  • パーティッションの統合 即急に。

    当方のパソコンはC:に100GB、D:に50GBに分けてあるのですが、空き容量の問題で、Cだけに統合したいのですがデーターを消さずに統合する方法はありませんか? なければDのデーターは消えてもいいので方法はありませんか? OSのインストールだけは避けたいです。 できればタダでやれる方法をお願いします。 OSはXPです。

  • エクセルでの指定文字 カウントについて

    エクセルで並んだデータでの指定した名前だけの個数をカウントするにはどうすればいいのでしょうか? 山田 高橋 佐藤 高橋 梅田 赤田  西 山田 梅田 佐藤 山田 梅田 名前が並んだデータで「高橋」という名前が何個あるのかをカウントしたいのですがどうすればいいのでしょうか?

  • phpで、可変項目のcsvデータを読み込みたい

    csvでデータを読み込む方法はネットで見つけたのですが、下記の条件を加えた場合どうすればいいか分かりません。 ネットで見つけた方法は、ファイルを1行ごと読み込み、コンマごとに区切って配列にいれる方法です。 しかし、項目が可変の場合、名前を入れたいところに別のデータが入ったりします。 【条件】 csvの項目名は、 A,B,C,D,E,F とする それぞれの項目は、省略可能(どこが省略されるか分からない) そのため、 A,D,E,F など、項目名が少ないCSVファイルもある。 こんな場合は、どのように処理をすればよいでしょうか? 実際は、項目名が50個ほどあります。 今回の例のように、少なければ何とかできそうなのですが・・・ 【補足・データファイル】 "A","B","C","D","E","F",←項目名 "山田","太郎","東京","15","123-221","男",←データ "山田","次郎","東京","13","124-567","男", ・・・・・・・・・↓続く ・・・・・・・・・

    • ベストアンサー
    • PHP
  • EXCLEのマクロ 2つのシートを統合する方法

    下記のことを行いたいのです。 教えていただけないでしょうか。 下記2つのシートをA列をキーにして sheet1のあ、b、c列のデータに sheet2のc、d列を 統合して、sheet1のdれつ e列に統合して5列のデータを作りたい a列とb列のデータは基本同じですが、スペースが入っていたり 違う場合もある。B列はsheet1のデータを採用 sheet2は不要 ・sheet1 a列 b列 C列 123 ああ 123456 456 いい 125456 789 うう 12344556 1234 ええ 12345678 4567 おお 123456456 8945 かか 1234567844 ------------------- ・sheet2 a列 B列 C列 D列 123 ああ 03-5212-0000 東京都○ 456 いい 06-5212-0000 大阪府○ 789 うう 044-5212-0000 神奈川県○ 1234 ええ 045-512-0000 横浜市○ 4567 おお 043-212-0000 埼玉県○ 8945 かか 03-5212-0000 東京都○

  • 2つのデータの統合方法を教えてください。

    以下の2つのcsvデータを統合したいと思います。  1.氏名,メールアドレス  2.氏名,住所,電話番号 上記のデータを「氏名」で紐付けして統合したいと思っています。  1.A,B         ⇒  A,B,C,D  2.A,C,D 具体的に確認したいことは、以下の2点です。  1.統合方法を知りたい。  2.1の方法で統合した場合で、氏名の共通がなかった場合は、   空欄で統合できる方法を知りたい。 以上、よろしくお願いいたします。

専門家に質問してみよう