• ベストアンサー

EXCEL2003 複数シートから抽出したいです

1つのブックに1ヶ月の日数分のシートがあります。(約30シート) それぞれのシートのデータは、 1水(sheet名)   A B…  P   Q   R    S  1       りんご 4つ  300円 2       みかん 3つ  500円 3       りんご 5つ  400円 4       バナナ 1つ  100円 …       …   …   … 2木(sheet名)   A B…  P   Q   R    S  1       ぶどう 4つ  300円 2       みかん 3つ  500円 3       りんご 2つ  200円 4       バナナ 1つ  100円 …       …   …   … の様なデータが入力されています。 それぞれ複数のシートのデータの中から、りんごだけを集め集計用のシートに以下の様に表示したいです。 集計用sheet   A   B   C   D 1 1水  りんご 4つ  300円 2 1水  りんご 5つ  400円 3 2木  りんご 2つ  200円       4        …  …   …   … 関数でもVBAでもいいので、複数のシートから抽出することは可能でしょうか? どなたかわかるかた教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • z1rcom
  • ベストアンサー率57% (11/19)
回答No.7

今度こそ..大丈夫だと思います。 集計用シート名、検索範囲、結果表示の左上角、検索文字列を編集できます。 例えば、検索文字列に「ぶどう」を追加する場合はこのようになります。 If s(i, 1) = "りんご" Or s(i, 1) = "ぶどう" Then '検索文字列 ここだけは注意して下さい。 Sub りんご抽出コード() Dim i, j, k, l, m, n, o, y, z, r, t As Long Dim s, A, B, sn, x As Variant Dim shn1, shrange As String Dim p, q As Byte shn1 = "集計用sheet" '集計用シート名 shrange = "P1:S65536" '検索範囲(全て半角) wrrange = "B4" '結果表示の左上角 x = Split(shrange, ":") '検索範囲を分割 For q = 0 To 1 For p = 1 To Len(x(q)) If IsNumeric(Mid$(x(q), p, 1)) = False Then If q = 1 Then y = Mid$(x(0), p + 1) Else: z = Mid$(x(1), p + 1) End If Next p Next q k = Range(shrange).Columns.Count ReDim B(Worksheets.Count) 'シート名を取得 For Each sn In Worksheets i = i + 1: B(i) = sn.Name Next sn ReDim A(z - y + 1, k + 1) 'りんごの行を配列に格納 For m = 1 To Worksheets.Count - 1 If B(m) = shn1 Then GoTo 1 s = Sheets(B(m)).Range(shrange) For i = 1 To z - y + 1 If s(i, 1) = "りんご" Then '検索文字列 j = j + 1: A(j, 1) = B(m) For l = 1 To k A(j, l + 1) = s(i, l) Next l End If Next i 1 Next m With Range(wrrange) r = .Row - 1: t = .Column - 1 End With For o = 1 To k + 1 'セルに書き込み For n = 1 To z - y + 1 If A(n, 1) = "" Then Exit For Sheets(shn1).Cells(n + r, o + t) = A(n, o) Next n Next o End Sub

その他の回答 (6)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

回答番号:No.2 です。 「りんご」があるのはP列でいいんですよね? それなら以下でもう一度お試しください。 P列でないならそう言ってください。 Sub test02() Dim st As Worksheet Dim r As Long, x As Long For Each st In Worksheets If st.Name <> "集計用" Then st.Activate With ActiveSheet .AutoFilterMode = False .Rows("1:1").Insert Shift:=xlDown .Range("A1:S1").AutoFilter .Range("A1:S1").AutoFilter Field:=16, Criteria1:="りんご" r = .Cells(Rows.Count, "P").End(xlUp).Row On Error Resume Next .Range(.Cells(2, "P"), .Cells(r, "S")).SpecialCells(xlCellTypeVisible).Copy On Error GoTo 0 x = Sheets("集計用").Cells(Rows.Count, "B").End(xlUp).Row If x > 1 Then x = x + 1 Sheets("集計用").Cells(x, "A").Value = ActiveSheet.Name Sheets("集計用").Cells(x, "B").PasteSpecial Application.CutCopyMode = False .AutoFilterMode = False .Rows("1:1").Delete End With End If Next Sheets("集計用").Activate End Sub

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

