• 締切済み

マクロでマスタ表からフィルタ表と同じデータ抽出

仕事で不定期ですが月に4~5回マスタ表が届きます。 その表から私の担当している部品のみ抽出するフィルタ表があり 素人ながら簡単な録画マクロで処理を行っています。 (マスタ表から抽出フィルタを使いフィルタオプションで抽出して新しいシートに出力) 但し、毎回マスタ表の最終セルの座標をマクロの編集で記載してから実行しており何とか自動で最終セルを認識してくれないかと色々調べましたが思うように動いてくれません。 マスタ表は毎データ行数列数はバラバラですが部品番号などの位置はフォーマットとして共通です。約18000行で列は8行~23行 抽出用の担当フィルタは私が担当している部品で約500点ほどで不定期メンテナンスしており増減します。 本来であれば現在のマクロのソースを記載したいのですが会社にファイルがあるので一旦書き込みだけいたします。

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

回答No.3です。 範囲指定した方が、精神衛生上、良い、という方のために。 Option Explicit Sub Test() Dim s1, s2, s3 As Worksheet Dim f As Object Dim i, r As Long Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) r = s1.Range("A1").End(xlDown).Row For i = 2 To s2.Range("A1").End(xlDown).Row Set f = s1.Range("A1:A" & r).Find(s2.Cells(i, 1).Value) s1.Range("A" & f.Row & ":E" & f.Row).Copy s3.Range("A" & i) Next i End Sub 特別、説明は必要ないと思います。 前提条件等は、すべて「回答No.2」と同じです。

全文を見る
すると、全ての回答が全文表示されます。
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

極めて単純なマクロの考え方です。 参考になれば、使ってください。 前提条件は、左端のシートが「マスタ」、左から2番目が「フィルタ」(「部品番号」のみ)、左から3番目が「抽出結果」です。 「A」列が部品番号で、部品番号を検索して処理しています。 Option Explicit Sub Test() Dim s1, s2, s3 As Worksheet Dim f As Object Dim i As Long Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) For i = 2 To s2.Range("A1").End(xlDown).Row Set f = s1.Range("A:A").Find(s2.Cells(i, 1).Value) s1.Rows(f.Row).Copy s3.Range("A" & i) Next i End Sub マクロの説明です。 Set s1 = Worksheets(1) Set s2 = Worksheets(2) Set s3 = Worksheets(3) それぞれのシートを、左端から「s1」、「s2」、「s3」にセットしています。 For i = 2 To s2.Range("A1").End(xlDown).Row 2番目のシート(「フィルタ」)の「A」列の最終行を取得しています(途中空白なしを前提)。 Set f = s1.Range("A:A").Find(s2.Cells(i, 1).Value) 1番目のシート(「マスタ」)の「A」列すべてを範囲指定して、2番目のシートの「部品番号」を1つずつ、「マスタ」シートから検索します。 s1.Rows(f.Row).Copy s3.Range("A" & i) 検索によって得られた行(「f.Row」に何行目にその部品番号があったか入っています)の1行をコピー(記憶)し、3番目のシート(「抽出結果」)にペーストしています。 このマクロの場合、最終行の取得は、「フィルタ」のみ行っています。 よく、「Find」の「Range」指定で、正確に範囲指定されておられるのをよく見受けますが、「A」列全体を範囲指定も、処理時間に差はありません。 このマクロの最大の問題は、「Find」によって、見つからないときの処理がないことです。 あくまで、「フィルタ」にある「部品番号」は、必ず「マスタ」にも存在する、ということを前提条件としています。

全文を見る
すると、全ての回答が全文表示されます。
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは 元データのシート名が「照合表マスタ」として 数式タブの名前に定義で「マスタ」という名前で、範囲に =INDIRECT("照合表マスタ!$A$1:$E"&COUNTA(INDIRECT("照合表マスタ!$A:$A"))) と設定して保存し、記録したフィルタのデータ範囲を   Range("マスタ").AdvancedFilter Action:=xlFilterCopy, ~ のように変更してみて下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • okwtun
  • ベストアンサー率14% (2/14)
回答No.1

