• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 複数のシートからデータの摘出)

エクセル複数のシートからデータの摘出

このQ&Aのポイント
  • エクセルの2010で複数のシートから重複データの抽出を行いたいです。
  • 具体的には、部署で検索条件を行い、現在は2種類の条件を持っていますが、将来的には30種類を超える予定です。
  • VBAを使用してマクロを組んでいますが、2003のエクセルでは上手く動作しません。20シートと30種類のマクロを組んで問題なく動作させたいです。

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

  • ベストアンサー
  • kikitaiOK
  • ベストアンサー率55% (10/18)
回答No.5

Sub オートフィルター() Dim R As Range For i = 1 To 3 With Sheets("Sheet" & i) .AutoFilterMode = False .Range("A1:D1").AutoFilter For k = 2 To 3 .Range("A1:D1").AutoFilter Field:=3, Criteria1:=Sheets("集計用").Range("B" & k).Value Set R = Sheets("集計用").Range("A65536").End(xlUp).Offset(1) .Range("A1").CurrentRegion.Copy R R.Resize(1, 4).Delete Shift:=xlUp .AutoFilterMode = False Next k End With Next i End Sub これでどうでしょうか? 参考URL http://officetanaka.net/excel/vba/tips/tips155c.htm

mirai5455
質問者

お礼

お返事遅れてすいません。 出来ました。 ありがとうございます。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

関数で処理することが途中のデータを見ることができるのでお勧めです。 次のようにシート21に作業列を使って対応します。 シート21での作業を示します。 A1セルにはシート名、A2セルにはデータ数、A3セルにはデータ総数とそれぞれ文字を入力します。 B1セルにはSheet1と入力してU1セルまでドラッグしてSheet20まで表示します。 B2セルには次の式を入力してU2セルまで横にドラッグコピーします。 =IF(ISERROR(INDIRECT(B$1&"!A1")),"",COUNTIF(INDIRECT(B$1&"!A2:A1000"),"*?")) B3セルには次の式を入力してU3セルまで横にドラッグコピーします。 =IF(B$2="","",SUM($B2:B2)) A4セルからD4セルまでに氏名、役職、部署、年齢の項目名を入力します。 A5セルには次の式を入力し、D5セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX($B$3:$W$3),"",IF(ROW(A1)<=$B$3,INDEX(INDIRECT($B$1&"!A2:D1000"),ROW(A1),COLUMN(A1)),INDEX(INDIRECT(INDEX($B$1:$W$1,MATCH(ROW(A1)-0.1,$B$3:$W$3,1)+1)&"!A2:D1000"),ROW(A1)-INDEX($B$3:$W$3,MATCH(ROW(A1)-0.1,$B$3:$W$3,1)),COLUMN(A1)))) E5セルには次の式を入力して下方にドラッグコピーします。 =A5&B5&C5&D5 F5セルには次の式を入力して下方にドラッグコピーします。 =IF(E5="","",IF(AND(COUNTIF(E$5:E5,E5)=1,COUNTIF(E:E,E5)>1),ROUNDDOWN(MAX(F$4:F4),-2)+100,IF(COUNTIF(E:E,E5)>1,INDEX(F$4:F4,MATCH(E5,E$4:E4,0))+COUNTIF(E$4:E4,E5),""))) 最後にお求めの重複データをH列からK列に表示させます。 H4セルからK4セルに項目名を並べます。 H5セルには次の式を入力してK5セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>INT(MAX($F$5:$F$1000)/100),"",INDEX($A:$D,MATCH(ROW(A1)*100,$F:$F,0),COLUMN(A1)))

mirai5455
質問者

お礼

お返事遅れてすいません。 出来ましたありがとうございます。 また、宜しくお願いします。

  • kikitaiOK
  • ベストアンサー率55% (10/18)
回答No.3

A、B、C・・・が列名 1、2、3・・・行名 各シート名は「Sheet1~Sheet20」 集計用シート名は「集計用」 とすると For i = 1 To 20 シートを増やす場合、この20を増やしたシート名の数字に変更すればよい With Worksheets(i)  シート名が「Sheet1~x」で統一されているのであれば  With Sheets("Sheet" & i)に変えたほうがいいかも? .AutoFilterMode = False .Range("A1:E1").AutoFilter  各シートの"A1:E1"でオートフィルタをするから  たぶん"A1:D1"の間違いでは? For k = 2 To 3  次の集計シート検索条件のある「行番号」を指定してあると思いますので  検索条件が増えればそのぶんこの3を増やしてあげれいいと思います。 .Range("A1:E1").AutoFilter Field:=5, Criteria1:=Range("B" & k).Value  "A1:D1"の間違い?であってれば、部署があるのは左から3番目の列だからField:=3  検索条件の  Range("B" & k).valueの部分も  Sheets("集計用").Range("B" & k).value  にしたほうが後から見て分かりやすいと思います。   .Range(.Range("A2"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A65536").End(xlUp).Offset(1) .AutoFilterMode = False Next k End With Next i End Sub これでとりあえず検索条件のデータは集計用のシートに出てくるようになるはずです。 このあとどのように重複チェックされてるのかはわかりませんが・・・

mirai5455
質問者

お礼

ありがとうございます。 ご指摘の所間違っていました。 これでは質問する以前の話ですね・・・ とりあえず2010では摘出出来るので 作業を進めています。 もしよければもう一つ シートに摘出データが存在しないと 項目だけ摘出されてしまいます。 いい方法はなでしょうか? わがままですいません。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.2

とりあえず、1回マクロの記録で、所望の操作をマクロとして保存してください。 そうすると、autofilterのfieldやcriteriaの使い方が理解できるようになると思います。

mirai5455
質問者

お礼

アドバイスありがとうございます。 時間があればゆっくり勉強したいのですが・・・ もし解るのであればVBAの答えを いただけたら幸いです。 又早いお返事ありがとうございます。

回答No.1

マクロなど難しいことはわかりませんが、参考になりそうなURLを貼っておきます。 エクセルで複数ファイルからデータを参照する時 http://okwave.jp/qa/q7507749.html excel 複数ブック・シートからのデータ抽出 http://okwave.jp/qa/q7989857.html 複数のエクセルファイルからデータ抽出とまとめる方法について。 http://okwave.jp/qa/q3681193.html

mirai5455
質問者

お礼

アドバイスありがとうございます。 なかなか自分にピッタリと合うのが・・ 色々と迷っています。 応用力が乏しいものですいません。 ご回答いただきありがとうございます。

関連するQ&A