• 締切済み

マクロを使って抽出する

マクロを使った抽出について教えてください。 A列  B列  C列  D列 番号  区分  氏名  年齢  *区分はA~Pが入ります。  *リスト範囲:A1:D200 セル[F1]に区分(A~P)を入力して実行すると35歳以上を抽出する。 オートフィルタの設定を使わずマクロで実行したいのですが、どのようなマクロを書けばよいのかわかりません。 マクロ初心者で申し訳ありませんが、よろしくご教授ください。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

マクロも (1)VBAのメソッドプロパティをどれを使ったらよいかの勉強 (2)処理ロジックの勉強 があって、(2)は時間がかかる。解説者やWEB情報でも取り立てて区分しては書いてなくて、場を積むよりほか無い。 本件は基本的な「検索」の問題です (1)全データ行を総なめ比較・判別して該当を抜き出す   判別は、区分=P AND 年齢>=35   全データのための最下行は   d = Range("A65536").End(xlUp).Row    かセルの初出空白行で捉えられる。 (2)データをコピーし、「区分」列でソートし、区分=Pの行から   pの行全てで年齢>=35を判別し、該当するものを探す    最初行はMatch関数やFindメソッドで出来る。 (3)Find,Findメソッドで順次、区分=Pを探し、年齢>=35  以外は捨てる。 (3)はVBA初心者には難しい。 (1)(2)は1000行ぐらいなら樹幹的に大丈夫でしょう コードは既回答も有るので省略。 練習にやってみてはどうかな。    

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

on memoryのrecordset操作にチャレンジしてみました。興味を持たれたら、参考URLで勉強してください。XL2007で動くかどうかは疑問です。 Sub test() Dim i As Long Dim targetRange As Range Dim targetRow As Range Dim rs As Object Set rs = CreateObject("ADODB.Recordset") With rs .Fields.Append "番号", 8, 20 'adBSTR .Fields.Append "区分", 8, 50 'adBSTR .Fields.Append "氏名", 8, 150 'adBSTR .Fields.Append "年齢", 3 'adInteger .CursorType = 3 ' adOpenStatic .LockType = 3 ' adLockOptimistic .Open End With Set targetRange = ActiveSheet.Range("a1").CurrentRegion Set targetRange = targetRange.Offset(1, 0).Resize(targetRange.Rows.Count - 1, targetRange.Columns.Count) With rs For Each targetRow In targetRange.Rows .AddNew For i = 1 To targetRow.Columns.Count .Fields(i - 1).Value = targetRow.Cells(i).Value Next i Next End With rs.Filter = "(区分='" & ActiveSheet.Range("f1").Value & "') And (年齢>=35)" ActiveSheet.Range("f2").CopyFromRecordset rs rs.Filter = 0 'adFilterNone Set rs = Nothing End Sub

参考URL:
http://home.att.ne.jp/zeta/gen/excel/c04p14.htm
回答No.2

区分が何なのか分かりませんが、例えば地区だとすると、 P地区で35歳以上の顧客リストを表示したい。 そんなところかな??? そんな訳で、 F1に抽出地区、G1に年齢を入れて、 H1をクリックすると抽出を開始。 I1をクリックすると全件表示(元に戻す) の条件で作って見ました。 200件だったらこんなもんでどうかな? これが20,000件だったらスピードを考慮しないといけないと思う。 リストがあるシートに貼り付けて下さい。 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range)  Dim I As Integer  If Target.Address = "$H$1" Then    Rows("2:200").EntireRow.Hidden = False    For I = 2 To 200      If Range("F1") <> Range("B" & I) Or _        Range("G1") > Range("D" & I) Then        Rows(I).EntireRow.Hidden = True      End If    Next I  End If  If Target.Address = "$I$1" Then    Rows("2:200").EntireRow.Hidden = False  End If End Sub

noname#77845
noname#77845
回答No.1

補足してください。 「セル[F1]に区分(A~P)を入力して実行すると35歳以上を抽出する。」 意味不明です。 区分に何を入力しても必ず35歳以上のデータを抽出するの? それとも、F1と同じ区分の中で35歳以上を抽出するの? 因みに、「新しいマクロの記録」でオートフィルタを使用すれば、どういうマクロか判ると思いますよ。 戻すマクロも作った方がいいかも…。

