【エクセル】データの抽出方法

このQ&Aのポイント
  • エクセルでデータの抽出方法について教えてください。手入力のデータを重複している項目をまとめ、隣のセルの内容は消さずにまとめたいです。また、重複した件数も表示したいです。
  • 元データを抽出して、重複している項目を一つにまとめたいです。その際に隣のセルの内容は保持したままにする方法を教えてください。さらに、重複した件数も表示したいです。
  • エクセルでデータを抽出する方法を教えてください。重複している項目を一つにまとめる際に、隣のセルの内容を消さずにまとめたいです。また、重複した件数も表示したいです。
回答を見る
  • ベストアンサー

【エクセル】データの抽出方法

元データ(手入力)を、重複している項目を一つにまとめ、かつ、隣のセルの内容は消さずにまとめたいと考えています。 まとめた際に、重複した件数も数字として算出したいと思います。(可能であれば) 出来れば、関数で済ませたいと思いますが、他の方法でも構いませんので 教えて頂ければと思います。 <元データ> 製品   取り扱い店 エアコン 東京店 ストーブ さいたま店 パソコン 栃木店 エアコン さいたま店 カメラ  横浜店 パソコン 東京店 <抽出データ> 取扱店舗数  製品   取り扱い店 2        エアコン 東京店,さいたま店 1        ストーブ さいたま店 2        パソコン 栃木店,東京店 1        カメラ  横浜店 (まとめたデータは、一つのセル内にカンマ(カンマ以外でも可)で区切るorセルで区分ける)

  • hemuru
  • お礼率76% (151/197)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 元データに、新たに製品名や取扱店が追加されたり、行の切り取り、貼付け、削除、挿入等の編集作業が行われても、自動的に対応可能な方法です。  今仮に、元データの表中で、「製品」と入力されているのがSheet1のA1セルで、抽出データの表中で、「取扱店舗数」と入力されているのがSheet2のA1セルであるものとします。  又、Sheet3のA列とB列を作業列として使用するものとします。  まず、Sheet3のA1セルに次の数式を入力して下さい。 =IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,ROW(),"")  次に、Sheet3のB1セルに次の数式を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",INDEX(Sheet1!$A:$A,ROW())&"゛"&COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW())))  次に、Sheet3のA1~B1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  次に、Sheet2のA2セルに次の数式を入力して下さい。 =IF($B2="","",COUNTIF(Sheet1!$A:$A,$B2))  次に、Sheet2のB2セルに次の数式を入力して下さい。 =IF(ROWS($1:2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!$A:$A,SMALL(Sheet3!$A:$A,ROWS($1:2))))  次に、Sheet2のC2セルに次の数式を入力して下さい。 =IF(OR($A2="",COLUMNS($C:C)>$A2),"",INDEX(Sheet1!$B:$B,MATCH($B2&"゛"&COLUMNS($C:C),Sheet3!$B:$B,0)))  次に、Sheet2のC2セルをコピーして、Sheet2のC2よりも右にあるセル(D2、E2、F2、G2・・・・・)に貼り付けて下さい。  次に、Sheet2の2行目全体をコピーして、Sheet2の3行目以下に貼り付けて下さい。    これで、抽出データの表が自動的に作成されます。

hemuru
質問者

お礼

回答者様ご一緒のお礼にて失礼します。 詳しく内容をまとめて頂き、ありがとうございます。 直に、確認できる状況に無い為、お先にお礼とさせて頂きます。 内容確認次第、再度ご質問やベストアンサーを選ばせて頂きます。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! すでに回答は出ていますので、参考程度で・・・ ご希望の関数ではなく、VBAでの方法になってしまいます。 Sheet1のA・B列にデータがありSheet2に表示するようにしています。 画面左下にあるSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j, vl As Long Dim str As String Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") ws2.Cells.Clear With ws2.Cells(1, 1) .Value = "取扱店舗数" .Offset(, 1) = "製品" .Offset(, 2) = "取り扱い店" End With For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Columns(2), ws1.Cells(i, 1)) = 0 Then ws2.Cells(Rows.Count, 2).End(xlUp).Offset(1) = ws1.Cells(i, 1) End If Next i For j = 2 To ws2.Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 1) = ws2.Cells(j, 2) Then str = str & ws1.Cells(i, 2) & "," vl = vl + 1 End If Next i With ws2.Cells(j, 1) .Value = vl .Offset(, 2) = Left(str, Len(str) - 1) End With vl = 0 str = "" Next j ws2.Columns("A:C").AutoFit End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

