• ベストアンサー

エクセルのオートシェイプでセルに入力した日付以上を検索をするマクロをつくりたい

エクセル2003を使用しています。 Bの列に2008/1/1,2008/2/2,2008/3/3というように日付が入力されているのですが、A1に2008/1/10などで入力された日付以上を検索するオートシェイプのマクロがうまく動きません。 Selection.AutoFilter Field:=1, Criteria1:=>Cells(1,1), Operator:=xlAnd と、いうように記述してもエラーとなります。 どのように記述すればよろしいでしょうか。

  • youryi
  • お礼率84% (135/160)

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

コンパイルエラーですよね? 比較演算子  >  (より大きい)  >= (以上)  <= (以下)  <  (より小さい) となります。 今回の間違いは比較演算子も間違っていますが、そうではなく構文のミスです。   回答1も。(明らかにタイプミス)(^^;;; >Selection.AutoFilter Field:=1, Criteria1:=>Cells(1,1), Operator:=xlAnd の Criteria1:=>Cells(1,1) の => が間違い 正しくは、 Criteria1:=">=" & Cells(1,1).Valueです。 Valueは付けなくてもいいがつけた方がベター で、以下のようになります。 Selection.AutoFilter Field:=1, Criteria1:=">=" & Cells(1,1).Value, Operator:=xlAnd   以上。  

youryi
質問者

お礼

恥ずかしながら頭に「=」が付いているので「>=」の「=」がいらないと思い込んで「=」の部分を消していました。コンパイルエラーになるのも当たり前ですね。あと""で囲む部分も検討違いのところを見ていました。 教えていただいた記述で無事マクロが動くようになりました。 ありがとうございます。

その他の回答 (2)

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

マクロの記録をとれば判る問題じゃない。 初心者、いや全ての人は、マクロの記録を活用すべきです。 フィルタはでは、比較演算子はVBAのよう =>Cells(1,1),と書くのでなく、 ・演算子と比較数を合わせて、 ・かつ文字列で(従って””で囲む) やり方で指定する、変わったやり方になっている(関数にはこの型がある)ことに、気づくはずだ。 具体的な日付けを指定した場合 Sub Macro1() Range("A1:A8").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">2008/4/13", Operator:=xlAnd End Sub この2008/4/13の部分がセルの値としてあるのだから Sub Macro1() Range("A1:A8").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">" & Range("D1"), Operator:=xlAnd End Sub すなわち & D1 でなくRange()をつけ、番地D1をに””を囲む必要ある点に注意。

youryi
質問者

お礼

私も新しいマクロの記録でマクロを作成後、該当部分を変更するつもりでしたが""でどこを囲むかわからなくて=">=Range("A1")"とかおかしな記述をしていました。""を使うとまずいのかと思ってCellsでやってみたのですが、根本的に間違っていたみたいですね。 マクロの記録便利ですね。命令がわからない記述をとりあえずマクロの記録で実行してみて記述をコピーとかよくやっています。ただマクロの記録で作成したマクロは、そのままではマクロの実行でエラーになったりと混乱することもあります。 教えていただいた記述で無事マクロが動くようになりました。 ありがとうございます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

どのようなエラーが出るのか解りませんが、下記ではいかがでしょうか? Selection.AutoFilter Field:=1, Criteria1:"=>" & Cells(1,1)

youryi
質問者

お礼

失礼しました、コンパイルエラーです。 教えていただいた記述の頭に「=」をつけるとエラーがなくなりました。 ありがとうございます。

関連するQ&A

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

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

  • 「~以上、~以下」のオートフィルタのVBAについて

    こんばんは、オートフィルタについて2つ質問させてください! 1つ目は、10列目に入っている値で、20170901以上かつ20170931以下の値をオートフィルタで抽出しようと以下のVBAを入力しましたが、該当するデータがあるにも関わらず抽出ができませんでした(T_T)何か間違っているのでしょうか…?! Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">=20170901" _ , Operator:=xlAnd, Criteria2:="<=20170931" 2つ目は、同様のデータでInputBoxを利用し、入力した数字をそのままオートフィルタの条件に反映しようとする以下のVBAを入力してみました。しかし、やはり記述の方法が違うのか該当するデータがあるにも関わらず抽出は成功しませんでした・・・。 Dim 日付 As Date 日付 = InputBox("処理月を入力して下さい(例:201709)") Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">= 日付 & 01" _ , Operator:=xlAnd, Criteria2:="<= 日付 & 31 " どなたかご助力いただけるととても助かります、どうぞよろしくお願いいたします!m(_ _)m

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

    質問です。 オートフィルタで複数列を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 よろしくお願いいたします。

  • エクセルVBAの一時停止後、 入力し再実行したい

    エクセルVBAでオートフィルター実行後に一時停止し、オートフィルターで選んだエクセルシート上のセルに直接入力た後、マクロを再実行させたい。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/2 '製品コードより枠番を選ぶ Selection.AutoFilter Field:=12, Criteria1:="=?????1*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Selection.AutoFilter Field:=12, Criteria1:="=?????2*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Range("A1").Select End Sub

  • Excel VBA 任意の日付から1週間分抽出

    VBA素人です。 シート1  A   B   C   D   E 1任意の日付 2日付 曜日 内容 氏名 備考 3 4 5 6 このようなデータ入力です マクロ記録でオートフィルタを用い日付抽出をするマクロを吸出し、ネットで知った今日から前後4日間のマクロを入力し,改変し応用しようと考えたのですが、やはり素人には壁が高くうまいこと行きません。 皆さんに教えていただきたいのは以下の式 Range("A2:E2").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$E$5").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の↓この部分 xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の & Date - 4 を、どう変更すれば A1に入力した任意の日付に出来るのか?です。 きっと基本的な事だとは思うのですが、教えてくださいお願いします。

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

    マクロ オートフィルタで困っています。 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

  • 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

  • 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マクロでワイルドカードを使ったオートフィルタ処理の方法がわからない

    エクセルのマクロがうまく動かないので、教えてください。 あるセルにカーソルをおいて、そのセルの文字を含んだ文字で(ワイルドカードを使って)オートフィルタ処理をしたいのですが、 「構文エラー」となってしまいます。 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&"*"の部分で 「構文エラー」になっているようなのですが… お分かりになる方教えてください。よろしくお願いします。

  • エクセルのマクロでフィルタを判別するマクロ

    いつもお世話になっております。 エクセル2000で オートフィルタを使用した表があります。 やりたいことは以下の通りです。 AutoFilter Field:=1(一番左側のフィルタ)が、 なんらかのフィルタリングがされている (フィルタの▼が青い状態)のときはそのままで、 なにもフィルタリングされていない (フィルタの▼が黒い状態)のときは Selection.AutoFilter Field:=1, Criteria1:="<>#N/A", Operator:=xlAn を実行させたいのです。 どのようなマクロを記述すればいいか ご教示ください。 よろしくお願いします。

専門家に質問してみよう