• ベストアンサー

エクセルデータの照合方法について

エクセルにおいてA1~C10にあるデータがE1~G10にあるデータと一致した場合はJ1~L10に不一致の場合はN1~P10に表示するにはどのようにしたらよいのでしょうか。 データ内容は取引先名、販売数量、取引金額です。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (789/1648)
回答No.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)) に置き換えてもいいです。

noname#248032
質問者

お礼

早速使ってます。 うまくいきました、ありがとうございました。

その他の回答 (6)

  • SI299792
  • ベストアンサー率47% (789/1648)
回答No.6

多分画像のような事で、 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 で配列数式にします。 右下へコピペ。

noname#248032
質問者

補足

表の最上段に項目名を表示する為に1行挿入したところデータが1行消えてしまいます。 消えないようにする為にはどうしたらよいのですか。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.5

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)
回答No.4

単純に考えてマクロで 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)
回答No.3

data例を挙げるべきでしょう。 下記を補足すべきと思う。 またこの作業をする目的は何ですか。 ーー >データ内容は取引先名、販売数量、取引金額で A、B,C列、E,F,G列が取引先名、販売数量、取引金額ですか。 こんなことをするケースを想像できない。 販売数量、取引金額は、ばらける、はず。ある取引先では、販売数量、取引金額は偶然しか一致しないものだろう。 また取引先の1-10行での出現は、同じ順ではないよね?

  • msMike
  • ベストアンサー率20% (368/1813)
回答No.2

乞添附圖御参照 質問文の末尾1行を讀む迄は、添附圖の如き物を御所望かと思ひきや、「データ内容は取引先名、販売数量、取引金額」と知ってビックリポンのサッパリポンです。 斯く成る上は、各範圍に該當データを埋め込んで、「斯樣にしたいンじゃ!」と一目瞭然なサンプルを呈示されたい! 昨日今日に入会された新參者でも無ささうなので、其の位は御出來に成るでしょ?

回答No.1

「N1」セルに =if(A1=E1,"一致","不一致") この様に入力しenter N1セルをN1~P10にコピーすればよい

関連するQ&A