最終セルを知りたい場合、 最終行のセルを MaxRow 最終列のセルを MaxCol とすると ' 行や列に抜けが無い場合は先頭から調べていけばわかります。 ' 上から順に空白セルまで調査 MaxRow = Range("A1").End(xlDown).Row MaxCol = Range("A1").End(xlToRight).Column ' ' 行や列に抜けがある場合は最終から調べていけばわかります。 ' 下から順に空白セルまで調査 MaxRow = Cells(Rows.Count, 1).End(xlUp).Row MaxCol = Cells(1, Columns.Count).End(xlToLeft).Column

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルでのオートフィルタに関して(マクロ)

    1行目にタイトルがある表がありましてその表に オートフィルタを掛けて条件を複数指定して検索・・・ここまで手作業。 その後マクロでヒットした行をコピーして別のシートにコピーしたり、ということを行っています。 もともとの表のデータ数は日々増減していて ほしい行の行数も毎回変わってきます。 検索した行をコピーするために選択すると Rows("2809:2809").Select こんな具合に 行番号で指定されるのでデータ数が増減すると うまくいきません。 検索条件を指定して検索した行を うまくマクロで指定することは出来るのでしょうか? 良い方法がありましたら御教授願います。 もう一点ですが 自動記録でオートフィルタの画面を開いたままでは「記録終了」できないですよね? マクロでフィルタ画面を開いて 検索条件を指定するところから手作業でするのは可能でしょうか? あわせてよろしくお願いします。

  • フィルタオプションをマクロで

    マクロ初心者です。 フィルタオプションをマクロに登録しました。 検索範囲はマクロを登録したときの表の範囲(A5:Q50)になっていますが データは毎日増えるため(A5:Q10000)に変更して抽出自体はうまくいきましたが、 リストで最終行に金額の合計を出しているのですがそれが表示されなくなります。 抽出時の最終データでフィルタオプションを実行するマクロをするにはどうしたらよいでしょうか? 質問がわかりにくくてすみません。 フィルタオプションの部分のマクロは下記です。 よろしくお願いいたします。 Range("A5:Q10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1:B3"), Unique:=False

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • マクロについて質問です。

    B4からD8までの表がありB2のセルに3行と入力すると表の行数が3行にかわり4行と入力すると表の行数が4行に変わるようなマクロを作りたいと思っています。 行の非表示で考えていましたが、なかなかうまくつくれません。 B2セルに入力するごとに行数が変わるようなマクロを詳しく教えていただけないでしょうか。

  • VBA フィルターで抽出したデータを別のファイルの

    VBA フィルターで抽出したデータを別のファイルのシートのセルにヘッダー行とフッター行のあるシートに挿入したい お世話になります。 excel のフィルターで抽出したデータを別のファイルのシートに抽出したデータと同一フォーマットの入っている原紙がありその原紙をコピーしたシートのヘッダー行(A1-A8)の後、9行目からフッター行の手前、52行めまでに貼り付けするを、フィルターで抽出した分繰り返したいのです。原紙 のシートはコピペでしたに20枚ほど作ってあります。 マクロの記述でコピペを繰り返せば作れそうな気はしますが、汎用性が無いので、また私の頭も固いので。 宜しくお願いします。

  • Excelのオートフィルタでデータ抽出するマクロについて

    オートフィルタで指定した期間のデータ抽出のマクロを作成しているのですが上手くいきません。 例えばA列に 10月29日 11月1日 11月3日 11月5日 と日付を入力しており、B列、C列にデータを入力していたとして D列1行目に10月31日、D列2行目に11月4日と入力し D列1行目からD列2行目までと指定したデータを抽出するマクロを教えていただけませんか。 マクロ初心者で、困っております。どうかよろしく御願いします。

  • マクロでオートフィルタを使い、抽出した表の特定の列に一定のデータを入れたい

    マクロを使い、オートフィルタをし、A列の人名でデータを抽出しました。 この抽出した表のB列全てに、「本社」という文字列を入れる為には、どうすれば良いでしょうか? 皆様の知恵をお貸し下さい。 よろしくお願い致します。

  • マクロ オートフィルタで困っています。

    マクロ オートフィルタで困っています。 1列目と2列目からそれぞれ条件をフィルタで抽出し、抽出された行を削除するマクロを組んだのですが(下記)、Bの条件が表にない場合に2行目から下が全て削除されてしまいます。 元の表は毎週変わるため、抽出する条件があるかないかはその時次第です。 オートフィルタにこだわってはいませんが、その他の抽出方法もいまいち分からず……。 どのようにすればよいのか、教えていただけますでしょうか。 宜しくお願い致します。 <マクロ> Sub Macro() Selection.AutoFilter Field:=1, Criteria1:="A" Selection.AutoFilter Field:=2, Criteria1:="B", Operator:=xlAnd Dim gyou(1) As Long gyou(0) = 2 gyou(1) = Range("A1").CurrentRegion.Rows.Count Rows(gyou(0) & ":" & gyou(1)).Select Selection.Delete Shift:=xlUp End Sub

  • オートフィルタ抽出データをコピーするマクロについて

    マクロについて勉強中の者です。 "Sheet1"にあるデータをオートフィルタで抽出し、 "Sheet2"に抽出データのみをコピーをしたいと思っています。 Range("A10:G59").Select Selection.ClearContents With Worksheets("Sheet1").Range("A1") .AutoFilter .AutoFilter Field:=1, Criteria1:="○" .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet2").Range("A9") End With End Sub としてみたのですが、 これを実行すると、オートフィルタが1行目(A1)ではなく、 2行目で設定されてしまい、抽出データがずれてしまいます。    A    B    C 1 品 名  仕入先  発注数 ←タイトル行に設定したい 2 りんご  ヤマト   10  ← この行に▼が設定される 色々調べた結果のマクロなので、どこが悪いのか見当がつきません。 解りやすく教えていただける方がおられましたら、よろしくお願い致します m(__)m

専門家に質問してみよう