- ベストアンサー
エクセルデータの照合方法について
エクセルにおいてA1~C10にあるデータがE1~G10にあるデータと一致した場合はJ1~L10に不一致の場合はN1~P10に表示するにはどのようにしたらよいのでしょうか。 データ内容は取引先名、販売数量、取引金額です。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>表の最上段に項目名を表示 それならA2~C10 E2~G10 と書いておいてください。 I2: =IFERROR(INDEX(A:A,SMALL(IF($A$2:$A$10&$B$2:$B$10&$C$2:$C$10=$E$2:$E$10&$F$2:$F$10&$G$2:$G$10,ROW($A$2:$A$10)),ROW()-1)),"") M2: =IFERROR(INDEX(A:A,SMALL(IF($A$2:$A$10&$B$2:$B$10&$C$2:$C$10<>$E$2:$E$10&$F$2:$F$10&$G$2:$G$10,ROW($A$2:$A$10)),ROW()-1)),"") 両方とも、Ctrl+Shift +Enter で配列数式にして、右へコピペ。 この数式は難しいです。大抵の人はワークエリアの利用を嫌がるのでこの数式にしましたが、ワークエリアを使えば簡単になります。股、データが多くてもコンピュータの負担にならないメリットもあります。 H2: =H1+(A2&"_"&B2&"_"&C2=E2&"_"&F2&"_"&G2) I2: =IFERROR(INDEX(A:A,MATCH(ROW()-1,$H:$H,0)),"") 右へコピペ。 L2: =L1+(A2&"_"&B2&"_"&C2<>E2&"_"&F2&"_"&G2) M2: =IFERROR(INDEX(A:A,MATCH(ROW()-1,$L:$L,0)),"") 右へコピペ。 纏めて下へコピペ。 H列、L列のフォントの色を白にすれば見えなくなります。 H1,L1 は空白にして下さい。 textjoinの使える最新版なら、 H2: =H1+(textjoin("_",FALSE,A2:C2)=textjoin("_",FALSE,E2:G2)) L2: =L1+(textjoin("_",FALSE,A2:C2)<>textjoin("_",FALSE,E2:G2)) に置き換えてもいいです。
その他の回答 (6)
- SI299792
- ベストアンサー率47% (789/1648)
多分画像のような事で、 A1~C1=E1~G1、すべて一致すればJ~L列、一致しないものがあればN~P列に表示、これを繰り返すのだと思います。 I1: =IFERROR(INDEX(A:A,SMALL(IF($A$1:$A$10&$B$1:$B$10&$C$1:$C$10=$E$1:$E$10&$F$1:$F$10&$G$1:$G$10,ROW($A$1:$A$10)),ROW())),"") Ctrl+Shift +Enter で配列数式にします。 右下へコピペ。 M1: =IFERROR(INDEX(A:A,SMALL(IF($A$1:$A$10&$B$1:$B$10&$C$1:$C$10<>$E$1:$E$10&$F$1:$F$10&$G$1:$G$10,ROW($A$1:$A$10)),ROW())),"") Ctrl+Shift +Enter で配列数式にします。 右下へコピペ。
補足
表の最上段に項目名を表示する為に1行挿入したところデータが1行消えてしまいます。 消えないようにする為にはどうしたらよいのですか。
- kkkkkm
- ベストアンサー率66% (1742/2617)
No4は勘違いなので訂正。 Sub Test() Dim i As Long, j As Long, LastRow As Long Dim flg As Boolean For i = 1 To 10 flg = False For j = 1 To 10 If Cells(i, "A").Value & _ Cells(i, "B").Value & _ Cells(i, "C").Value = _ Cells(j, "E").Value & _ Cells(j, "F").Value & _ Cells(j, "G").Value _ Then flg = True Exit For End If Next j If flg = True Then If Cells(1, "J").Value = "" Then LastRow = 1 Else LastRow = Cells(Rows.Count, "J").End(xlUp).Row + 1 End If Cells(LastRow, "J").Resize(1, 3).Value = Cells(i, "A").Resize(1, 3).Value Else If Cells(1, "N").Value = "" Then LastRow = 1 Else LastRow = Cells(Rows.Count, "N").End(xlUp).Row + 1 End If Cells(LastRow, "N").Resize(1, 3).Value = Cells(i, "A").Resize(1, 3).Value End If Next i End Sub
- kkkkkm
- ベストアンサー率66% (1742/2617)
単純に考えてマクロで Sub Test() Dim i As Long, LastRow As Long For i = 1 To 10 If Cells(i, "A").Value & _ Cells(i, "B").Value & _ Cells(i, "C").Value = _ Cells(i, "E").Value & _ Cells(i, "F").Value & _ Cells(i, "G").Value _ Then If Cells(1, "J").Value = "" Then LastRow = 1 Else LastRow = Cells(Rows.Count, "J").End(xlUp).Row + 1 End If Cells(LastRow, "J").Resize(1, 3).Value = Cells(i, "A").Resize(1, 3).Value Else If Cells(1, "N").Value = "" Then LastRow = 1 Else LastRow = Cells(Rows.Count, "N").End(xlUp).Row + 1 End If Cells(LastRow, "N").Resize(1, 3).Value = Cells(i, "A").Resize(1, 3).Value End If Next End Sub
- imogasi
- ベストアンサー率27% (4737/17070)
data例を挙げるべきでしょう。 下記を補足すべきと思う。 またこの作業をする目的は何ですか。 ーー >データ内容は取引先名、販売数量、取引金額で A、B,C列、E,F,G列が取引先名、販売数量、取引金額ですか。 こんなことをするケースを想像できない。 販売数量、取引金額は、ばらける、はず。ある取引先では、販売数量、取引金額は偶然しか一致しないものだろう。 また取引先の1-10行での出現は、同じ順ではないよね?
- msMike
- ベストアンサー率20% (368/1813)
- 中京区 桑原町(@a4330)
- ベストアンサー率24% (1002/4032)
「N1」セルに =if(A1=E1,"一致","不一致") この様に入力しenter N1セルをN1~P10にコピーすればよい
お礼
早速使ってます。 うまくいきました、ありがとうございました。