オートフィルターでの抽出が文字列の先頭一致になってしまうが?

Question 5308 Previous Next
詳細は こちら サンプルNo.326 ◆ 環境・・ Excel 2003 & Windows XP

右図の A2セルに名前を入れると、それと同じ名前のある行(A:E)だけをコピーして、Sheet2の B3に行を上に詰めて貼り付けたい。
次のようなコードでうまくいったのですが、問題が2箇所ありました。
その1
A2に 丸山 を選択すると、丸山 を含んだ文字(丸山東 や 丸山西) すべてがコピーされます。角川を選択した場合も同じです。
その2
貼り付け先のセル幅がシート1と同じになりません。何か方法がありますか。
ご指導よろしくお願いします。
    Worksheets("Sheet2").Range("B:F").Clear
    Worksheets("Sheet1").Range("A3:E9").AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("Sheet1").Range("A1:A2"), _
        CopyToRange:=Worksheets("Sheet2").Range("B3"), _
        Unique:=False
    Worksheets("Sheet2").Activate
Answer   Copyright (C) 2007.6.23 永井善王
拙著 「Excel VBA そのまま使える実用マクロ 500連発」 をご愛読、ありがとうございます。
326番は 「オートフィルタした結果をコピーして貼り付ける」 と題するサンプルです。
が、ご質問文にあるマクロは、アドバンスフィルタを利用されています。 いろいろ試行錯誤された結果でしょうね。

もう一度、付属CD-ROMから 326.xls を開いて、よく見てみましょう。
「オートフィルタし
結果をコピーして貼り付ける」と題する関連サンプルが、問題解決にピッタリですよ。
Sub オートフィルタして結果をコピーして貼り付ける()
    Worksheets("Sheet2").Range("B:F").Clear
    With Worksheets("Sheet1")
        .AutoFilterMode = False
        .Range("A3:E9").AutoFilter field:=4, Criteria1:=.Range("A2").Value
        .AutoFilter.Range.Copy
    End With
    貼付先シート名 = "Sheet2"
    貼付先左上端セル = "B3"
    Worksheets(貼付先シート名).Range(貼付先左上端セル).PasteSpecial Paste:=xlPasteAll
End Sub
上記コードの赤字部分が、あなた用にカスタマイズしたカ所で、4行目の .AutoFilterMode = False はオートフィルタモードを解除するコードです。5行目の中にある field:=4 は左から4番目のフィールド、つまり、「志願先」のことです。
この他の赤字部分は解説しなくても理解できますね。
では、上手くいったら、ご連絡ください。

P.S.
その2 については、ついでだからと安易に質問されることなく、落ち着いて考えられることをお勧めします。
マクロだからと大げさに考えてはいけません。 あなたは、ハンド操作なら出来ますよね。
 ・Sheet1のすべてのセルを選択してコピーし、Sheet2のA1セルに貼り付けると、どうなりますか?
 ・[形式を選択して貼り付け]で [書式]を指定した経験はありませんか? etc.
詳細は こちら 【参考】 オートフィルタとアドバンスフィルタについて詳しく知りたい場合
拙著「
Excel VBAマクロ組み方講座 プロの定番・裏技・合わせ技編 」で 「希望のデータを自在に抽出したい」 と題する 43ページにわたる解説があります。
この本は好評をいただいて増刷を重ね、各地の図書館で閲覧できる場合もあるようです。
よろしければ参考にしてください。


サンプルブックのダウンロードは ここをクリック  (YNxv98c942_AutoFilter.xls 39KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro