• ベストアンサー

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

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

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

  • ベストアンサー
  • 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/17069)
回答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:="*=*" としてみたんですが、これだと ~で終わる を検索してしまいます。 ご指摘受けたばかりでなんなんですが、どうしたら・・・? すみません。宜しくお願いします。