2016-10-27 9 views
0

私は私の問題を考え過ぎたと思うので、私は最初からやり直しています。2枚のシート間の行を比較する - 機能

私は2つのスプレッドシートを持っています.1つは元のデータベース(org_DB)で、もう1つは更新されたデータベース(new_DB)です。行数は、org_DBでは約15,000、new_DBでは約18,000です。関連する連続する列の数は、両方で正確に14です。

元のデータベースとは異なるnew_DBエントリと追加のすべてのnew_DBエントリのみを含む3番目のシートが結果として必要です。

差異の定義は、差が0より大きい行です。

ADDITIONALの定義は等価のない行です。

「新しいDB」が「org DB」よりも長く、すべての式がorg_DBの終点で失敗するため、私は2つの定義が必要だと思います。 2つのテストは、DBのサイズの

は以下のとおりです。

org_DB

Code 1 Code 2 Code 3 Code 4 
AA00001 AAGA 1180218  24 
AA00007 AAGA 03821787-97 58 
AA00008 AAGA 11821260-99 59 
AA00009 AAGA 11001017  60 
AA00016 AAGA 3801648  67 
AA00017 AAGA 3801649  120 
AA00018 AAGA 3801692  66 
AA00019 AAGA 03821084-61 70 

new_DB

Code 1 Code 2 Code 3 Code 4 
AA00001 AAGA 1180218  24 
AA00008 AAGA 11821260-99 59 
AA00009 AAGA 11001015  60 
AA00016 AAGA 3801648  67 
AA00017 AAGA 3801649  120 
AA00018 AAGA 3801692  69 
AA00019 AAGA 03821084-61 70 
XX00101 XXGA 1234X567X  101 
XX00102 XXGB 1234X567X  101 

結果DB(結果は私が探しています)

01私は

=filter(new_DB,if(ArrayFormula(sum(--(new_DB=org_DB)))<>4) 

通報1点である使用している結果の配列を得るために

=if(ArrayFormula(sum(--(new_DB!A2:D2=org_DB!A2:D2)))<>4,"Copy row","Ignore") 

を使用している(行単位で行上で動作)行比較のため

AA00009 AAGA 11001015 60 
AA00018 AAGA 3801692  69 
XX00101 XXGA 1234X567X 101 
XX00102 XXGB 1234X567X 101 

FILTER条件引数は、ArrayFormulaから1つの数式結果しか取得できないため、#N/Aで失敗します。 - "FILTERの範囲サイズが一致しません。実際の行数:1、列数:1 "

問題2は、IFが1行とnn列を比較しているときのArrayFormulaのことです。関数全体を別のArrayFormulaにラップすると、さらに奇妙な結果が得られます。

問題3行比較関数をIF ArrayFormulaからSUMPRODUCTに変更すると、ArrayFormulaラッパーで使用すると誤った結果が生成されます。

私がこのメソッドを使用すると、再帰プロセスが非常に長くなる可能性があることがわかります。私のメソッドを受け入れるようになったのは根本的に欠陥があります。列AにはVLOOKUPとFILTERのコンボを使用する必要があります。列Aは実際にはSKU IDなので、常に一意にする必要があります。

誰でも助けてください。 TIA

org_DB行3(AA0007 ...)は結果に含まれていないことに注意してください。熟考する。ここ

テストシート:Test DB Sheet

+1

DIFFERENTとADDITIONALの定義は同等です。各定義に合った行の例を提供してください。 –

+0

[プライマリキー](https://www.techopedia.com/definition/5547/primary-key)である列が14個未満で、列の組み合わせが1つしかありませんか? –

+0

また、コード4が変更されただけでなく、AA00017も表示されるべきですか? –

答えて

0

これは、私はあなたに自分自身を制限することができます任意の列を持っているあなたの求めている理由である列の多くの本当にすぐ本当に醜いになります。

=ARRAYFORMULA(FILTER(
    'New DB'!A2:D10, 
    ISERROR(MATCH('New DB'!A2:A10 & "|" & 
       'New DB'!B2:B10 & "|" & 
       'New DB'!C2:C10 & "|" & 
       'New DB'!D2:D10, 
       'Org DB'!$A$2:$A$9 & "|" & 
       'Org DB'!$B$2:$B$9 & "|" & 
       'Org DB'!$C$2:$C$9 & "|" & 
       'Org DB'!$D$2:$D$9, 
       0)))) 

これは、あなたが持っている場合は、他の区切り文字を使用することができ、新しいDBの連結列が組織DBで見つけることができるかどうかによって、新しいDBの内容をフィルタリング|そこで。

+0

入力のおかげで@ロビン - テスト列を制限する、はい。結果の配列はすべての列を必要とするので、FILTER yesに渡された配列全体を使って答えをテストしますか? – DeeKay789

+0

はい、サンプルデータを使用しただけで、14個の列すべてを使用します –

関連する問題