• ベストアンサー

列中に共通にあるデータを抽出したい

エクセルでA列、B列、C列と別々の文字情報が入っているデータがあります(製品のコードNo),列は条件で分類しています(例,列A: 水をかけて変質したもの、列B: 燃えたもの, など.数値の数は列ごとに異なります). 列Aと列Bの両方で出てきたもの列Aと列Cで出てきたけれど列Bにはないもの、というような抽出を行なうにはどうしたらよいのでしょうか.うまく検索式を組む事が出来ません.よろしくお願い致します.

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

  • ベストアンサー
noname#70958
noname#70958
回答No.4

●A案 数式一発で。  同一列内に重複がない、という前提です。  1行目は見出し行として、A2:C999にデータが入っているとすれば、  ■A,B列にあり、C列にないもの   D2セルを    =OFFSET($A$1,1/LARGE(INDEX((((ISNA(MATCH($A$2:$A$999,$B$2:$B$999,0))=FALSE)+(ISNA(MATCH($A$2:$A$999,$C$2:$C$999,0))=TRUE))=2)/ROW($A$2:$A$999),),ROW()-1)-1,)   として、#DIV/0が返るまで下方にフィル  以下同様に、  ■A,B,C列にあるもの    =OFFSET($A$1,1/LARGE(INDEX((((ISNA(MATCH($A$2:$A$999,$B$2:$B$999,0))=FALSE)+(ISNA(MATCH($A$2:$A$999,$C$2:$C$999,0))=FALSE))=2)/ROW($A$2:$A$999),),ROW()-1)-1,)  ■A,C列にあり、B列にないもの    =OFFSET($A$1,1/LARGE(INDEX((((ISNA(MATCH($A$2:$A$999,$B$2:$B$999,0))=TRUE)+(ISNA(MATCH($A$2:$A$999,$C$2:$C$999,0))=FALSE))=2)/ROW($A$2:$A$999),),ROW()-1)-1,)  ■B,C列にあり、A列にないもの    =OFFSET($B$1,1/LARGE(INDEX((((ISNA(MATCH($B$2:$B$999,$A$2:$A$999,0))=TRUE)+(ISNA(MATCH($B$2:$B$999,$C$2:$C$999,0))=FALSE))=2)/ROW($B$2:$B$999),),ROW()-1)-1,)  ■A列にあり、B,C列にないもの    =OFFSET($A$1,1/LARGE(INDEX((((ISNA(MATCH($A$2:$A$999,$B$2:$B$999,0))=TRUE)+(ISNA(MATCH($A$2:$A$999,$C$2:$C$999,0))=TRUE))=2)/ROW($A$2:$A$999),),ROW()-1)-1,)  ■B列にあり、A,C列にないもの    =OFFSET($B$1,1/LARGE(INDEX((((ISNA(MATCH($B$2:$B$999,$A$2:$A$999,0))=TRUE)+(ISNA(MATCH($B$2:$B$999,$C$2:$C$999,0))=TRUE))=2)/ROW($B$2:$B$999),),ROW()-1)-1,)  ■C列にあり、A,B列にないもの    =OFFSET($C$1,1/LARGE(INDEX((((ISNA(MATCH($C$2:$C$999,$A$2:$A$999,0))=TRUE)+(ISNA(MATCH($C$2:$C$999,$B$2:$B$999,0))=TRUE))=2)/ROW($C$2:$C$999),),ROW()-1)-1,) ちなみに、  ■A,B列にあれば、C列での有無は問わない場合    =OFFSET($A$1,1/LARGE(INDEX((ISNA(MATCH($A$2:$A$999,$B$2:$B$999,0))=FALSE)/ROW($A$2:$A$999),),ROW()-1)-1,) Excel2003で動作確認済。 ただし、データ数が多いと相当に重たい処理になりますから… ------------------------------------------------------ ●B案 データ数が多い場合 1.A,B,C列のデータをD列に縦に並べる。 2.D列のデータを、フィルタオプションで重複を除いてE列2行目以下に書き出す 3.F2セルを   =IF(ISNA(MATCH(E2,$A$2:$A$9999,0)),"","A")&IF(ISNA(MATCH(E2,$B$2:$B$9999,0)),"","B")&IF(ISNA(MATCH(E2,$C$2:$C$9999,0)),"","C")  として下方にフィル 4.F列についてオートフィルタをかけ、目的のデータを抽出 ------------------------------------------------------ なお、大量のデータについて「有無」を調べるだけの場合には、 COUNTIF()よりもISNA(MATCH())を使った方が処理速度の点で優位です。 以上ご参考まで。長乱文陳謝。

