• 締切済み

エクセルで2つの列のセルの内容の比較と取り出し方法

はじめまして。 エクセルの使い方を教えてください。 2つのエクセルファイル(または同じファイルの異なった)列にあるセルの内容を比較してどちらにも共通する内容のセルまたはどちらにも含まれてないセルの内容を取り出して適当なところに置く。セルの内容は文字または数字とします。 又、共通するセルは、そのセルの背景に色をつけるなどを行う。列の長さは任意とします。実際の一列の長さは1000行を超えることもあります。    例 列Aはブランクも含めて8行、列Bは3行とします「質問する」とすると列が乱れてしまいますので列の境を¥で示します   ¥ 列A ¥  列B 行1¥ 3-4 ¥ 2-4-3 行2¥ 2-4-3¥ 5-1 : ¥ 4-1 ¥ 3-4 : ¥ 5-1 ¥ : ¥ 2-5 ¥   : ¥   ¥ : ¥ 3-4  ¥ 行8¥ 23  ¥ 演算の結果 色付けは此処ではできませんのでつけません。              -並べる順序は適当とします---    ¥列A  ¥ 列B  ¥ 共通セル¥不一致セル 行1¥ 3-2 ¥ 2-4-3  ¥ 2-4-3 ¥    3-2 行2¥ 2-4-3 ¥ 5-1 ¥ 3-4 ¥ 4-1 : ¥ 4-1 ¥ 3-4 ¥ 5-1 ¥ 2-5 : ¥ 5-1 ¥ ¥ ¥ 23 : ¥ 2-5 ¥ ¥ ¥ (Blank)    : ¥(Blank)¥ : ¥ 3-4 ¥ 行8 ¥ 23   ¥ 以上よろしくお願いします。 

みんなの回答

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

充分考えてないのですがVLOOKUP関数を使えないか考えてみてください。 (テストデータ)下記のごとく、A2:B8にデータを入れる。 a d あり d g あり f q #N/A g h あり h p #N/A j g あり h (関数式) C2に=IF(VLOOKUP(B2,$A$2:$A$8,1,FALSE)=B2,"あり","見つからず") ただ#N/Aを出したままなこと。 表示だけで抜き出しはしていないこと。 重複存在があること。 など課題は残っています。 C列でソートすればありと無しの分は、塊に分離出来ます。 B列を表に見たてて、D列に =IF(VLOOKUP(A2,$B$2:$B$8,1,FALSE)=B2,"あり","見つからず")を入れると、またなにか使えるかも知れない。 VBAによる回答に付いては、何度も似たご質問に出くわし私も回答した気がしますので省略。

filefish
質問者

お礼

IMOGASHIさんありがとうございます。大分時間がたってしまい申し訳ありません。業務多忙で十分評価できませんのでお礼のみとさせてください。  

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

Sheet1のA列、B列を照合し、C列、D列に結果を出力してみました。 A列に同じ値がある場合の処理等、出力方法が不明なところがありますがとりあえず、 A列のセルはC列、D列のどちらかに表示されます。 標準モジュールに貼り付けます ↓ Sub Syogou()   Dim ws1 As Worksheet 'ワークシート     Set ws1 = Worksheets("Sheet1")   Dim rngA As Range 'A列   Dim rngB As Range 'B列     Set rngA = ws1.Range("A1:A8")    'これは例です。変更してください     Set rngB = ws1.Range("B1:B3")    'これは例です。変更してください   Dim rowA As Long, rowB As Long '行カウンタ     rngA.Interior.ColorIndex = xlNone     '照合する     For rowB = 1 To rngB.Rows.Count       For rowA = 1 To rngA.Rows.Count         '値が同じなら赤く塗る         If ws1.Cells(rowA, 1) = ws1.Cells(rowB, 2) Then           ws1.Cells(rowA, 1).Interior.ColorIndex = 3         End If       Next     Next   Dim rowC As Long, rowD As Long '出力行カウンタ     '赤色を付けていればC列、色がなければD列に出力する     For rowA = 1 To rngA.Rows.Count       If ws1.Cells(rowA, 1).Interior.ColorIndex = 3 Then         rowC = rowC + 1         ws1.Cells(rowC, 3) = ws1.Cells(rowA, 1)       Else         rowD = rowD + 1         ws1.Cells(rowD, 4) = ws1.Cells(rowA, 1)       End If     Next End Sub

filefish
質問者

お礼

NISHI6さん、御回答ありがとうございます。評価する前に時間がたってしまい、申し訳ありません。業務多忙に尽き、又の機会に評価結果をおだしできればと思います。今回はお礼のみにさせていただきます。  

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 この内容だと、通常のワークシート関数では非常に難しい(出来ない?)と思われます。 共通セルや不一致セルの個数が未定であるため、上から順に詰めて表示することが出来ません。 例えば、 数の多い方(質問の例ではA列)について、B列に存在するかどうかを判定して、存在する場合は共通のセル(C列)に表示する場合は、C1に、 「=IF(ISERROR(MATCH(A1,$B$1:$B$3,0)),"",A1)」 と入力し、A列の最終行までコピーします。 これで、B列に存在する場合のみC列に表示しますが、飛び飛びになります。 不一致セルの場合は、このC列に存在しないA列の値と、B列の値をそれぞれD、E列に分けて表示するような風になります。 さらにブランク(未入力?)は検出出来ません。 従って、お望みのものを作るには、VBA(マクロ)によるしかないと思います。

filefish
質問者

お礼

maruru01さん、早速の御回答ありがとうございます。VBAの作り方迄求めるわけには参りませんよね。 簡単に間に合わせるにはManualでうえのように書いてゆくしかないと言うことですね。ありがとうございました。