• ベストアンサー

EXCELマクロでワイルドカードを使ったオートフィルタ処理の方法がわからない

エクセルのマクロがうまく動かないので、教えてください。 あるセルにカーソルをおいて、そのセルの文字を含んだ文字で(ワイルドカードを使って)オートフィルタ処理をしたいのですが、 「構文エラー」となってしまいます。 Dim num As String num = ActiveCell.Value Sheets("リスト").Select Columns("AN:AN").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*"&num&"*", Operator:=xlAnd ActiveWindow.ScrollColumn = 2 Range("A1").Select Criteria1:="=*"&num&"*"の部分で 「構文エラー」になっているようなのですが… お分かりになる方教えてください。よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 特に、そこ自体に問題ないというか、 VBAの特徴なのですが、「&」の前後に半角スペースが必要です。 "=*"&num&"*"   ↓ "=*" & num & "*" 細かいことですが、この「*」アステリク を入れるというのは、対象も文字列ですから、数字が入れば、被検索対象列は、文字列でないといけないはずです。 Columns("AN:AN").Select また、通常、このような選択をするというのは、飛び石になっている途中の空白も含むという意味になります。ただし、データ列の最後尾から下のセルは含まれません。 Range("AN1").CurrentRegion となります。特に、CurrentRegion がなくても動作的には同じです。 ------------------------------------------------- Dim num As String num = ActiveCell.Value Sheets("リスト").Select 'Columns("AN:AN").Select ←不要 Range("AN1").CurrentRegion.AutoFilter Field:=1, Criteria1:="=*" & num & "*", Operator:=xlAnd 'ActiveWindow.ScrollColumn = 2  ←不要 'Range("A1").Select  ←不要 -------------------------------------------------

resortdiver
質問者

お礼

おお! ありがとうございます。解決できました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

#2です。 数字文字列の場合うまくいくか心配になって。OKのようです。 シングルコーテイションを先頭に入れ数字入力ても、文字列書式にして入力しても。 例データ 計数 123 2312 2345 1222 43111 Sub test03() Dim num As String num = ActiveCell.Value cr = "*" & "23" & "*" Sheets("sheet3").Cells.AutoFilter Sheets("sheet3").Cells.AutoFilter Field:=1, Criteria1:=cr End Sub 結果 計数 123 2312 2345 ついでに、クライテリアの=は、=の場合に限り、省けるようです。

resortdiver
質問者

お礼

#3とあわせてありがとうございます たかがEXCEL、されどEXCELですね。 解決しましたありがとうございます

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