#1です。 >しかし、他検索の拡張性はあった方がいいです。 INPUTBOX等で値の取得をして下さい。 あと1行目に項目行はないのかな? ⇒あればAutoFilter等使えそうなんですけど。 それとデータ範囲(列)がわかりにくいのですが。。。

  • z1rcom
  • ベストアンサー率57% (11/19)
回答No.4

No.3の回答者です。おかしなところがあったので、修正しました。 Sub りんご抽出コード() Dim i, j, k, l, m, n, o As Long Dim S, A, B, sn As Variant ReDim B(Worksheets.Count) For Each sn In Worksheets i = i + 1 B(i) = sn.Name Next sn k = 3 ReDim A(65536, k) For m = 1 To Worksheets.Count If B(m) = "集計" Then GoTo 1 S = Sheets(B(m)).Range("B1:D65536") For i = 1 To 65536 If S(i, 1) = "りんご" Then j = j + 1 A(j, 1) = B(m) For l = 2 To k A(j, l) = S(i, l) Next l End If Next i 1 Next m For o = 1 To k + 1 For n = 1 To 65536 If A(n, 1) = "" Then Exit For With Sheets("集計") Select Case o Case 1 .Cells(n, 1) = A(n, 1) Case 2 .Cells(n, 2) = "りんご" Case Else .Cells(n, o) = A(n, o - 1) End Select End With Next n Next o End Sub

prtcw794
質問者

補足

回答2例ありがとうございます! 上記を試したのですが機能しません…。 実行すると、砂時計マークは表示ているので、計算はしているみたいなのですが、計算結果がなにも表示されません。 なにか問題があるのでしょうか? 下記の方がほぼ完璧に動作しました。 計算スピードも実用性があり、大変満足です。 しかし、もう少し質問があります。 表示用シートに (1)他シートのPからRでなく、PからSまでを検索したい (2)検索結果の表示をA1からでなくB4から表示したい すみませんが宜しくお願いします。

  • z1rcom
  • ベストアンサー率57% (11/19)
回答No.3

独学なのでおかしなところがあるかもしれませんが、動作確認はしました。 Sub りんご抽出コード() Dim i As Long, j As Long, k As Long, l As Long, m As Long, _ S As Variant, A As Variant, B As Variant, sn As Worksheet ReDim B(Worksheets.Count) For Each sn In Worksheets i = i + 1 B(i) = sn.Name Next sn k = 3 'PからRなので3です。 ReDim A(65536, k) For m = 1 To Worksheets.Count S = Sheets(B(m)).Range("P1:R65536") For i = 1 To 65536 If S(i, 1) = "りんご" Then j = j + 1 A(j, 1) = B(m) For l = 2 To k A(j, l) = S(i, l) Next l End If Next i Next m For o = 1 To k For n = 1 To 65536 If A(n, o) = "" Then Exit For Sheets("集計").Cells(n, o) = A(n, o) Next n Next o End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Sub test01() Dim st As Worksheet For Each st In Worksheets If st.Name <> "集計用" Then st.Activate With ActiveSheet .AutoFilterMode = False .Rows("1:1").Insert Shift:=xlDown .Range(.Range("A2"), .Range("A2").End(xlToRight)).Offset(-1).AutoFilter .Range(.Range("A2"), .Range("A2").End(xlToRight)).AutoFilter Field:=16, Criteria1:="りんご" On Error Resume Next .Range(.Range(.Range("P2"), .Range("P2").End(xlDown)), .Range(.Range("P2"), .Range("P2").End(xlDown)).End(xlToRight)).SpecialCells(xlCellTypeVisible).Copy On Error GoTo 0 x = Sheets("集計用").Cells(Rows.Count, "B").End(xlUp).Row If x > 1 Then x = x + 1 Sheets("集計用").Cells(x, "A").Value = ActiveSheet.Name Sheets("集計用").Cells(x, "B").PasteSpecial Application.CutCopyMode = False .AutoFilterMode = False .Rows("1:1").Delete End With End If Next Sheets("集計用").Activate End Sub

prtcw794
質問者

補足

回答ありがとうございます。 しかし、 Range(.Range("A2"), .Range("A2").End(xlToRight)).AutoFilter Field:=16, Criteria1:="りんご" のところでエラーになってしまいます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>りんごだけを集め集計用のシートに ”りんご”だけでよいのですか。 例えば、次は”みかん”その次は”バナナ”と言う事はないですか。

prtcw794
質問者

補足

ありがとうございます。 とりあえずは”りんご”だけでOKです。 しかし、他検索の拡張性はあった方がいいです。