inftk
質問者

お礼

詳しい説明をありがとうございます.早速やってみます!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

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

ご質問を種に、MS Queryで遊んでおりました。 下記の様なデータブックを用います。 各列に名前、tableA,tableB,tableCをそれぞれつける ................A...............B...............C ..1.....code_a.....code_b.....code_c ..2..........0001..........0018..........0010 ..3.........0002..........0019...........0011 ..4.........0003.........0020..........0012 データブックとは別のブックに抽出します。(同じブック内でも可能ですが、ディスク上のファイルから抽出する様な気がするので、その場合は未保存データに要注意) XL2000の例では、 データ/外部データの取り込み/新しいデータベースクエリ Excel Files* を選択 カレントフォルダ内のエクセルファイルが表示されるので、 目的のデータファイルを選択 適当なテーブルと列を選び(結局SQLの実行環境としてしか使用しないので) 次へを何度か押して、最後の画面で Microsoft Queryでデータの表示またはクエリの編集を行う を選択して、完了 Microsoft Queryの画面が表示されるので、SQLのアイコンをクリックして、 表示されるテキストボックスに、SQL文を入力してOKをクリック クエリを再表示できません、継続しますかと聞いてくるので、気にせずOKをクリック これで目的のデータが抽出される ファイル/Microsoft Excelにデータを返す で、出力先セルを指定して、 抽出されたデータを貼り付ける という手順で抽出出来ました。 >列Aと列Cで出てきたけれど列Bにはないもの は、次のSQLで良いと思いますが、今晩初めてサブクエリの使い方が分かった様な気がする自分ですので、確信は持てません。 SELECT tableA.code_a FROM tableA INNER JOIN tableC ON tableA.code_a = tableC.code_c WHERE (((tableA.code_a) Not In (SELECT tableA.code_a FROM tableA INNER JOIN tableB ON tableA.code_a = tableB.code_b;))); サブクエリに用いるSQLは、MS Queryが生成するものを切り貼りできます。 ご参考にはならないかもしれませんが...

inftk
質問者

お礼

もっと色々と勉強せねばならないと反省する次第です.助言ありがとうございます.

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

もう少しA,B、C列のデータをモデル化して、順を追って、質問文に書かないと、回答者読者にはわかり難い。 >列Aと列Bの両方で出てきたもの 共通する文字列は、文字列の一部か、文字列そのもの(全文字)か、も良くわからない。 A列には(製品のコードNo?について)重複出現があるのかも質問に書いてない。 抽出は フィルタ フィルタオプション VBAなど 非関数系利用が望ましい。 ーーー >列Aと列Bの両方で出てきたもの 作業列を使うなら、A1がB1:B100(B列データ行を100と仮定)でカウント(COUNTIF)して 0ーーーB列に無い 1以上ーーA列とB列に存在する と判定できるから、1以上の行に上から連番を振って、他シートなどに抜き出しはできる。(WEB・Googleでimogasi方式で照会すれば沢山例が出る) >Aと列Cで出てきたけれど列Bにはないもの 「Aと列Cで出てきた」は上記で判定し、>列Bにはないものも上記で判定できるので、2つをAND条件で判定すればよい。

inftk
質問者

補足

質問内容が分かりにくくてすみません。 列で出てくるものは文字や数値が混じったものとなります。 例)A115, FLAG3, 112Jなど。 共通する文字列は、文字列そのものです。 例)A115とA114は区別する。 重複出現はありません(元データには重複する列データもあるのですが、どうしても抽出式が思いつかなかったので、まずは各々の列中でフィルタをかけて、重複がないように処理をしてから比較しようと考えております)。 列ごとのデータ数はバラバラです。 列A   列B    出力結果 A115   2G    A115 A114    3P    3E FLAG3  A115 3E    542T 567Q   3E このように出力されるようなものを考えておりますが、なかなかうまくゆきません。

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>列Aと列Bの両方で出てきたもの B1セルの文字がA列にある場合は B1 なければ空白 =IF(COUNTIF(A:A,B1),B1,"") 下フィルします >列Aと列Cで出てきたけれど 同じですね(仮にE列を作業列として) =IF(COUNTIF(A:A,C1),C1,"") 下フィルします >列Bにはないもの =IF(COUNTIF(B:B,E1),E1,"") 下フィルします ではいかがでしょうか。

inftk
質問者

お礼

