2つの別々のシートを行ごとに比較し、3番目のシートに等しくない行を表示しようとしています。例として、Sheet1
の3行目と5行目はSheet2
とは異なり、Sheet3
にのみ表示したいと思います。
SHEET1 SHEET2
A B C A B C
1 INT STR BOOL 1 INT STR BOOL
2 1 A TRUE 2 1 A TRUE
3 2 B FALSE 3 2 B TRUE
4 3 C TRUE 4 3 C TRUE
5 4 D FALSE 5 C 3 FALSE
だから私はSheet3
を見てほしい:
SHEET3
A B C
1 INT STR BOOL
2 2 B FALSE
3 4 D TRUE
現在、私が使用している式は次のとおりです。
=ARRAYFORMULA(FILTER(IMPORTRANGE("URL1","A2:C5"), IMPORTRANGE("URL1","A2:C5")<>IMPORTRANGE("URL2","A2:C5")))
上記の式では、簡潔にするために「URL1」と「URL2」の代わりに適切なリンクが使用されています。この式は、説明とともに#VALUE
エラーを与えています:
FILTERの範囲は、単一行または単一列でなければなりません。
誰もこれを修正する方法を知っていますか?
式filter
は一方向にのみソートされます。 2番目の引数はブール値の1次元の範囲でなければなりません。したがって、列を個別に比較する必要があります。これは、すべてのimportrange
sですぐに見苦しくなります。
(IMPORTRANGE("URL1","A2:A5")<>IMPORTRANGE("URL2","A2:A5")) + (IMPORTRANGE("URL1","B2:B5")<>IMPORTRANGE("URL2","B2:B5")) + (IMPORTRANGE("URL1","C2:C5")<>IMPORTRANGE("URL2","C2:C5"))
したがって、代わりに query
を使用することをお勧めします。これにより、より複雑なクエリが可能になります。 query
の最も重要な制限は、各列の内容が同じ型でなければならないことです(他の型はNULL値として扱われます)。 INT、STR、BOOLから、これが事実であるというデータを収集します。したがって、クエリは次のようになります。
=query({IMPORTRANGE("URL1","A2:C5"), IMPORTRANGE("URL2","A2:C5")}, "select Col1, Col2, Col3 where Col1 <> Col4 or Col2 <> Col5 or Col3 <> Col6")
ここでは、最初の引数は2つの配列の結合として取得されるため(同じ行数でなければなりません)、6つの列があります。 2番目の引数はクエリ文字列です。
= ArrayFormula( {Headers; FILTER(Sheet1、 ISNUMBER( MATCH( Transpose(QUERY(Transpose( Data1), 1E + 100))、 Transpose(QUERY(Transpose(Data2), 1E + 100))、 0 ) ) ) } )
数式が機能しない場合は、エラーが発生している場所を見つけやすくするために、数式を単純化する必要があります。
OPによって公開されている場合、スプレッドシートの別の部分に移動するように、IMPORTRANGE
部分を式から移動できます。
この回答では、次の名前を使用して式を読みやすくします。
IMPORTRANGE("URL1","A2:C5")
によって返されるデータです。これには、3つの列と3つの行があります。IMPORTRANGE("URL2","A2:C5")
によって返されるデータです。これには、3つの列と3つの行があります。OPによって公開される式の簡略版は
=FILTER(SHEET1,SHEET1<>SHEET2)
OPによって報告されるエラーは、FILTERの2番目の引数が1列(n X 1、nは行数)の配列でなければならないために発生します。
この問題を解決する1つの方法は、列を連結することです。そのため、この回答では、次の構成を使用することを提案します。
Transpose(QUERY(Transpose(Data1),,1E+100))
上記の構成は、ヘッダーとして宣言された行を連結するQUERY
の機能を利用します。最初の内部Transpose
は行を列にし、ヘッダーとして処理します。 2番目の引数は空で、3番目の引数は、すべての行(この場合はData1のすべての列)を包含するために十分な大きさです。外側のTranspose
は、QUERY
の結果が1列の配列になります。
配列式で<>
のようなコンパレーターを使用すると、行ごとに比較されますが、SHEET1とSHEET2に異なる行数があると仮定すると、代わりにMATCH
を使用する方が適切です。
ISNUMBER
は、数学が見つかったときにTRUE
を返し、それ以外の場合はFALSE
を返します。配列を引数として使用すると、各セルに対して単一の結果が返されるため、この場合は3 X 1配列を返します。
短い回答のセクションで提案されている式は、任意の数の列と行のソース配列に簡単に適応できます。要件は、SHEET1とSHEET2の列数が同じであることです。