関連するQ&A

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

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 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つです。 よろしくお願いします。

  • 検索・抽出・貼り付けのマクロ

    シート1のデータをオートフィルターかけて検索し抽出したものを、A列、B列、D列、F列をシート2の、A列、B列、C列、D列に貼り付けるマクロを教えて頂けますでしょうか? 一週間位悩んでいます。

  • エクセルで閉じるときのマクロ

    あるエクセルファイルがあり、 その一枚のシートにはオートフィルタ (A~Z列まで)を使用しています。 【質問1】 ファイルを保存して閉じる際、 オートフィルタで抽出したものを 「すべて」に戻す、 つまりなにも抽出されていない(=左端の行番号が黒字) に戻すマクロはどこにどのように書けばよいでしょうか? オートフィルタを戻すマクロは、 'オートフィルタのあるシートを選択 Sheets("買取リスト").Select 'T列のオートフィルタを「すべて」にする Selection.AutoFilter Field:=22 というところまでは理解できました。 【質問2】 上記のマクロを Sheets("顧客リスト") から、Sheets("商品リスト")へ移動した際、 ボタン等を使用せずに、 (ただ、下のタブをクリックするだけで) 実行させることは可能でしょうか? 可能であれば、どこにどのように記述すれば よいでしょうか??  よろしくお願いします。

  • Excelでマクロを使用して、列を表示させる質問です。

    Excle2003での質問です。 C3セルからAE78セルまでにデータが入力されています。 C列には項目名・3行には氏名が並んでいます。 D4セルからAE78セルには、 各人に対応する項目に○や△等が記入されています。 (空白セルもあります) A1セルに氏名を記入して(3行目のリストから選択して)、 マクロを実行させると、 1.氏名を一致する氏名の列のみを表示して、 2.オートフィルタで空白以外の行を表示する。 (ただしC列の項目名は表示されたまま) このようなマクロを組みたいのですが、 初心者の私ではまったく分かりませんでした。 どなたかご教授いただけたらと思います。 よろしくお願いいたしますm(_ _)m

  • マクロを使って抽出を

    エクセルで検索窓のようなものを作りたいと思っています。 A列には品番、B列にはシリーズ名、C列には対応(○×△)のような表です。 マクロを実行すると、「言葉を入力してください」のようなボックスが出て、そこに文字を入力するとオートフィルタのように抽出してくれるようなものを作りたいのですがどのようにすればいいのでしょうか? それと、検索はB2にバナナ、B8にチョコバナナ、B10にバナナドリンクのような表だとして、検索窓にバナナと入力すると、B2、B8、B10を抽出してくれるようなものを作りたいと思います。 よろしくお願いします。

  • オートフィルターで抽出されたデータの参照方法について

    1000件以上のデータをA,B、C列にオートフィルターをかけて抽出されたデータのA,B、C列およびD列目の値を参照する式を組みたいのですが、当然のことながらオートフィルターをかける都度、表示されるセル番地が変わるので式がくめません。 多分、マクロでコピーしてどこかにペーストすればいいのでしょうが、まったくわかりません。お教えください。

  • エクセルのVBAマクロで検索と結果表示(抽出)

    エクセルのVBAマクロで検索と結果表示(抽出)を行いたいです。 業務で使用している膨大なリストデータから、特定のキーワードで情報の絞り込みを行いたいのですが、上手くマクロが組めません。 機能としては、シート1で特定のキーワード(テキストボックスに)を入力し検索ボタンを押下すると、 シート2のリストデータから検索に引っかかったセルの"行"を、シート1にリストアップ(貼り付け)していくようなマクロを作りたいのです。 シート2にはB列~AH列xn行のリストデータがあり、シート2のK列のセル内から「シート1のテキストボックスで入力したキーワードを含む」検索を行い、 HITした行をシート1のA9の行から結果として表示を行いたいんです。 簡単に言えばオートフィルタ機能の部分一致版を作りたいのですが・・・。 (オートフィルタでは完全一致でしか抽出が出来ないので) そして、検索ボタンを押下すると前回結果はクリアしたいです。 ネット上のサンプル等も参考にしながらやってみたのですが上手く行きません。。。 どなたか上記のマクロ文をご教授願えないでしょうか。 必要な情報(シート2の特定の列)のみ表示させたいとも思いましたが、むずかしくて断念・・・。 もし可能でしたらこちらもお願い致します。 よろしくお願いいたします。

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

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

  • Excel2000マクロ

    お世話になっております。 マクロのことで教えてください(マクロ初心者です(^_^;)) A列・・日付 B列・・時刻 C列・・数値データ “時刻”が2秒おきのデータなので1分おきのデータを抽出したいので、D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、 B列がX軸でC列がY軸のグラフを作ります。 これをマクロで記録して自動的にやりたかったのです。 ですが、 「D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、・・」 のところは、うまくマクロで自動化できるのですが、 別シートに出来たグラフを見ると、一番最初に記録して作ったグラフがそのまんまできてしまいます。 次のデータでグラフをつくりたかったのですが。。 これはどうしてでしょう? グラフまではうまくできないのでしょうか?

  • エクセル 指定の数値範囲を条件に抽出する関数マクロ

    表1があり、A列に氏名、B~E列に2桁の数値データが入っています。この中で検索値XXの{-3~+3}の範囲内に該当する数値を抽出したいです(検索値が33なら、30~36内の数字)。該当する数値をフォントやセルに色をつけて分かるようにできれば一番いいですが、できない場合は、該当するデータを含む人の氏名を表2に表示するとか、該当する人のF列に○印をつけるとかでもよいです。実際にはたくさんの違う検索値を使って抽出操作が必要になるので、フィルタオプションとかでやるのは面倒です。関数でもマクロでも良いので簡単な方法を教えてください。

専門家に質問してみよう