[[20121211093542]] 『複数シートから検索及び抽出』(事務員M) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数シートから検索及び抽出』(事務員M)  

時々参考にさせて頂いております。

[[20121116110548]] 

上記、過去ログと似ていますが、うまく使う事が出来ず
新規に質問させて頂きます

入力11T ・ 入力21T ・ 入力31R ・ 入力41R という決まった名前のシートが4つあり
見出しも同じでデータを入力して行きます

	■入力11T シート								
	【A列】	【B列】	【C列】	【D列】	【E列】	【F列】	【G列】	【AD列】【AI列】
5	工場	月	日	番号	商品名	ロット	色合	数量計	合計
6	11T	4	1	152	A	7F	赤	320	4,525
7	11T	4	20	123	B	15F	茶	6,020	10,532
8	11T	5	2	235	C	4B	黒	7,364	30,523

	■入力21T シート								
	【A列】	【B列】	【C列】	【D列】	【E列】	【F列】	【G列】	【AD列】【AI列】
5	工場	月	日	番号	商品名	ロット	色合	数量計	合計
6	21T	4	3	223	A	10F	赤	2,330	8,235
7	21T	5	5	251	D	30F	赤	10,230	30,536
8	21T	5	10	238	E	5B	黒	3,000	6,300

A列・E列・AI列はIFを使った関数が入っています。
■入力31R シート
■入力41R シート
■その他集計シート・データベース等があります

各4シートを抽出シートにてA列からG列の間のセルに検索したい数字、文字を
入れ(工場・番号・商品名は入力規則でデータベースにて選ぶ)欲しいデータを抽出したい

	■抽出シート								
	【A列】	【B列】	【C列】	【D列】	【E列】	【F列】	【G列】		
1	工場	月	日	番号	商品名	ロット	色合		
2					A				
3							  【AD列】の数量 【AI列】の数量
4								↓	  ↓
5	工場	月	日	番号	商品名	ロット	色合	数量計	  合計
6	11T	4	1	152	A	7F	赤	320	  4,525
7	21T	4	3	223	A	10F	赤	2,330	  8,235
8									
9									

各入力シートは合わせると行数がかなりありEXCEL2002では行数をオーバーしてしまいます
質問の足りないところがありましたらすみません
どうかよろしくお願いしますm(__)m

Excel2002,WindowsXP


 マクロではないのですが・・・
 抽出シートの
 AD6セル =SUMIF(INDIRECT("入力"&$A6&"!E$5:E$1000"),$E$2,INDIRECT("入力"&$A6&"!AD$5:AD$1000"))
 AI6セル =SUMIF(INDIRECT("入力"&$A6&"!E$5:E$1000"),$E$2,INDIRECT("入力"&$A6&"!AI$5:AI$1000"))
 下にフィルコピー
 でも処理が重くなってしまうかな?

 (se_9)

 こんにちは

 「EXCEL2002では行数をオーバー」するとしたらどうしようも無いのでは?
 行数オーバーした場合にどうするのか決めないと。
(ウッシ)

(se_9)様、ウッシ様 早速のお返事ありがとうございますm(__)m

入力シートそれぞれのシートは行数をオーバーする事はありませんが
集約して検索しようとするとオーバーしてしまいます。
上記の過去ログにありますように、オートフィルターやフィルターオプションで
各シートを回しながら、抽出して検索シートに転記する方法(マクロ)などで出来ればと思っていますが
よい方法がありましたら よろしくお願いします。


 こんにちは
 各シートの3〜4行目は空白行として、
 Sub test()
    Dim v As Variant
    Dim k As Range
    Dim r As Range
    Set k = Worksheets("抽出").Range("A5:I5")
    Set r = k.Offset(1)
    Application.ScreenUpdating = False
    If k.CurrentRegion.Rows.Count > 1 Then
        Intersect(k.CurrentRegion, k.Offset(1).Resize(Rows.Count - k.Row)) _
            .ClearContents
    End If
    r.Value = k.Value
    For Each v In Array("入力11T", "入力21T", "入力31R", "入力41R")
        With Worksheets("抽出")
            Worksheets(v).Range("A5").CurrentRegion.AdvancedFilter _
                Action:=xlFilterCopy, _
                CriteriaRange:=.Range("A1:G2"), _
                CopyToRange:=r, _
                Unique:=False
            r.Delete xlShiftUp
            k.Copy .Range("A5").End(xlDown).Offset(1)
            Set r = .Range("A5").End(xlDown).Resize(, k.Columns.Count)
        End With
    Next
    r.Delete xlShiftUp
    Application.ScreenUpdating = True
    Set k = Nothing
    Set r = Nothing
End Sub
(ウッシ)

ウッシさん!早速ありがとうございます
頂いてすぐに試しましたが
実行時エラー”1004”
抽出した範囲にはフィールド名がないか、または無効な
フィールド名です。
↓の部分が黄色になっていました。

Worksheets(v).Range("A5").CurrentRegion.AdvancedFilter _

                Action:=xlFilterCopy, _
                CriteriaRange:=.Range("A1:G2"), _
                CopyToRange:=r, _
                Unique:=False

入力シートの3〜4行目は空白行としてありますが 5行目H列からAC列まで日付、数量と
項目が入っています。
試行錯誤しましたが、どうもエラーが出てしまいます。


 こんにちは

 AE5〜AH5には項目名が入ってないのですか?
(ウッシ)

