• ベストアンサー

複数列の一致する行を検索する数式はありますか?

2007でブロック別の10のブックに分けたデータがあり、その中で特定の複数列が一致するデータを、現在は数列をフィルタ抽出し、それと一致するものが他の列にあるかどうか、対象列を変えて調べる、というムダかな?とも思えることをやっています。 実際の表とは別に仮定として質問させていただきたいのですが、A~C,D~F,G~Iの各3列ごとに異質ではあるが表示を同一としているデータがあるとして、調べた結果、ABCが5,10,15であるものが100,500,1000行目に、CDFが5,10,15であるものが1500,2000行目に、G H I が5,10,15であるものが3000行目にあることが判りました。 このケースで3列の組合せ一致があるかないかは調べてみないと判らないのと、フィルタをかける場合、最初に基準にする3列をどれにするかで異なるのと、全てを調べるには何年かかるのかな?という感じです。 全表の中で、同じ組合せがあるなら、それはどんな組合せで、どこにあるか、を調べる数式はあるのだろうか?という疑問をもっています。 VLOOKUPについて本を調べてみたのですが、検索する指定値が決まっているわけではないので違うかな?と思っています。 関数はSUMとCOUNTを少し活用できるようになったかな?のレベルです。 よろしくお願いします。

  • enimy
  • お礼率86% (225/259)

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

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

重複するセル番地と重複の組み合わせなどを表示させるためには多少複雑な操作になりますが次のようにしてはどうでしょう。 シート1のA列からI列にかけてデータが入力されているとして、作業列としてJ1セルには次の式を入力します。 =A1&"/"&B1&"/"&C1 K1セルには次の式を入力します。 =D1&"/"&E1&"/"&F1 L1セルには次の式を入力します。 =G1&"/"&H1&"/"&I1 J1セルからL1エルを選択し下方にオートフィルドラッグします。 答えの表はシート2に作るとしてシート2では次のようにします。 A1セルにはセル番地、B1エルには組合せと文字を入力します。 A2セルには次の式を入力します。 =IF(ROW(A1)<=MATCH(10^10,Sheet1!$A:$A),"A"&ROW(A1),IF((ROW(A1)-MATCH(10^10,Sheet1!$A:$A))<=MATCH(10^10,Sheet1!$D:$D),"D"&(ROW(A1)-MATCH(10^10,Sheet1!$A:$A)),IF((ROW(A1)-MATCH(10^10,Sheet1!$A:$A)-MATCH(10^10,Sheet1!$D:$D))<=MATCH(10^10,Sheet1!$G:$G),"G"&(ROW(A1)-MATCH(10^10,Sheet1!$A:$A)-MATCH(10^10,Sheet1!$D:$D)),""))) B2セルには次の式を入力します。 =IF(A2="","",IF(LEFT(A2,1)="A",INDIRECT("Sheet1!J"&MID(A2,2,10000)*1),IF(LEFT(A2,1)="D",INDIRECT("Sheet1!K"&MID(A2,2,10000)*1),IF(LEFT(A2,1)="G",INDIRECT("Sheet1!L"&MID(A2,2,10000)*1),"")))) A2セルとB2セルを選択して下方にオートフィルドラッグします。 これでシート1でのA列からI列までのデータがAにセル番地で、Bに組合せの形で縦にまとめて表示されることになります。 そこでA列およびB列を選択して「コピー」し、C1セルを選択してから「形式を選択して貼り付け」で「値」にチェックを付けて貼り付けます。 E1セルには重複と文字を入力します。 E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(D2="//",D2=""),"",IF(COUNTIF(D:D,D2)>1,"重複","")) 最後にC列、D列、E列を選択してから「ホーム」タブの「並べ替えとフィルタ」をクリックし、「ユーザー設定の並べ替え」を選択します。表示の画面で最優先されるキーに「組合せ」を選択し、「先頭行をデータの見出しとして使用する」にチェックを付けてOKします。「並べ替えの前に」の画面では「数値に見えるものはすべて・・・」にチェックをしてOKします。重複のデータ同士が並べられセル番地や組合せの形などを見ることができます。