>出来れば、関数で済ませたいと思いますが、他の方法でも構いません  ⇒関数で出来ない事はないと思いますが、マクロの方が一括で抽出できるので以下のVBAコードをお試し下さい。 尚、取扱店はカンマ区切りとしています。  (1)データをSheet1としてSheet2に抽出します。  (2)Sheet2タブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キーを押下   ■サンプルコード Sub Sample1() 見出 = Array("取扱店舗数", "製品", "取扱店") Set st1 = Worksheets("sheet1") Set Dic = CreateObject("Scripting.Dictionary") For i = 2 To st1.Cells(Rows.Count, 1).End(xlUp).Row buf1 = st1.Cells(i, 1).Value buf2 = st1.Cells(i, 2).Value If Not Dic.Exists(buf1) Then Dic.Add buf1, buf2 Else Dic.Item(buf1) = Dic.Item(buf1) & "," & buf2 End If Next i For i = 0 To UBound(見出) Cells(1, 1).Offset(0, i) = 見出(i) Next 製品 = Dic.keys 店舗 = Dic.Items For i = 0 To Dic.Count - 1 wk = Split(店舗(i), ",") Cells(i + 2, 1) = UBound(wk) + 1 Cells(i + 2, 2).Value = 製品(i) Cells(i + 2, 3).Value = 店舗(i) Next Columns("a:c").AutoFit Set Dic = Nothing End Sub

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

表の組み換え問題なのでVBAで無いと関数式では複雑になる。 (1)データを製品列でソートしておく(VBAでも可能だが略) (2)下記を実行 例データ ソート後 Sheet1 製品 取り扱い店 エアコン 東京店 エアコン さいたま店 カメラ 横浜店 ストーブ さいたま店 パソコン 栃木店 パソコン 東京店 ーー コード 標準モジュールに Sub test01() Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row k = 2 l = 0 m = sh1.Cells(2, "A") a = sh1.Cells(2, "B") l = 1 For i = 3 To d If sh1.Cells(i, "A") = m Then a = a & "," & sh1.Cells(i, "B") l = l + 1 Else sh2.Cells(k, "A") = l sh2.Cells(k, "B") = m sh2.Cells(k, "C") = a k = k + 1 m = sh1.Cells(i, "A") a = sh1.Cells(i, "B") l = 1 End If Next i sh2.Cells(k, "A") = l sh2.Cells(k, "B") = m sh2.Cells(k, "C") = a End Sub 結果 Sheet2に 2 エアコン 東京店,さいたま店 1 カメラ 横浜店 1 ストーブ さいたま店 2 パソコン 栃木店,東京店

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

製品名や取扱店が新たに追加されても自動的に対応できる方法です。 元のデータがシート1のA1セルには製品、B1セルには取扱店とあり各データは下行に入力されているとします。 C列を作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,INT(MAX(C$1:C1))+1.00001,INT(INDEX(C$1:C1,MATCH(A2,A:A,0)))+COUNTIF(A$2:A2,A2)/100000)) そこでお求めの表ですが例えば別のシートに表示させるとしてA1セルには取扱店舗数、B1セルには製品、C1セルには取扱店として、1か所以上の取扱店については同じ行で横の列に表示させることにします。 A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",COUNTIF(Sheet1!$A:$A,B2)) B2セルには次の式を入力して横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+0.00001)=0,"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1)+0.00001,Sheet1!$C:$C,0)),IF(COLUMN(A1)>1,IF(COUNTIF(Sheet1!$C:$C,ROW(A1)+(COLUMN(A1)-1)*0.00001)=0,"",INDEX(Sheet1!$B:$B,MATCH(ROW(A1)+(COLUMN(A1)-1)*0.00001,Sheet1!$C:$C,0))),"")))