関連するQ&A

  • Excel2003 複数の条件を満たすデータを抽出する関数を教えて下さ

    Excel2003 複数の条件を満たすデータを抽出する関数を教えて下さい! 下のデータで、A列でB、B列で赤を選んだ人は「みかん」という「みかん」を抽出する関数を教えて頂けませんでしょうか? データシートとは別に集計シートを作成しています。 お忙しい中恐れ入りますが、ご教示下さいますようお願い申し上げます。。。 ●データ A B C 1 A 赤 みかん 2 B 赤 りんご 3 C 白 いちご 4 B 青 いちご 5 D 赤 みかん 6 A 青 みかん 7 C 黄 りんご 8 E 赤 バナナ

  • 【Excel - 関数】各商品の週ごとの売上合計個数を別のシートに出したい

    関数の設定方法について教えて頂けますでしょうか。 【シートA】のデータから【シートB】のようなレイアウトでデータを求めたい場合、 どのような関数を設定すれば良いのでしょうか。 各商品の週ごとの売上個数を出して、手動でシートBに貼り付けている状況です。 どのような関数を設定したら良いのか検討がつかず、困っています。 恐れ入りますが、ご教示頂けますでしょうか。どうぞ宜しくお願い致します。 【シートA】 A      B     C     D     E 1      第1週  第2週  第3週  第4週 2 りんご   0     1     0     1 3 りんご   1     0     1     0 4 りんご    1     1     1     1 5 りんご   1     0     0     0 6 バナナ   0     1     0      1 7 バナナ   1     0     1     0 8 バナナ   1     1     1     1 9 みかん   1     0     0     0 10 みかん  0     1      0     1 【シートB】 A      B      C         D 1       りんご   バナナ  みかん 2 第1週合計  3    2     1 3 第2週合計  2    2     1 4 第3週合計  2    2     0 5 第4週合計  2    2     1 6 合計      9     8     3

  • エクセルのデータ抽出lで困っています

    集計方法で悩んでいます。 日にち毎に売れた項目だけを抜き出して表にまとめたいのですがうまく行きません。 集計ではその日に売れなかった品目は除きたい。 売れた品目と個数をそれぞれ書きたい。 の2点をどうしたらできるのか押していただけると助かります。 尚エクセルのバージョンは2003です。 元データ   A    B   C   D 1 品目  1日 2日 3日 ・・・ 2 りんご 10     5 3 みかん 20 10   4 バナナ     5  8 5 キウイ 15     集計結果 1日        2日       3日 りんご 10    みかん 10   りんご 5 みかん 20    バナナ  5   バナナ 8 キウイ 15 その日に売れなかった品目は除きたい。 売れた品目と個数をそれぞれ書きたい。

  • 複数のシートの合計

    3つシートがあります。 各シート、A列にA01,A02・・・B05・・・などの番号が入力されています。平均300行くらいです。 ただし、各シートの番号は全く同じではなく、例えばsheet1と3にはF45があってもsheet2にはない、といった感じです。 そして、このA列に対してB、C、D列にはカテゴリわけされて数字が入っています。 たとえばりんご、みかん、バナナとあり、A01のりんごは5、みかんは0、バナナは5個といった感じです。 このシートを1つに重複せずにまとめたいのです。 例えばsheet1-3のA02のりんごの合計は5、E06のバナナの合計は1といった感じです。 一度A列を別シートに全て貼り付け、フィルタオプションで重複を除き、その後、VLOOKUPで各シート抽出し、その合計を出す、とやっていたのですが、#N/Aが出てしまい、値に直そうにもフィルタがかかっていてさらに別シートに貼り付けなおして・・・とやっているのですが、あまりにも時間がかかり(同じようなファイルが50個近くある)、もっと効率のいい方法があったら教えてほしいです。

  • Excelで複数条件で抽出した複数データを出力

    Excelで複数条件で抽出した複数データを出力したい Shett1のセルAとセルBの複数条件で、Sheet2を検索し一致したSheet2のセルCを Sheet1の該当するセルCに入れたいのです。 それを関数でするのはどうしたらいいのでしょうか? Sheet1 A B NAME ID(タイトル) いちご A01 いちじく A02 かき B01 すいか C01 なし D01 ぱいなっぷる E01 ばなな E02 ぶどう F01 みかん G01 めろん H01 もも I01 りんご J01 Sheet2 A B C 名前 ID 漢字(タイトル) みかん G01 蜜柑 いちご A01 苺 ぶどう F01 葡萄 りんご J01 林檎 もも I01 桃 かき B01 柿 なし D01 梨 すいか C01 西瓜 いちじく A02 無花果

  • Excel関数について

    A B 1 担当者 品名 2 東 みかん 3 南 りんご 4 西 バナナ 上記のシートの(担当者)東が(品名)みかんを販売した数を別シートで集計する場合どういった計算式になりますか? ご返答宜しくお願いします!!

  • EXCEL VBA 複数シート選択の方法(VBA)

    エクセルのシート選択方法について教えてください。 選択対象シート数は4つ(シート名は、「りんご」「みかん」「ばなな」「すいか」とします) シート名「表紙」のセルは A1:りんご A2:みかん A3:ばなな A4:すいか となっており、使用者はB1~B4セルに「○」「×」を入力し、 「○」となっているシートのみ選択出来るようにしたい。 シート名が「sheet1~4」のように連続するシート名である場合や、 ひとつの条件に当てはまるシートを複数選択する方法は 他サイトでも見つけることが出来たのですが、このような場合は どのようにすれば良いのでしょうか?

  • VLOOKUPのような検索で複数ヒットしたら全て抽出したい

    Sheet1      A    B       1. 600円 イチゴ       2. 550円 みかん       3. 380円 イチゴ       4. 400円 りんご       5. 650円 イチゴ       6. 250円 りんご Sheet2      A ......B........C..........D..........E       1. イチゴ 600円 380円 650円       2. みかん 550円       3. りんご 400円 250円 Sheet2のA1イチゴでSheet1のB列検索して、ヒットしたA列の値段をSheet2のB1に表示する。この時、検索結果が複数あった場合、2個目をC1 3個目をD1に表示する。(max10個入れたいです) 次はA2のみかんで検索する。 イチゴのような種類が2000個あるので関数で自動検索したいのですが よろしくお願い致します。

  • エクセルで2枚のシートをリンクさせたい。

    エクセルで2枚のシートがあるのですが、 シート1  |  A  |  B  | 1| 001 | りんご | 2| 002 | みかん | 3| 003 | バナナ | 4| 004 | ぶどう | シート2  |  A  |  B  | 1| 002 | 50円 | 2| 005 | 60円 | 3| 004 |100円 | 4| 003 |200円 | 5| 001 |300円 | を シート3に A列の数字が同じものをリンクさせ  |  A  |  B  |  C  | 1| 001 | りんご | 300円| 2| 002 | みかん |  50円| 3| 003 | バナナ | 200円| 4| 004 | ぶどう | 100円| のようにシート1とシート2の内容を結合させたいのですが、 どのような 計算式をいれたらよいのでしょうか? できれば シート1に シート2のB列が シート3のC列にくるようにしたいのですが。 うまく説明できなくて大変申し訳ございません。 使用ソフトはExcel2003です。 なにか説明などで 足りないことや不備がありましたら、大変申し訳ございませんが教えて下さい。  

  • エクセル のマクロで 複数の表を1つにまとめたい

    エクセル のマクロで 複数の表を1つにまとめたい 下記のようなシートがあります。 Sheet1 A B C E F G I J K 1 日付  品名 数 日付  品名 数 日付  品名 数 2 1/1  みかん 100 1/2 りんご 50 1/1 バナナ 30 3 1/5  みかん 50 1/6 りんご 25 1/7 バナナ 20 4 1/10 みかん 30 1/11 りんご 15 1/10 バナナ 10 5 1/12 りんご 30 1/11 バナナ 10 6 1/13 りんご 50 みかん・りんご・バナナのそれぞれの表をマクロで下記のような1つの表ににまとめたいのですが どのようにしたら良いかご教授お願いいたします。 (初心者なので可能であればマクロ内で’コメント付きで解説いただけると助かります)  M N O 1 日付 品名 数 2 1/1 みかん 100 3 1/1 バナナ 30 4 1/5 みかん 50 5 1/6 りんご 25 6 1/7 バナナ 20 7 1/10 みかん 30 8 1/10 バナナ 10 9 1/11 りんご 15 10 1/11 バナナ 10 11 1/12 りんご 30 12 1/13 りんご 50 うまく説明できないのでイメージ画像を添付いたします。

専門家に質問してみよう