enimy
質問者

お礼

現在やっていることに比べたらかなり効率化できそうなので、これに取り組んでみようと思います。 ありがとうございました。

その他の回答 (5)

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.6

すみません。回答者No2です。 データの件数とはABC列を1データを指しています。 これを記述した関数で1つの数値(例えば 23.45.67とあれば234567 になおす。)にして、その数値を昇順で並び替える事により 同じ数字のものが並ぶ。これをフィルター/個数にする事により 1個以外は重複(A.B.C)があった事が分かるという考えです。 約80列との事で、3列ずつということでしたので81列と想像し 50,000行という事ですので、私が言うところのデータ量は 135万行になるので、駄目みたいでした。。。 お役に立てませんでした m(_ _)m (アクセスソフトでもあればこの考えでいけるのですが)

enimy
質問者

お礼

わざわざありがとうございます。 そのような限界があることがわかっただけでも勉強になりました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.5

あるデータパターンを探すというのではなく重複しているもの全てを検出したい。 ということなのでしょうか。 どうやるにしてもまずABC,DEF、GHIを連結した値を作ることから始めることになりそうです。 どうしてもマクロは無理だとするとちょっとつらい手作業になりますが。 ABC、DEF、GHIはそれぞれ結合した値をJ,K,L列に作ります。 J列をコピーして別のシート(WKSとします)のA列に WKSのB列に”A”、C列に連番 同様にK,L列もその下に貼付けB列にそれぞれ”B","C"、C列にそれぞれの連番を振ります。 でその3列をA列でソート 重複データが見つかります。(ここは関数をD列に入れると簡単) そのデータの元がどの列の何行目にあるかはB列C列を見ればわかる。 さてその後どうします?

enimy
質問者

お礼

この3カ所の部分が一致したデータだけを集めて、他のデータになにがしかの法則性があるものかどうかを検証してみたいので、結果的に徒労に終わる可能性もあるのですが・・。 とりあえず見つけ出して集めることができれば一歩前進できます。その先にてまたお世話になることもあろうかと思いますので、その節はよろしくお願いします。 ありがとうございました。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

データーの量によっては、実用的じゃないかも知れませんが.. 3列のデーターを結合したセルを用意してそれを検索するという方法です 下図で A1~G7が元のデーター A11~G17が結合したデーターです A11には「=A1&B1&C1」と入れ、右、下にコピーします HとI列はデーターがG列以降も次の行に連続している場合のダミーです H1は =A2 とし、コピーします A9を書式設定で文字列にしておき 検索したいデーターを入れます A11~G17に条件付き書式で セルの値が、次の値に等しい、=$A$9 としておくと、一致したセルが一目でわかります

enimy
質問者

お礼

やはり説明がまずかったようで、お示しいただいた表でいうと、一行目にあるA=60,B=43,C=69と同じ並びとなっているものが、DEFやGHIにあるかどうかを調べるために現在は、D列で60を、E列で43を、F列で69をフィルタで抽出し、次にG列で60を、H列で43を、I列で69を、とやって一致があるかないか、あるときはその行番号をメモり、一致する行を集めてJ列以降のデータがどうであるのか、を検証しています。 一致するケースがない場合の方が多いのですが、ABCを基準に一行目から順次やったとして、次にDEFを基準に、次にGHIを基準にとやって行くことになるのですが、ABCを基準に調べた段階ですでに調べ済みで、DEFやGHIの中で調べなくても良いものがそれなりに含まれているハズなのですが、これはABCを基準に調べたときにこうであったの記憶がある道理もなく、他に方法がないのかなぁと思いながらやっているものですから。 ABC,DEF,GHIの各データは元々3ツのセルにあった3種類のものを、並べ替えやフィルタの都合から1種類につき3分割したものです。(例えば、A列に08-23-10となっていたものをAに8,Bに23,Cに10と分割しました) 仮に、作業列的なものにもう一度、連結させたものを入れ、その列がW,X,Yであったとして、3列が一致あるいはどれか2列だけが一致の場合を見出す方法はありますか?(一致するものを単純にカウントすることはできているのですが、どの行なのか、どんな内容なのか、を特定するのが大変なものですから)

  • tag1701
  • ベストアンサー率54% (67/123)