項目名は入っています。項目下の入力するところは空白もあります。
ここに質問させて頂く前に1シートだけ検索するコードがありましのでそれを使っても
同じエラーが出たため、隠しシートに必要な所だけ転記して検索したところ出来ました。
1シートだけでは目的と違う為どうしても分からず質問させて頂きましたが・・・

お手数かけますm(__)m


 こんにちは

 隠しシート?
 何を言ってるのかわからないんですけど?

 決まった4シートのA5〜AI5には同じ項目名が入っているのが前提です。

 項目下の入力するところは空白?
 全くデータの入らない空白行があるのですか?

 1シートだけでは目的と違う?
 4シート処理するコードになっているはずですけど?

 (ウッシ)


ウッシさん説明が悪くてすみません(汗)
ここに質問させて頂く前の事です。

>決まった4シートのA5〜AI5には同じ項目名が入っているのが前提です。

はい! 決まった同じ項目です。

>全くデータの入らない空白行があるのですか?

はい! あります。

すみません説明不足でm(__)m


 こんにちは

 Sub check()
    Dim v As Variant
    Dim r As Range
    Dim c As Variant
    For Each v In Array("入力11T", "入力21T", "入力31R", "入力41R")
        For Each r In Union( _
                        Worksheets("抽出").Range("A1:G1"), _
                        Worksheets("抽出").Range("A5:I5"))
            c = Application.Match(r.Value, Worksheets(v).Range("A5:AI5"), 0)
            If IsError(c) Then
                MsgBox r.Address(0, 0) & ":" & r.Value & " 無し:シート名「" & v & "」"
            End If
        Next
    Next
End Sub
これで、項目名が各シートの項目と一致しているかチェックして下さい。

 項目名の相違が無ければ、
 Sub test1()
    Dim v As Variant
    Dim k As Range
    Dim r As Range
    Set k = Worksheets("抽出").Range("A5:I5")
    Set r = k.Offset(1)
    Application.ScreenUpdating = False
    If k.CurrentRegion.Rows.Count > 1 Then
        Intersect(k.CurrentRegion, k.Offset(1).Resize(Rows.Count - k.Row)) _
            .ClearContents
    End If
    r.Value = k.Value
    For Each v In Array("入力11T", "入力21T", "入力31R", "入力41R")
        With Worksheets("抽出")
            Intersect(Worksheets(v).UsedRange, _
                Worksheets(v).Rows(5).Resize(Rows.Count - 4)) _
                .AdvancedFilter _
                    Action:=xlFilterCopy, _
                    CriteriaRange:=.Range("A1:G2"), _
                    CopyToRange:=r, _
                    Unique:=False
            r.Delete xlShiftUp
            k.Copy .Range("A5").End(xlDown).Offset(1)
            Set r = .Range("A5").End(xlDown).Resize(, k.Columns.Count)
        End With
    Next
    r.Delete xlShiftUp
    Application.ScreenUpdating = True
    Set k = Nothing
    Set r = Nothing
End Sub
こちらを試して下さい。
 抽出シート名、入力4シート名は現状に合わせて変更して下さいね。
(ウッシ)

ウッシさん!! 出来ました!!ありがとうござますm(__)m
親切丁寧に教えてくださり感謝しています!
ほんとにありがとうございましたm(__)m


こんにちは、今頃ですみません(><;)
試した時うまく動き、それから少し間を置いて4月からの入力をようやくすませ実行しましたが

「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです」
がでて、デバッグを押すと

k.Copy .Range("A5").End(xlDown).Offset(1)

の部分がエラーになっています。

"入力11T"のデータと"入力11T"と同じ商品名があれば"入力21T〜入力51R"のデータは全部表示されますが
それ以外"入力21T〜入力51R"にしかない商品名を抽出するとエラー表示されてしまいます。
すみませんがもう一度ご教授お願いできますでしょうか?
よろしくお願いしますm(__)m


 こんにちは

 該当データの無いシートも有るんですね。

 Sub test2()
    Dim v As Variant
    Dim k As Range
    Dim r As Range
    Set k = Worksheets("抽出").Range("A5:I5")
    Set r = k.Offset(1)
    Application.ScreenUpdating = False
    If k.CurrentRegion.Rows.Count > 1 Then
        Intersect(k.CurrentRegion, k.Offset(1).Resize(Rows.Count - k.Row)) _
            .ClearContents
    End If
    r.Value = k.Value
    For Each v In Array("入力11T", "入力21T", "入力31R", "入力41R")
        With Worksheets("抽出")
            Intersect(Worksheets(v).UsedRange, _
                Worksheets(v).Rows(5).Resize(Rows.Count - 4)) _
                .AdvancedFilter _
                    Action:=xlFilterCopy, _
                    CriteriaRange:=.Range("A1:G2"), _
                    CopyToRange:=r, _
                    Unique:=False
            r.Delete xlShiftUp
            If .Range("A5").End(xlDown).Row < Rows.Count Then
                k.Copy .Range("A5").End(xlDown).Offset(1)
                Set r = .Range("A5").End(xlDown).Resize(, k.Columns.Count)
            Else
                Set r = k.Offset(1)
                r.Value = k.Value
            End If
        End With
    Next
    r.Delete xlShiftUp
    Application.ScreenUpdating = True
    Set k = Nothing
    Set r = Nothing
End Sub

 で試して下さい。
(ウッシ)


(ウッシ)さん!ありがとうございます!!
スムーズに処理する事が出来ましたm(__)m
気が早く説明不足な私に、何度もご教授頂きありがとうございましたm(__)m

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.