- ベストアンサー
Excelでのシート間でのデータ統合方法
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
商品IDがSheet1とSheet2で同じものばかりなら、直接関数VLOOKUPでやるのも良いが、まずSheet1とSheet2の商品IDの出現ID一覧を作る必要がある。 Sheet2のID列をSheet1のあとに貼り付けて(*) Sheet3において データーフィルターフィルタオプションの設定ー 指定した範囲をON リスト範囲 Sheet1!A1:A7(データ数で変わる) 検索条件範囲 空白 抽出範囲 $A1:$A$13(余分目に指定しておく) 重複するレコードは無視する(ここが肝心)にチェック OK で 商品ID 111 112 115 113 のようなIDの一覧が出来る。 基データ Sheet1 商品ID 購入日 111 1月1日 112 1月5日 115 1月29日 Sheet2 商品ID 購入者 111 田中 113 山田 115 鈴木 と仮定して。 ーー A列で貼り付けた部分を抹消する(上記*)。 ーー Sheet3のB2の式を =VLOOKUP($A2,Sheet1!$A$1:$B$4,2,FALSE) C2の式を =VLOOKUP($A2,Sheet2!$A$1:$B$4,2,FALSE) 結果 商品ID 購入日 購入者 111 1月1日 田中 112 1月5日 #N/A 115 1月29日 鈴木 113 #N/A 山田 #N/Aがイヤなら式を 購入者の列の例では =IF(ISERROR(VLOOKUP($A2,Sheet2!$A$1:$B$4,2,FALSE)),"",VLOOKUP($A2,Sheet2!$A$1:$B$4,2,FALSE)) のようにする。
その他の回答 (4)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.3です。 Sheet3のA2セルに入力する数式を次の様な数式としますと、作業列が不要となり、Sheet4を設ける必要が無くなります。 =IF(MAX(A$1:A1)>=MAX(Sheet1!$A:$A,Sheet2!$A:$A),"",IF(ROWS($2:2)=1,MIN(Sheet1!$A:$A,Sheet2!$A:$A),MIN(IF(A1>=MAX(Sheet1!$A:$A),9E+99,SMALL(Sheet1!$A:$A,COUNTIF(Sheet1!$A:$A,"<="&A1)+1)),IF(A1>=MAX(Sheet2!$A:$A),9E+99,SMALL(Sheet2!$A:$A,COUNTIF(Sheet2!$A:$A,"<="&A1)+1))))) Sheet3のB2セルとC3セルに入力する関数は、ANo.3と同様です。
お礼
ご丁寧にありがとうございます。 コピーペーストしてもなぜか数字が表示されず断念しました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
VLOOKUP関数を使うことで容易に対応できるのですが問題はIDを自動的に整理し表示させることですね。 ここではIDはお示しのように必ず数値として入力している場合ですが次のようにすればよいでしょう。 例えばシート3のE列を作業列としてE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)<=COUNT(Sheet1!A:A),SMALL(Sheet1!A:A,ROW(A1)),IF(ROW(A1)<=(COUNT(Sheet1!A:A)+COUNT(Sheet2!A:A)),SMALL(Sheet2!A:A,ROW(A1)-COUNT(Sheet1!A:A)),"")) お求めの表ですがシート3のA1セルには商品ID、B1セルには購入日、C1セルには購入者の文字列があるとします。 A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)=1,MIN(E:E),IF(MAX(A$1:A1)=MAX(E:E),"",SMALL(E:E,COUNTIF(E:E,"<="&A1)+1))) B2セルには次の式を入力して下方にオートフィルドラッグします。なお、B列のセルの表示形式は日付を設定します。 =IF(OR(A2="",COUNTIF(Sheet1!A:A,A2)=0),"",VLOOKUP(A2,Sheet1!A:B,2,FALSE)) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(A2="",COUNTIF(Sheet2!A:A,A2)=0),"",VLOOKUP(A2,Sheet2!A:B,2,FALSE))
お礼
ご丁寧にありがとうございます。 コピーペーストしてもなぜか数字が表示されず断念しました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
もし、商品IDが数字のみで、アルファベット等の文字が含まれてはいない場合には、以下の様な方法があります。 まず、適当な空きシート(ここでは仮にSheet4を使用するものとします)のA2セルに次の数式を入力して下さい。 =IF(ISNUMBER(INDEX(Sheet1!$A:$A,ROW())),INDEX(Sheet1!$A:$A,ROW()),"") 次に、Sheet4のB2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX(Sheet2!$A:$A,ROW())),COUNTIF($A:A,INDEX(Sheet2!$A:$A,ROW()))+COUNTIF(B$1:B1,INDEX(Sheet2!$A:$A,ROW()))=0),INDEX(Sheet2!$A:$A,ROW()),"") 次に、Sheet4のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 次に、Sheet3のA2セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet4!$A:$B),"",SMALL(Sheet4!$A:$B,ROWS($2:2))) 次に、Sheet3のB2セルに次の数式を入力して下さい。(Sheet3のB2セルの書式はSheet1のB2セルと同じ書式として下さい) =IF(OR($A2="",COUNTIF(Sheet1!$A:$A,$A2)=0),"",VLOOKUP($A2,Sheet1!$A:$B,2,FALSE)) 次に、Sheet3のC2セルに次の数式を入力して下さい。 =IF(OR($A2="",COUNTIF(Sheet2!$A:$A,$A2)=0),"",VLOOKUP($A2,Sheet2!$A:$B,2,FALSE)) 次に、Sheet3のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 これで、統合された表が自動的に作成されます。
- hallo-2007
- ベストアンサー率41% (888/2115)
Vlookup関数はこういったときに使います。 Sheet3のB2セルに =Vlookup(A2,Sheet1!A:B,2,False) Sheet1のA:B列で、左端(つまりA列)を検索して 合致した行の 2番目の列 といった意味です。 C2セルも同様で =Vlookup(A2,Sheet2!A:B,2,False) で行けるはずです。
お礼
Vlookup関数勉強になりました。ありがとうございます。
お礼
IDの整理からすべてうまくいきました。数式ををいじることで他の項目も追加で来て思っていた結果が得られました。ありがとうございました。