回答No.2

データの件数は100万件を超えてますか? エクセル2007であれば約104万行あるので 別シートに全てABC(2から)列にコピーアンドペーストでまとめて D2列に=CONCATENATE(A2,B2,C2)として最終行までコピー。 1行目に項目名作成(何でもいい) D列で昇順並べ替えを行い、データ-小計-D列項目をグループの基準 集計の方法を個数としてOKにすると同一の場合2個以上で表示されます 左側の-を+にすると個数だけ表示になるので、フィルタを設定し 0以外にすれば理論上はマクロなしでも出来そうです。 (但し、件数が膨大なようで、実際メモリオーバー等起きないかは  不明です。 試せないのですみません)

enimy
質問者

お礼

データの件数というのは使用しているセルの個数になりますか? 全てのセルが埋まっているわけではありませんが、約80列、5万行ですから、全てが埋まるとすると400万ということになるでしょうか。 メモリオーバーというのは知りませんでしたが、時々、処理に時間を要することがあります。 一応、ためしてみたいと思います。 ありがとうございました。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

要するに横並びの連続3列が5,10,15の行を探り出すということでしょうか? >CDFが5,10,15であるものが1500,2000行目 DEFの間違い?それともABC,BCD、CDEと調べる? どっちにしてもマクロかなぁ と思います。

enimy
質問者

お礼

DEFのマチガイでした。 マクロですか。かなりムリそうです。 もっとレベルが向上したらまたお願いします。 ありがとうございました。