関連するQ&A

  • エクセル教えてください 重複データの削除方法

    エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

  • 【エクセル】抽出データを上に詰めて表示させたい。

    重複するデータを上に詰めて表示さセル方法が解らないです。 B列はA列の元データから重複分は表示しないようにしています。 C列はA列の元データから重複分の数を数えています。 │A │B    │C│ D │ 1│あああ │あああ │3│ 2│いいい │いいい │2│ 3│あああ │     │ │ 4│ええ  │ ええ  │2│ 5│おおお │おおお │1│ 6│ええ  │   │ │ 7│いいい │  │ │ 8│あああ │  │ │ 9│うううう│うううう│1│ ・ ・ 上記のような表で、A列が元データで、 B列にはセルB1から、=IF(COUNTIF($A$1:A1,A1)>1,"",A1)という関数を オートフィルで下まで伸ばしています。 C列は、=IF(COUNTIF($A$1:A1,A1)>1,"",COUNTIF($A$1:$A$100,A1))と いう関数を使用しています。 そこで、B列C列の何も表示されていないセルを詰めて、上に詰めて 表示させたいです。マクロは良くわからないのでなるべく関数で お願いします。ちなみに、今使用している関数も、こうしたほうが いいというのがありましたら。訂正してもらえると助かります。 解りづらいところがありましたら、補足します。 宜しくお願いします。

  • エクセルで重複データを削除する方法

    エクセル2000です。 日付■お名前■住所■電話番号■メールアドレス■担当者■広告媒体■製品名■製品コード■ こんな感じのデータが約10000行あります。 でいろんなやり方があると思うのですが、重複データが100くらい存在します。 この重複データを削除する方法として、どんな方法があるのでしょうか? (ピボットテーブルを利用してデータの個数をかぞえて重複しているセルを 行を削除していくという方法しかいまのところ思い浮かびません。) VBA等は利用できません。 どなたかご教授いただけると幸いです。

  • 【エクセル】データの重複チェック

    次のようなデータが入力されているとします。 A列/B列/C列/D列/E列/F列 1行:都道府県/市区町村/data1/check1/data2/check2 2行:東京/新宿/1/""/1/"" 3行:東京/新宿/2/""/2/"重複" 4行:東京/新宿/3/""/3/"" 5行:東京/渋谷/1/重複/4/"" 6行:東京/渋谷/2/""/5/"" 7行:東京/渋谷/3/""/6/"" 8行:東京/渋谷/4/""/2/"重複" 9行:東京/渋谷/1/重複/7/"" ここで、check1は、 「都道府県」のグループでdata1に重複があれば、「重複」表示をさせます。 また、check2は、 「市区町村」のグループでdata2に重複があれば、「重複」表示をさせます。 例えば、 セルD2=IF(COUNTIF($C$2:$C$4,$C$2:$C$4)>1,"重複","") セルF2=IF(COUNTIF($E$2:$E$9,$E$2:$E$9)>1,"重複","") というように関数を入力して、2行目以下にコピペすればいいのですが、 実際は1万行以上のデータがあり、「都道府県」「市区町村」も多くのグループがあるため いちいち範囲を指定するのも大変です。 そこで、上記関数のように手動で範囲を指定しなくても、 自動で範囲指定をして重複チェックができる良い方法があれば教えてください。 できれば関数がいいのですが、VBAでも構いません。 ご教授のほど、よろしくお願いします。

  • エクセルのデータ並べ替え(抽出)の方法

    エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。   A    B    C   D 1 田中  東京  千葉  福岡 2 山田  京都  滋賀 3 佐藤  奈良  青森  USA 4 鈴木  カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。   A    B    C   D 1東京  田中 2千葉  田中 3福岡  田中 4京都  山田 5滋賀  山田 6奈良  佐藤 7青森  佐藤 8USA   佐藤 9カナダ 鈴木 10愛媛  鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。

  • エクセルの重複データを整理する方法

      毎日の生産管理でエクセル2000を使用しています。 A列に製品名、B列に生産個数というように入力。 重複したデータが日替わりのように発生していますので、 あとでデータ整理するのが大変です。    A    B    C    D   ・・・・ 1 A製品  200 2 B製品  200 3 C製品  250 4 A製品  100 5 D製品  300 6 E製品  120 7 C製品  600 8 B製品   50 ・ 教えて!欲しいのは下記のように重複したデータ(製品名)の場合、 既存の製品の行の空白セルに生産個数を自動的に書き込み、整理する方法。    A    B    C    D ・・・・ 1 A製品  200  100 2 B製品  200  50 3 C製品  250  600 4 D製品  300   5 E製品  120   6  7  8 ・ いろいろ「エクセル 重複データ」に関する質問を検索したのですが、 これに当てはまる質問を見つけられず、意を決して投稿しました。 マクロ、VBAでも構いませんので、どうかご教授願います。 

  • Excel データを部分一致で抽出して表示したい (関数 または VBA)

    まずは下のサンプルデータを見ながら本文を読んでください。 Excelの関数(lookup か vlookup) か VBAを利用して、 Sheet2のセルA列にデータを自動的に表示したい と思っています。 Sheet2のセルA列に表示したいデータは、Sheet1のセルAの情報です。 例えば、Sheet2のセルB1が「静岡県」の場合は、「営業2部」という文字が Sheet2のセルA1に表示されるようにしたいと思っています。 つまり、Sheet1のセルB が Sheet2のセルB の内容と 部分一致した場合に、Sheet2のセルA列に 該当データ(Sheet1のセルA)を 抽出して表示するということをやりたいと考えています。 どうぞよろしくお願い致します。 サンプルデータ ◆Sheet1 参照元となる表 ___|___セルA___|________セルB ---------------------------- 1 | 営業1部 | 東京都千代田区 ---------------------------- 2 | 営業2部 | 静岡県 ---------------------------- 3 | 営業2部 | 山梨県 ---------------------------- 4 | 営業3部 | 東京都渋谷区 ---------------------------- 5 | 流通1部 | 神奈川県 ---------------------------- ◆Sheet2 データを埋めたい表 ___|____セルA_____|_______セルB ---------------------------- 1 |________________| 静岡県富士市大淵 24 ---------------------------- 2 |________________| 東京都千代田区丸の内1-8 ---------------------------- 3 |________________| 大阪府大阪市中央区南船場1―15 ---------------------------- 4 |________________| 神奈川県横浜市 ---------------------------- 5 |________________| ※以下 セルBには500件ほどの都道府県データあり。 6 7 ・ ・

  • エクセルのデータを別シートでカレンダー形式に

    sheet1「売上データ」とsheet2「仕入れデータ」があります。 このデータをsheet4~sheet7「取扱店」ごとにカレンダー形式で表示したいのですが エクセル初心者のためどんな関数を使えば思い通りにできるのか分かりません。 (VlookUpを勉強してみましたが、これでは無理な気がします。) データは毎日増えます。(同じシートで行がどんどん増えます) データの並びはランダムです。 No.は重複しません。 製品ごとに取り扱い店は決まっており変わることはありません。 よろしくお願いします。

  • データから指定の番号のみを抽出する方法

    BVA初心者です。もし、お分かりの方がいましたら教えていただけたら幸いです。 いま、データから任意の番号のデータを抽出したいと思っています。 具体的には     A     B      C      D     E   code番号  商品名   値段    割引   産地 1  234    甲     100円    20%    東京 2  345    乙     130円    15%    神奈川 3  356    丙     220円    5%    千葉 4  669    丁     55円     0%    栃木 5  432    戊     110円    0%     茨城 6  884    己     130円    15%    群馬 という表があったとしたら、 ぬきだしたいcode番号が、345、669、884だとすれば     A     B      C      D     E   code番号  商品名   値段    割引   産地 1  345    乙     130円    15%    神奈川 2  669    丁     55円     0%    栃木 3  884    己     130円    15%    群馬 という表を作成したいのですが。 元のデータも数が多く、また、抜き出したいデータも10程度で毎日手作業でするには面倒なので関数やマクロなどでできればと考えています。 ちなみにcode番号の複重はありません。 よろしくお願いします。

  • エクセル重複データのある列同士の2列を比較したい

    エクセルに詳しい方、教えて頂きたいです。 文で説明すると、難しいので例と一緒に説明させてください。 例えば、下のようなデータがあるとします。 A列 B列 山田さん 栃木県 山田さん 栃木県 山田さん 大阪府 山田さん 栃木県 鈴木さん 三重県 鈴木さん 三重県 大野さん 千葉県 大野さん 東京都 大野さん 東京都 A列はA列で重複したデータがあり、B列はB列で重複したデーターがある場合。 A列 B列 C列 山田さん 栃木県 大阪府 鈴木さん 三重県 大野さん 千葉県 東京都 上ような結果にできる方法はないでしょうか。 例えば住所録をデータで何年分かためており、整理したいが、現在の住所は一つのはずなのに間違えて住所入力したか引越ししたかで複数住所がある。現在はどちらが正しいのか確認するために、その確認資料を作成したい。(同じ名前の人で別人の人はいないとする。) 相違があるかどうかを調べるだけならと、 C列にif関数をいれて見ましたが、ベストな結果ではないと思います。 ちなみに入れた関数は、元のデータのC列目に IF(A1=A2,IF(B1=B2," ","相違あり")," ") 上のIF関数をいれて、下にデータの分だけコピペしました。 エクセルを触るのは久々で、思いつく方法をしてみました。 ですので関数でできるのか、マクロでできるのか、またはエクセルの機能を使用してできるのか、またその方法を教えて頂きたいです。 そんな表にしなくても、こういうのでいいんじゃないの?等の提案でも構いません。 よろしくお願いいたします。

専門家に質問してみよう