やってみました.なんとか出来そうです. データが多いと若干重くなりそうですが,見通しがあかるくなってきました.ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オートフィルターで抽出後の集計 ユーザー定義関数

    以下のようなテーブルがあったとします。(図参照) A列 ID B列 数値A C列 数値B D列 抽出A E列 抽出B フィルターでD列E列で抽出した後に、B列の数値、例えば数値が1~3あるとします。 それぞれ1~3のC列の数値の合計の式をユーザー定義関数で作ることは出来ますでしょうか? コードかけません宜しくお願いします。 式1 フィルター抽出後のB列の1という数字のみのC列の数値の合計 式2 フィルター抽出後のB列の2   同様 式3 フィルター抽出後のB列の3   同様 VBAの知識はあまりありませんが、モジュールの追加とコードを貼り付ける作業は出来ます。 エクセル2013 64bitです。 宜しくお願いします。

  • エクセルでA列とB列の差分を抽出

    エクセルでA列にはあるがB列にはない項目を抽出するにはどうしたらよいでしょうか。 下の例だと、C列あたりに、山本、川田を抽出したいのですが…… A列にはB列のデータがすべて含まれています。 A列は10月と11月のデータで、B列は10月のデータです。 A列   B列 山田  山田 山本  川上 川田 川上

  • エクセル データ抽出について

    (データ)    A B C 1  I あ 20 2  II い 30  3  III う 10 4  IV あ 10 5  V い 20  6  VI う 30 したい事(1) A列のうちいずれかの項目を入力すると、B列の該当値を抽出 したい事(2) (1)のB列該当値が検索一行目で抽出されたら、その値からC列の値を抽出したい 困っていること・・・B列に全く同じ名前の項目があるため、抽出すると 先に来る値が飛んできてしまう 例:IVを入れると「あ」が自動で抽出され、その「あ」でさらに「10」を抽出したいのに、先にあるC1の「20」が飛んできてしまう。 それぞれ、(1)(2)にどのような関数を入れると、抽出したい値が出てくるでしょうか?

  • エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させた

    エクセルのA列とB列で重複するレコードのみを抽出して別の列に表示させたい。 エクセルのA列に約1,000行くらいのデータが有ります。 このA列内で重複レコードがあります。 B列に約1,000行くらいのデータが有ります。 B列内でも重複レコードが有ります。 この条件の中で (1)A列にもB列にあるデータすべて (2)A列にしかないデータすべて (3)B列にしかないデータすべて を抽出したいのですが、どんな方法がありますか? それで (1)をC列 (2)をD列 (3)をE列 に並べて表示させたいです。 さらに抽出されたデータで重複レコードの場合は1件のみで表示したいです。 複数の操作を繰り返すのではなく C,D,E列に式を入れるだけで済ませる事は可能でしょうか? よろしくお願いします。 例    A   B    C   D   E 1-001-002--001--004--007 2-002-002--002--006--008 3-001-001--005--010 4-005-007 5-001-005 6-004-005 7-004-008 8-010-007 9-006-007 A列には001が3個、002が1個、005が1個有ります。 B列には001が1個、002が2個、005が2個有ります。 A列にもB列にも有るのは、001と002と005ですから これがC列に表示されます。 でそれぞれA列にもB列にも複数有りますが、1個として判定なので よって、C列には 001 001 001 001 002 002 005 005 と表示ではなく 001 002 005 と表示したい。 次にD列はA列に有る物だけですから 004 006 010 となります。B列には004は2個有りますが同じ値なので 004 004 006 010 では無く004は1個の表示です。 E列はB列のみのデータなので 007 008 です。 同じくB列には007が3個有りますが1個ともなします。 007 007 007 008 では無く 007 008 です。

  • Excel2013 同一列の抽出

    Excelの使い方について、教えていただいたく思います。 Win7 Excel2103を使用しています。 とあるデーターの同一行にて、A列、B列の値が同一のものだけを抽出する方法を探しております。 当方、あまりExcelに詳しく無い為、よろしくお願い申し上げます。 【例】       A列      B列 1行目   123     234 2行目   567     123 3行目   123     123 4行目   234     123 5行目   234     234 6行目   234     567 ・ ・ ・ 3行目、5行目がA列、B列が同一の為、抽出できないでしょうか? 該当行の色分け、不要行の削除等、方法は問いません。 宜しくお願い申し上げます。

  • Excelで行方向に並んだデータを列に

    こんばんは。 質問タイトルをどう書いていいのかわからず、わかりにくくてすみません。 こういうExcelの表があります。 A表 A列 B列 No  code   1  10 1  11 1  12 2  10 3  14 4  14 4  15 それを次のようにしたいと思ってます。 B表 A列 B列  C列  D列 No  code1 code2 code3 1  10   11  12 2  10 3  14 4  14   15 A列にあるのがサンプルNoで、それぞれに対応するコードが縦に並んでいる(A表)のを、サンプルNoを重複させずにコードを横に展開(B表)したいのです。 今は各サンプルで重複しているコード数を出して、2以上だったらif関数で横に持っていくという非常に面倒な方法を取っています。 他によい方法はないでしょうか。なお、マクロは嫌がられるので使えません。 データ数よりもシート数(1シートに1つの表)が多く、できるだけ簡単な方法があれば教えていただけますでしょうか。 以上よろしくお願いします。

  • データシートから該当するデータのみ抽出するには。

    Sheet(1)に台帳を作成しています。 A列からZ列に以下の様な    A列 B列 C列 D列 E列 F列 G列   項目 仕様 コード 単価 分類1 分類2 分類3 1 2 1270行 程度のデータです。 分類は6分類設定しています。 行に設定しているデータの内容で10種類の項目に大別出来るので、Sheet(2)からSheet(11)に項目別に検索用Sheetを作成し、分類1から分類6をA列からF列に選択方式で表示出来るように、同時に20行の検索用データを入力出来るようにしました。 但し、分類1~分類6の内、分類2~分類6はブランクの場合もあります。 表示された選択値に基づき、Sheet(1)の台帳にマクロで「データ」→「フィルター」→「フィルターオプションの設定」で抽出を行いましたが、Sheet(9)あたりで、「フィルターオプションの設定」が作動しなくなり抽出不可能となりました。 「フィルターオプションの設定」以外の方法でデータを抽出する方法は無いでしょうか。

  • エクセルでA列B列C列の重複するレコードのみを表示

    エクセルのA列とB列とC列で重複するレコードのみを抽出して別の列に表示させたい。 エクセルのA列とB列とC列にそれぞれ1000行くらいのデータがあります。 それぞれの列内には重複レコードがあります。 この条件の中で 「A列とB列とC列に重複するデータすべて」 を抽出したいのですが、どんな方法がありますか。 抽出されたデータで重複レコードの場合は1件のみで表示したいです。 よろしくお願いします。 例   A   B   C   抽出  1-001-002--002--002 2-002-002--005--007 3-003-007--007--008 4-007-008--008--011 5-008-008--010 6-008-010--011 7-011-011--012 8-013-014--013

  • 特定文字列から空白セルまでの抽出2

    下例のようなエクセル変換された表があります。この表の「会社A」のデータ(A3:J5)、「会社B」のデータ(A8:J9)を抽出し、それぞれ「会社A」「会社B」という別シートに貼り付けたいです(実際はA、B2社ではなく10社以上あります)。特定文字列から空白行までの行数は変動します。前に似た質問がありましたが、初心者ゆえ理解出来ず、うまく活用出来ませんでした。よろしくお願い致します。    A     B    C    D    E    F    G    H    I    J 1 コード   品名 数値(1) 数値(2) 数値(3) 数値(4) 数値(5) 数値(6) 数値(7) 数値(8) 2 会社A 3 000-000 品A  456   789  123   456   789   123  456   789 4 000-001 品B  456   789  123   456   789   123  456   789 5 000-002 品C  456   789  123   456   789   123  456   789 6 7 会社B 8 000-000 品A  456   789  123   456   789   123  456   789 9 000-003 品D  456   789  123   456   789   123  456   789 10 11

  • エクセルでA列、B列、C列、D列、E列に数値が入力されており、それぞれ

    エクセルでA列、B列、C列、D列、E列に数値が入力されており、それぞれの数値が重複しないように合計数値を計算したいのですが、何か良い方法は無いでしょうか? 例 A B C D E 1 5 12 6 13 13 2 7 13 7 14 14 3 16 8 20 5+12+6+13+13=49 5+12+7+13+13=50 よろしくお願いします

このQ&Aのポイント
  • 2021年に株式譲渡して、損失が出ました。別の証券会社での利益分と相殺するため、申告分離で確定申告を作成予定です。
  • 介護保険料、医療費負担割合、介護サービス負担割合の算出のもととなる所得額がこれによって影響がでるかどうか気をつけないといけないと聞いたので、心配になりお伺いします。
  • 損失のほうが多いので次年度に損失繰り越しとなりますが、次年度の確定申告(予定)の際は、合計所得をベースとする介護保険料、介護サービス負担割合については注意しないといけないということになりますでしょうか。
回答を見る

専門家に質問してみよう