関連するQ&A

  • エクセル2007での質問です。A~I列にデータが入っています(1行には

    エクセル2007での質問です。A~I列にデータが入っています(1行には見出し、よって2行目からデータが入っています)。C列には名前(色々なデータが入っているので、C列には同じ名前人の名前が何行か入っています)。G列には、10~25の数字が入っています。 1行目にフィルタをかけます。C列で、Aさんの名前でフィルタをかけます(C列は、人によって行数が違います)。こしてフィルタをかけるた時に、G列の10~25あるうちの 13のみの合計を(これも13は、何行かあります)。 このAさんのみフィルタかけ、そのG行のうちの13の合計額を、A1000に出したいのですが、どうしたらいいですか?(A1000に出したいってことは、999までデータが入っています)。 どう関数を入れたらいいか教えてください。

  • 検索で不一致は空白

    別のブックより検索して、一致した場合はデータ抽出、不一致は空白にする。 A B C 01 1 11 02 2 22 03 3 33 01をA1:A3(別ブックより)検索する。一致したらVLOOKUPで3列目のデータを抽出、不一致は空白。

  • vlookup複数列検索

    vlookupの複数列検索でどういった計算式がいいか教えてください。  A列 B列   C列  D列   2/1 100   6/1 200 とデータがあったとして 初めにA列の2行目のデータをvlookupで計算式をかけ A列になかったら C列の2行目を検索するようにしたいのですが 本来だったらC・D列をA・B列にもっていけばいいのでしょうが、私のやりたいこととして このような2重条件の計算式に持っていきたいです。 vlookupの複数条件は色々とやり方があるみたいで、どれが適してるのか 分からず困っています。 どなたかご存知の方教えてください。 よろしくお願いします。

  • 列と行で一致したセルに

    HY-123 1/3 15個 AB-456 1/1 50個  といようなデータを入力したら 自動で下の表(A列の製造番号、1行目の日にちは固定の表)に 個数が入るにはどうすればいいですか? 番号と日付が一致すれば、その交差セルに個数が出るようにしたいのです。 宜しくお願いいたします。 1月  A     B    C    D 1          1    2    3 2  HY-123            15 3  AB-456   50

  • 一致した行を返したい

    excel2007を使っています おしえてください    A   B   C 1   1   3 2   2   8 3   2   3 4   1   3 5   7   8 6   2   8 7   1   3 このような表がありA1の1と同じ1をA列2行目から検索 B1の3と同じ3をB列2行目から検索 どちらも値が一致した行(検索開始行から数えて何番目)をC1に返したい (この場合3と6がありますが早く一致した3を返したい) C2は4となります Cに入れる数式を是非教えてください

  • エクセルで同一行複数列の値が一致する別表の行検索

    エクセルのBOOK内にある2つのシートにあるそれぞれの表を、「表あ」と「表い」とします。「表あ」のA列とC列とF列には、それぞれ「車種名」「色」「値段」が書かれている表だとし、「表い」にはB列とD列とG列にそれぞれ、「車種名」「色」「値段」が書かれているとします。ここで「表あ」の5行目のA列とC列とF列に例えば「スカイライン」「黒」「100万円」とかかれていたとすると、これと同じ「車種名」「色」「値段」の行が、「表い」のどの行にあるか、その行番号を「表あ」5行目のH列に表す計算式を5Hのセルに入れる方法をご存じでしたら、教えて頂けないでしょうか。1行完成したら、以下同様にコピーで広げていきたいと考えております。

  • (エクセル)表から1列の別表をつくりたい。

    表に入力されたものを1列に並び替えをしたいのです。(エクセル関数) エクセルの表から、セルに入力された情報を抜き出し、並び替えたいのですが、行き詰ってしまい質問させていただきます。 (やりたいこと) 添付資料のように、事業所ごとに購入した物品が日付ごとに入力されていきます。この表を一列で並び替えることを したいのですが、現状の表の形で1列に抜き出すやり方が思い浮かびません。ひとつずつリンクを設定していけばいいですが、 それですと、空白のセルができてしまうこともあり、空白を消すためにフィルタをやらなくてはいけず、なんとか関数でどうにかできないと質問させていただきました(つまり空白のセルは飛ばし、隙間のない1列の表に変換したいです)。 (試したこと) (1)vlookup関数を使うために、日付の横に検索列を作ってもみましたが、同じ行に複数の抜き出すべくものがあると、 if関数のネストをいれるにも「if(c5="","",vlookup(v5,b5:r10,2,fasle)」みたくやってみましたが、c5までは取り出せても、 d5,e5,f5・・・と右にずらしていく関数式が思い当たりません。 (2)種類、数量データ入力されている全てのセルの横に(1.2.3.4.5.6.7.8.9.・・・)と数字をいれて検索列をつくり、vlookupとmatch関数の 組み合わせも試しましたが、vlookup関数の性質上、複数列に検索値(「vlookup(検索値,範囲,列番号,検索の型)」)が存在しているとこれも出来ず。 説明が不十分な点もあると思いますが、よろしくお願いいたします。もし、VBAでなければ難しいとのことでしたら、どのようなVBAを組めばいいかもお願いいたします。

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • 一致するデータを検索する関数って?

    Excelの関数を教えてほしいのですが。 A表とB表があります。A表にはB表と一致するデータも含まれていて、 一致しないデータ-もあります。 A表の中でB表と一致するものを検索したいのです。 最終的にはA表の中のB表と一致するものは削除したいのですが。 まずは、一致するデータを検索できればと思います。 表のデータはかなり数が多いので、列づつではなく表と表で検索できる ようなものがあれば思うのですが。 列の方でもできそうな関数がありましたら教えて頂きたいと思っています。 また、数値と文字列でも使用する関数が違うのでしょうか? 説明が不十分とは思いますがよろしくお願いします。

  • grepで検索文字列が完全一致した行だけ取り出す方法

    grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか? 通常は grep hoge hoge.txt と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。 例えばhoge.txtの中に cc ghoge kkl hogem jjll hoge という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。 何かよい方法があれば教えてください

専門家に質問してみよう