例データ A列 山田 太郎 植田 太吉 近藤 茂 鈴木 健太郎 小野 正治 太田 恵子 大田 Sub test03() Dim num As String num = ActiveCell.Value cr = "*" & "太" & "*" Sheets("sheet1").Cells.AutoFilter Sheets("sheet1").Cells.AutoFilter Field:=1, Criteria1:=cr End Sub で A列      山田 太郎 植田 太吉 鈴木 健太郎 太田 恵子 にないました。 #1でおっしゃっている&の前後スペースが原因でしょうか。 実行時にエラー指摘が出るようになっていたように思いますが。 Select、Selectionは省いて簡潔に。 Sheets("sheet1").Cells.AutoFilterはフィルタモードを解除の為に入れています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルマクロでオートフィルタを貼り付け。VBA

    お世話になっております。 エクセルのマクロを作成したのですが、上手く機能いたしません。 オートフィルタで条件に一致するものが現在表示されている 「CSV元データをここに貼り付ける」という名前のシートが ございます。 これをシートを全選択し、そのまま 「加工1」という名前のシートに貼り付ける。 といったマクロを作成したのですが、加工1には何も貼り付けられていないようです。 下記にマクロのプログラムを記載しますので、どこを訂正すればいいのかをお教えいただければ ありがたいです。 無知で申し訳ございませんが、何卒よろしく御願いいたします。 当方が今したいのは、マクロ2なのですが、マクロ2を見ようとするとマクロ1も表示されます。 なぜ、マクロ1もでてくるのかわかりませんが、よろしく御願いいたします。 Sub マクロ1() ' ' マクロ1 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Columns("A:D").Select Selection.Delete Shift:=xlToLeft Columns("D:D").Select Sheets("読込データ(加工1)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Sheets("読込データ(ORG)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 Sheets("csv元データをここに貼り付ける").Select Columns("B:D").Select Selection.Delete Shift:=xlToLeft Columns("I:P").Select Selection.Delete Shift:=xlToLeft Range("I19").Select Sheets("csv元データをここに貼り付ける").Select Rows("2:2").Select Selection.AutoFilter Selection.AutoFilter Field:=9, Criteria1:="=2", Operator:=xlAnd End Sub Sub マクロ2() ' ' マクロ2 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Cells.Select Selection.Copy Sheets("加工1").Select Range("G12").Select End Sub

  • excelのマクロが上手く動作しません

    excel2013で、シートのレイアウトを整えるマクロを以下のように作成しました。 しかし、いざ他のシートで試すと、そのシートと同時に特定のシートにもなぜかマクロが実行されてしまいます。(恐らく作ったときに使っていたシート) どうしたら今見ているシートだけにマクロを実行することができるでしょうか? ActiveWindow.Zoom = 85 ActiveWindow.Zoom = 70 Columns("A:A").ColumnWidth = 10.13 Columns("A:A").ColumnWidth = 10.63 Columns("B:B").ColumnWidth = 6.63 Columns("D:D").ColumnWidth = 20 Columns("D:D").ColumnWidth = 23.75 Columns("D:D").ColumnWidth = 24.63 Columns("E:E").ColumnWidth = 10.38 Range("E1").Select ActiveCell.FormulaR1C1 = "インボイス金額" ActiveCell.Characters(7, 2).PhoneticCharacters = "キンガク" Columns("F:F").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft Range("H9").Select Columns("G:G").ColumnWidth = 11.38 Columns("I:K").Select Selection.Delete Shift:=xlToLeft Range("J9").Select Columns("I:I").ColumnWidth = 15 Columns("J:J").ColumnWidth = 9.75 Columns("K:K").ColumnWidth = 9.5 Range("L2").Select Columns("L:L").ColumnWidth = 5.5 Columns("O:O").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 13.88 Columns("P:P").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 12.13 Selection.ColumnWidth = 13.25 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 12 Columns("Q:Q").Select Selection.ColumnWidth = 5.5 Columns("S:S").Select Selection.ColumnWidth = 6.75 Columns("T:T").ColumnWidth = 9.75 Columns("Q:T").Select Range("T1").Activate Selection.Style = "Comma [0]" Columns("U:U").Select Columns("V:V").ColumnWidth = 5.5 Columns("V:V").ColumnWidth = 6 Columns("W:Z").Select Selection.Delete Shift:=xlToLeft Columns("X:Z").Select Selection.Delete Shift:=xlToLeft Range("X10").Select Columns("X:X").ColumnWidth = 12.25 Columns("X:X").ColumnWidth = 11.13 Columns("Y:Y").ColumnWidth = 6.75 Columns("Z:Z").ColumnWidth = 11.63 Columns("AA:AA").ColumnWidth = 6.75 Columns("AB:AB").Select Selection.Delete Shift:=xlToLeft Range("AB2").Select Columns("AB:AB").ColumnWidth = 11 Columns("AD:AO").Select Selection.Delete Shift:=xlToLeft Range("AF14").Select Columns("AD:AD").ColumnWidth = 11 Columns("AE:AE").Select Selection.Delete Shift:=xlToLeft Range("AG7").Select Columns("AE:AE").ColumnWidth = 20.38 Columns("AF:AJ").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 21 ActiveWindow.ScrollColumn = 1 Rows("2:2").Select ActiveWindow.FreezePanes = True Range("A2").Select ActiveWorkbook.Worksheets("11").Sort.SortFields.Clear ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("D2:D137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("A2:A137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("11").Sort .SetRange Range("A1:AE137") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub よろしくお願い致します。

  • オートフィルタ マクロについて

    質問です。 オートフィルタで複数列を1つの条件で抽出したいのですが、教えてください。 たとえばA列が納品書No.・B列が受注No.・C列が商品No.なのですがすべて数字の為、出来ればInBox一回でA-C列を検索してほしいです。 指定納品書NO 受注NO 元品番 21812 3252608 77 21880 3307989 32B 22053 3389769 95414A 22050 3389770 67312H 22052 3389771 67312H 22050 3389773 67118H 以下の様なマクロを作ってみましたが、 A-C列全てに一致しないと抽出しないようです。 どなたかご教授いただけないでしょうか? マクロ '条件1 の設定 Dim 検索NO As Variant '抽出キーの入力指示 検索NO = InputBox("検索NOを入力てください。") 'キャンセルした場合の処理 If 検索NO = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("A2:O2").Select Selection.AutoFilter Else Selection.AutoFilter Range("A2:O2").Select Selection.AutoFilter End If Selection.AutoFilter Field:=1, _ Criteria1:=">=" & 検索NO, Operator:=xlAnd, Criteria2:=" " & 検索NO Selection.AutoFilter Field:=2, _ Criteria1:=">=" & 検索NO2, Operator:=xlAnd, Criteria2:=" " & 検索NO2 Selection.AutoFilter Field:=3, _ Criteria1:=">=" & 検索NO3, Operator:=xlAnd, Criteria2:=" " & 検索NO3 AutoFilterMode = False Application.ScreenUpdating = True End Sub よろしくお願いいたします。

  • オートフィルタをし選択・貼付をマクロにしたいのですが、対象データ表示される行が毎回違うのでうまくいきません。

    いつもお世話になっております。 どなたかご教示いただければ助かります。 ファイル(1)のデータの中からA行が830となっているものを、ファイル(2)のページ1の一番下の行に付け足し 同じようにファイル(1)からA行が1000となっているものを、ファイル(2)のページ2の一番下に付け足す という作業をマクロでしたいのですが、毎回830と1000がセルAの何行目に表示されるのかが異なっており、オートフィルタをかけた状態でマクロにするとマクロ作成時にたまたま表示されていた行数が指定されているので、別の日に違う行数をコピーしてしまい私が作成したマクロではうまくいきません。 どう変更すれば宜しいでしょうか? どうぞ宜しくお願い致します。 Workbooks.Open Filename:="mm.xls"    ←上記文でファイル(1) Sheets(DM).Select Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>*850*", Operator:=xlAnd, _ Criteria2:="<>*1000*" Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.EntireRow.Delete ActiveSheet.Rows("1:1").Select Selection.AutoFilter Windows("xx.xls").Activate  ←ファイル(2) Sheets("ll").Select   ←ページ1  ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="1000" Rows("3:3").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False Windows("xx.xls").Activate Sheets("pp").Select  ←ページ2 ActiveSheet.Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate Windows("mm.xls").Activate Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="850" Rows("2:2").Select Selection.Copy Windows("xx.xls").Activate ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save Windows("mm.xls").Activate ActiveWindow.Close End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • EXcelオートフィルタのオプション設定で条件として変数をマクロで組むには?

     オートフィルタ機能を使い、指定期間内のデータを抽出するようにマクロを組みたい。指定期間が一定ではないので変数を設定したいのですがうまくいきません。下記はマニュアルで入力したものをマクロに記録したものです。指定期間は他のBookのセルに入力画面として設けてあります。例えばBook2/B1(開始)~B2(終了)。 Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">=2005/8/21", Operator:=xlAnd _ , Criteria2:="<=2005/9/20" Range("C1").Select End Sub

  • excel2000のオートフィルタマクロ

    マクロ記録の簡単な編集程度の知識しかありません。 C1に入っている文字列を、完全一致ではなく、”含む”状態でオートフィルタしたいのですが、 どの様に記述すればいいですか? 現状、下記のようになっています。 Selection.AutoFilter Field:=2, Criteria1:="C1", Operator:=xlAnd よろしくお願いいたします。

  • オートフィルタのマクロについて

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。

  • マクロ オートフィルタで困っています。

    マクロ オートフィルタで困っています。 1列目と2列目からそれぞれ条件をフィルタで抽出し、抽出された行を削除するマクロを組んだのですが(下記)、Bの条件が表にない場合に2行目から下が全て削除されてしまいます。 元の表は毎週変わるため、抽出する条件があるかないかはその時次第です。 オートフィルタにこだわってはいませんが、その他の抽出方法もいまいち分からず……。 どのようにすればよいのか、教えていただけますでしょうか。 宜しくお願い致します。 <マクロ> Sub Macro() Selection.AutoFilter Field:=1, Criteria1:="A" Selection.AutoFilter Field:=2, Criteria1:="B", Operator:=xlAnd Dim gyou(1) As Long gyou(0) = 2 gyou(1) = Range("A1").CurrentRegion.Rows.Count Rows(gyou(0) & ":" & gyou(1)).Select Selection.Delete Shift:=xlUp End Sub

専門家に質問してみよう