- 締切済み
エクセルで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 ¥ 以上よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
充分考えてないのですが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による回答に付いては、何度も似たご質問に出くわし私も回答した気がしますので省略。
- nishi6
- ベストアンサー率67% (869/1280)
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
お礼
NISHI6さん、御回答ありがとうございます。評価する前に時間がたってしまい、申し訳ありません。業務多忙に尽き、又の機会に評価結果をおだしできればと思います。今回はお礼のみにさせていただきます。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 この内容だと、通常のワークシート関数では非常に難しい(出来ない?)と思われます。 共通セルや不一致セルの個数が未定であるため、上から順に詰めて表示することが出来ません。 例えば、 数の多い方(質問の例ではA列)について、B列に存在するかどうかを判定して、存在する場合は共通のセル(C列)に表示する場合は、C1に、 「=IF(ISERROR(MATCH(A1,$B$1:$B$3,0)),"",A1)」 と入力し、A列の最終行までコピーします。 これで、B列に存在する場合のみC列に表示しますが、飛び飛びになります。 不一致セルの場合は、このC列に存在しないA列の値と、B列の値をそれぞれD、E列に分けて表示するような風になります。 さらにブランク(未入力?)は検出出来ません。 従って、お望みのものを作るには、VBA(マクロ)によるしかないと思います。
お礼
maruru01さん、早速の御回答ありがとうございます。VBAの作り方迄求めるわけには参りませんよね。 簡単に間に合わせるにはManualでうえのように書いてゆくしかないと言うことですね。ありがとうございました。
お礼
IMOGASHIさんありがとうございます。大分時間がたってしまい申し訳ありません。業務多忙で十分評価できませんのでお礼のみとさせてください。