|
|
| Excel VBA Macro ・ 値の操作 ・ FAQ |
|
オートフィルタでの抽出が文字列の先頭一致になってしまうが?
|
|
|
|
Question 5308 |
|
 |
 |
|
|
サンプル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) ※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。
|
|
|
|
|