• ベストアンサー

エクセルのマクロのことです。

いつも、お世話になっております。 エクセルでシート1にデータがあります。 シート2のA1に入力した文字を含む行をオートフィルタで抽出する。 これをマクロを使ってできるでしょうか? 宜しくお願いいたします。

noname#2643
noname#2643

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 > マクロの自動記録を参考に > Criteria1:="*=*" > としてみたんですが、これだと ~で終わる を検索してしまいます。 そういうふうに「ここを変えてみよう」という発想と試行錯誤が大切だと思います。 「あいうえ」というデータがあり、「いう」を含むでオートフィルタを自動記録すると Criteria1:="=*いう*" ・・・・(1) になりました。ちなみに"" で囲まれた部分は文字列を表します。 前回の例で、 Criteria1:="=" & FindDate の FindDate は抽出用の受け皿だと説明しましたので「いう」の例でいけば、 Criteria1:="=" & いう となります。これで変数と文字列は & でつなぐんだなと解かります。 (1)のようにするには、「いう」の前後に「*」という文字列を入れればよい事になり、 Criteria1:="=*" & いう & "*" にすれば良いと解かります。 最後に「いう」を 受け皿の FindDate にすれば、 Criteria1:="=*" & FindDate & "*" となります。 ただ、日付などの抽出だとデータ型などがからみもっと複雑になってきますが、、、 自動記録で記録したコードをExcel画面とVBE画面を並べて表示したうえで、デバック-ステップインとしF8キーを押して行くと、どの行がどの処理をしているか目で追う事が出来ます。 色々な処理を自動記録し試してみると良いかもしれません。

noname#2643
質問者

お礼

丁寧な回答をありがとうございます。 やはり、全く解らずのままだと、ほんのちょっとの変更をしたいときやエラーが出てしまった時に対処できないので、教えていただいた方法で少しずつでも解読していけるように努力してみます。 本当にありがとうございました。

その他の回答 (2)

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

(1)Sheet1にデータがあって、フィルタした結果をSheet2に出したいのだと思います。結果を別シートSheet2に出すことは操作として、出来ません。したがって「マクロ(の記録)」では出来ません(エラーが出ます)。2000の場合、2002も同じだと思います。 (2)条件がSheet2に在っても上手く行きました。 (2)VBAプログラムを組めば、稚拙な組み方で良ければ、 下記をどうぞ。 (テストデータ)Sheet1のA1:A11 県 東京都 山梨県 大阪府 京都府 東京都 埼玉県 東京都 神奈川県 東京都 東京都 (条件)Sheet2のA1:A2 県 東京都 (コード) Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = sh1.Cells(2, 1).CurrentRegion.Rows.Count ' MsgBox d j = 2 sh2.Cells(1, 2) = sh1.Cells(1,1) For i = 2 To d If sh1.Cells(i, 1) = sh2.Cells(2, 1) Then sh2.Cells(j, 2) = sh1.Cells(i, 1) j = j + 1 End If Next i End Sub (結果)Sheet2のB1:B6に 県 東京都 東京都 東京都 東京都 東京都 条件が2項目以上あればIf....Then,End Ifの ところをElseIfを加えたりして変えれば良い。 Sheet1よりSheet2へ2項目以上持ってきたい時は sh2.Cells(j, m) = sh1.Cells(i, n) を増やしてください。Sheet1の第n列からSheet2 の第m列へコピーされます。

noname#2643
質問者

お礼

お礼が遅くなりましたが、 回答ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 ほとんど同じ質問で、多分3度目くらいですね。 Sub DateIn4() Dim FindDate  FindDate = Worksheets("Sheet2").Range("A1")  Worksheets("Sheet1").UsedRange.AutoFilter Field:=1, Criteria1:="=" & FindDate End Sub 難しい事はないので日本語にして順に読んでみましょう。 FindDate はデータの受け皿(変数)です。この場合の = は代入を意味します。 FindDate = Worksheets("Sheet2").Range("A1") 受け皿 ←代入 シート2のA1の値 Worksheets("Sheet1").UsedRange.AutoFilter Field:=1, Criteria1:="=" & FindDate シート1の使っている範囲のオートフィルタで最初の列(フィールド1)を受け皿に入っている値(FindDate)でフィルタ こんな感じです。 範囲が特定出来るなら、UsedRangeをRange("B1:H500")等に変えます。 Range("B1:H500")で対象列がD列ならField:=3です。 マクロ記録とかして、それっぽい所を色々書換えてみると解かってきます。

noname#2643
質問者

補足

・・・はい、おっしゃる通りです。 何度も同じ様な内容で・・・。すみません。 なかなか、意味がわからなくてついこちらに頼ってしまいます。 今回つくっていただいたマクロですと条件と一致するものを検索して くれるんですが、これを含むにするにはどうしたらいいんでしょう? Criteria1:="=" ↑の"="部分をかえればいいのかしら?と思ったんですが・・・。 マクロの自動記録を参考に Criteria1:="*=*" としてみたんですが、これだと ~で終わる を検索してしまいます。 ご指摘受けたばかりでなんなんですが、どうしたら・・・? すみません。宜しくお願いします。

関連するQ&A

  • 《エクセル》 オートフィルタで指定した行だけ指定するマクロ

    いつもお世話になります。 「オートフィルタで条件を指定して行を抽出し、その行のデータを削除する」 というマクロを作成したいのですが、うまく行きません。 そのようなマクロの式か、もしくはオートフィルタを使う以外で、同じ機能を果たせるマクロがあれば、教えていただけますでしょうか。

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

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

  • エクセルのマクロを知りたい

    エクセルで,たくさんのデータが入力された【シートa】があります。 新しく【シートb】を作成して,そこに空白の表(1)~(10)までを作成します。 (ちなみに表(1)は1行から始まり100行まで,表(2)は101行から始まり200行まで・・・・といった感じです) 【シートb】の表(1)には,【シートa】でA列に「1」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。同様に,表(2)には,【シートa】でA列に「2」が入力されているデータを抽出して,それをB列の昇順に並べて記入しなさい。・・・というのを表(10)まで続けます。 上記のような命令をボタン一つで操作できるようなマクロを教えて欲しいのです。 お願いします。

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

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

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

  • エクセルのマクロと関数について

    お世話になります。 1)マクロの方法で以下のようにしたいのですが可能でしょうか? 1行目にオートフィルタがかかっていればAAの処理をし、もしオートフィルタがかかっていないのであればBBの処理をしなさい。 というようなマクロです。if~then~else をつかってすると思うのですが、どうもうまくいきません。 2)関数もしくは式を使って以下のようにしたいのですが可能でしょうか?(ほかに方法があるのであれば関数、式にこだわりません) エクセルのデータベース(A1:E100のデータとし、A1:E1は項目が入っており、A1:E1にオートフィルタをかける)からオートフィルタをかけて項目を絞るのですが、出てきた結果の1番上、つまりA2:E2にあるB2とD2の結果を別のシートにある結果欄それぞれ2箇所にコピーする。多分別シートにある結果欄に何らかの関数とか式を入れればいいのかなと思いますが・・・ ちなみに上記2つの質問は関連性はありません。 わかりにくい質問で申し訳ありませんが、必要ならば補足いたします。 かなり困ってますのでよろしくお願いします。

  • excelの印刷用マクロ。

    excelで分からない事があり困っています。 横がA~I列、縦がB列のB-1から文字が入力されている最後の行までの範囲を選択して、印刷するマクロを作りたいのですが、どうすればよろしいでしょうか。印刷したいシートには、オートフィルタが掛かっている場合もあります。その場合は、その状態のまま印刷出来る様にしたいです。 どなたか分かる方が居ましたら回答お待ちしています。 よろしくお願いします。

  • ★エクセルマクロコード教えていただけますでしょうか

    マクロのコードを組みたいと考えておりますが、 ほとんど初心者のため、お詳しい方の力を貸していただきたい次第でございます。 m(__)m ○オートフィルターーでデータをソートし、そのソートごとのシートを自動作成。  その後、そのシートを各フォルダに保存したい。 あるデスクトップ上にあるエクセルシート「管理DB」の「sheet1」にある管理データ A列(グループa~e)、B列(登録日)、C列(ステータス)によって構成されているシートで、 1.A列「グループ」「a」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダX本部」に保存。 1~5の一連の作業をグループがなくなるまで繰り返したいと考えています。 1.A列「グループ」「b」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダY本部」に保存。 ※一連の作業の中で、グループ名と、シートの保存先が変わる以外、この作業の繰り返し。 以上の作業を実行するマクロを組むことは可能でしょうか。 また、マクロのコードを教えていただけると幸いです。 マクロについてお詳しい方、何卒よろしくお願いいたします。

  • Excelマクロで質問です。

    Excelマクロで質問です。 Sheet1にデータが入力されていて(ここでは100行入力されているとします)、 Sheet2のA2からE2に数式が入力されています。 ↓ この数式をSheet1のA列に入力されているデータ行数分プラス1(ここでは100+1) Sheet2のA3以降(A3からA103)にコピペするマクロを教えていただけないでしょうか。 100は、毎回変化します。

  • エクセル-マクロ-オートフィルタ

    エクセルのマクロで、 オートフィルタでデータを抽出する場合、 引数Criterial,Criterial2で文字列を指定しますが、 Criterial3…とできません。 ・3個以上抽出したい場合 ・「*~」以外を抽出したい場合 がわかりません。 教えて下さいmm。

専門家に質問してみよう