エクセル2007のVBAでオートフィルタのチェック

このQ&Aのポイント
  • エクセル2007のVBAを使って、オートフィルタのチェックを閾値以上の%のみにする方法について、質問があります。
  • ユーザー設定フィルタでは視覚的に解りにくいため、フィルタの▽をクリックした時に、チェックがされていることを確認したいです。
  • 質問文章のコードで、.AutoFilter Field:=3, Criteria1:=Array("%") _ , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) の部分でエラーが出てしまいます。どのように修正すればよいでしょうか?
回答を見る
  • ベストアンサー

エクセル2007のVBAでオートフィルタのチェック

エクセル2007のVBAでオートフィルタのチェックを閾値以上の%のみに入れたいのです。  ユーザー設定フィルタでは視覚的に解りつらい為、フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 【シート1の内容】 セルA1から行方向に数字の1~3 セルB1から行方向に、値1、値2、% セルA3~Bnは列方向に、整数 セルC3から列方向に、“=A3/B3”が入力されており、書式は パーセンテージ(小数点以下の桁数は“1”) セルD1に 閾値として 10.5%・・・書式はC3に同じ 【目的】 動きとしては、閾値以上の結果を出すつもりで書きました。 【質問】 フィルタがかかった▽をクリックした時に、1行、2行及びC列の10.5%以上のチェックボックスにチェックを入れたいのです。 しかし、下記コードの .AutoFilter Field:=3, Criteria1:=Array("%") _ , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) でエラーが出てしまいます。 実行時エラー '1004': Range クラスの AutoFilter メソッドが失敗しました。 Sub Threshol() Dim MaxRow As Integer Dim TargetCD Dim CDDiff As Integer Dim MinCD As Single Dim MaxCD As Single Dim i As Integer Dim j As Single MaxRow = Range("C1").End(xlDown).Row With ActiveSheet.Range(Cells(3, 3), Cells(MaxRow, 3)) MinCD = ThisWorkbook.Worksheets(1).Range("D1").Value * 100 MaxCD = Application.Round(Application.Max(.Cells) * 100, 1) CDDiff = (MaxCD - MinCD) * 10 ReDim TargetCD(1 To CDDiff + 1) For i = 1 To UBound(TargetCD) TargetCD(i) = FormatPercent(MinCD / 100 + j, 1) j = Format(j + 0.001, "#.###") Next .AutoFilter Field:=3, Criteria1:=Array("%") _ , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) End With End Sub 皆様、良いご助言を宜しくお願い致します。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

いや、スミマセン。お騒がせしちゃって。 うっかり確認が漏れていました。 というより、私の当初の見立ては大きく外れていて、 これは、実際XL2007環境で確認しないでいては、 そもそも無茶な話を振った私だったようです。 一応、2010での挙動と、問題点を挙げておきます。  .AutoFilter Field:=1, Criteria1:=">=" & MinCD, Operator:=xlAnd ↑これは、 > 動きとしては、閾値以上の結果を出す... という要求には適っていますが、 > フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 という要求からは外れています。  .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues ↑これは、 > フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 という要求には適っていますが、 > 動きとしては、閾値以上の結果を出す... という要求からは外れています。 ご提示のコード、私があげた2種類、何れもうまくいきません。 > セルC3から列方向に、“=A3/B3”が入力されており、書式は パーセンテージ(小数点以下の桁数は“1”) 表示上丸められた数字文字列が"10.5%"でも、実際の数値は10.5%未満のケースでは 閾値未満のものが抽出されてしまいます。 ※ここら辺↑は仕様が変わっていそうなので、2007では違う結果なのかも知れませんが、、、。 例を挙げます。 (1)  50/ 476=0.10504 (2)  50/ 477=0.10482 (3)  50/ 478=0.1046 > 閾値以上 は(1)だけですが、 > パーセンテージ(小数点以下の桁数は“1”) で表示させると、(1)(2)(3)ともに"10.5%"で "10.5%"を Operator:=xlFilterValues でフィルターにかけると (2)(3)も抽出されてしまいます。  10.5%未満の値で表示が"10.5%"のセルについては   10.5%以上の値で表示が"10.5%"のセルの有無によって   抽出されたりされなかったり、という結果になってしまいます。 比較的小さい数字で 10.5%未満の値で表示が"10.5%" になる例を挙げると   9/ 86=0.10465   11/ 105=0.10476   13/ 124=0.10484   15/ 143=0.1049   16/ 153=0.10458   17/ 162=0.10494   18/ 172=0.10465   19/ 181=0.10497   20/ 191=0.10471   . . . 結構、ありますね。 私がわかってないだけで(←仕様の違い、と、仕様そのもの) 何か、方法が別にあるのかも知れませんが、今私が知る限りでは、 > 動きとしては、閾値以上の結果を出す... > フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 ふたつの要求を同時に満たす為には、 C列の値(数式での丸め方、丸める桁)や表示(小数点以下の桁数)の方を工夫すること しか、思い浮かびません。 (↑10.5%未満の値で表示が"10.5%"のセル と 10.5%以上の値で表示が"10.5%"のセル  とが、見かけ上、異なる表示になるようにする、という意味です) ということで、お騒がせしたわりに、 私の回答では、要求仕様に応えるものが提示出来ていないようなのです。 申し訳ありません。他の回答をお待ちください。

mayu1992
質問者

お礼

cj_moverさま  深夜までご検討下さり、誠にありがとうございます。 代案の丸め方で再検討してみます。  今回も大変勉強になりました!!

mayu1992
質問者

補足

cj_moverさま  おはようございます。  閾値10.5%のままで、C列が10.45####%以上であれば、C列の見かけ上の10.5%を抽出&フィルタチェックが行えれば良いと考え、(今までもそこまでは厳密にしていなかったので。。。) ご回答頂いた、#3のSub Threshol_jj()の内、  MinCD = .Range("D1").Value - 0.0005 であれば、見かけ上ですが私の仕様を満足出来そうです。(本当に良いのかなとは思いますが) cj_moverさまとしては、いかが思われますでしょうか?

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

たびたびすみません、再度#1の訂正です。 "以上" を "より大きい" と思い込んでしまっていましたので 拙コード、不適切でした。 2か所、2文字ですが、プロシージャごと加筆再掲します。 Sub Threshol_j()   Dim TargetCD   Dim MinCD   Dim MaxRow As Long   Dim i As Integer   Dim Target As Range ' ">=閾値"で抽出済みの範囲   Dim r As Range ' Target 全セル ループ用   Dim CntTgt As Long ' ">=閾値"で抽出された個数   With ActiveSheet     .AutoFilterMode = False     MaxRow = .Range("C1").End(xlDown).Row     MinCD = .Range("D1").Value     With .Range("C2:C" & MaxRow)       .AutoFilter Field:=1, Criteria1:=">=" & MinCD, Operator:=xlAnd       Set Target = .SpecialCells(xlCellTypeVisible)       CntTgt = Target.Count       ReDim TargetCD(1 To CntTgt)       For Each r In Target         i = i + 1         TargetCD(i) = r.Text       Next r       .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues     End With   End With   Set Target = Nothing End Sub Sub Threshol_jj()   Dim TargetCD   Dim MinCD As Variant   Dim MaxRow As Long   Dim r As Range ' ループ用   With ActiveSheet     .AutoFilterMode = False     MaxRow = .Range("C1").End(xlDown).Row     MinCD = .Range("D1").Value     With .Range("C2:C" & MaxRow)       For Each r In .Cells         If r.Value >= MinCD Then TargetCD = TargetCD & " " & r.Text       Next r       TargetCD = Split(Mid(TargetCD, 2))       .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues     End With   End With End Sub #2007で使えれば、、、の話ですが(^^;

mayu1992
質問者

お礼

 度重なるご回答ありがとうございます。 ">="の部分は、私も修正してトライしておりました。 しかし、既に御気付きの通り#4の御回答の通りの結果となりました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

すみません。#1の訂正です。/// > 確認事項5■ ご提示の TargetCD は、配列。 Array()関数 は、Array("10.6%", "10.7%", "10.8%") のように 個々の値を指定しながら配列を作る時に使う関数。 Array()関数 の引数に配列を指定すると、返ってくるのは、 配列の中身が配列 になっている二段階配列(ジャグ配列)。 Criteria に指定する 配列 は一次元で十分なので Array(TargetCD) は単に TargetCD で足ります。 /// それと、 XL2007 と XL2010 で、フィルターの仕様が いろいろと異なっていることだけは承知しているのですが、 こちらでは2010しか確認できる環境がないので、 もし、頓珍漢な答えになっていた場合は、ごめんなさい。

mayu1992
質問者

お礼

 再度のご確認ありがとうございます。 #1で動作はXL2007でも確認出来ました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは 確認事項1■  ? Range("D1").Value -> 0.105  ? Range("D1").Text -> "10.5%" 今回抽出対象として扱うのは数値。 表示形式の如何を問わず、皆、数値です。 確認事項2■ .AutoFilter の引数 Criteria に指定する 配列 の中身は、文字列。 Range("any").Text で取得できるセルの表示内容(文字列)と同じものです。 確認事項4■ .AutoFilter で、タイトルを抽出条件に加えるのは必要ではないです。 確認事項5■ ご提示の TargetCD は、配列。 Array()関数 は、Array("9.9", "10.4", "10.6") のように 個々の値を指定しながら配列を作る時に使う関数。 Array()関数 の引数に配列を指定すると、返ってくるのは、 配列の中身が配列になっている二次元配列。 Criteria に指定する 配列 は一次元で十分。 Array(TargetCD) は単に TargetCD で足ります。 確認事項5■ 1列のRangeオブジェクトにAutoFilterを指定するのに > Field:=3 とすれば存在しない3列めを指定していることになり、エラーになります。 ご質問に対する直接的な回答■ > しかし、下記コードの > .AutoFilter Field:=3, Criteria1:=Array("%") _ > , Operator:=xlFilterValues, Criteria2:=Array(TargetCD) > でエラーが出てしまいます。 > > 実行時エラー '1004': > Range クラスの AutoFilter メソッドが失敗しました。  .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues で、いける筈です。 > j = Format(j + 0.001, "#.###") この行の意図は汲み取れませんでした。 備考■ 実在しているかどうかわからない値を Criteria 配列 に指定するのは必要以上のこと。 データによっては負荷が大きすぎちゃうんじゃないでしょうか。。     実在する値だけを追うように書いてみました(2種類)。 尚、当方、Excel2010にて動作の確認をしています。 1)一旦、">閾値"で、フィルターをかけ、  可視セル(抽出されたセル)を取得し、  セル数を取得→配列のサイズを再定義→各セルの表示文字列を配列に要素に設定。 Sub Threshol_j()   Dim TargetCD   Dim MinCD   Dim MaxRow As Long   Dim i As Integer   Dim Target As Range ' ">閾値"で抽出済みの範囲   Dim r As Range ' Target 全セル ループ用   Dim CntTgt As Long ' ">閾値"で抽出された個数   With ActiveSheet     .AutoFilterMode = False     MaxRow = .Range("C1").End(xlDown).Row     MinCD = .Range("D1").Value     With .Range("C2:C" & MaxRow)       .AutoFilter Field:=1, Criteria1:=">" & MinCD, Operator:=xlAnd       Set Target = .SpecialCells(xlCellTypeVisible)       CntTgt = Target.Count       ReDim TargetCD(1 To CntTgt)       For Each r In Target         i = i + 1         TargetCD(i) = r.Text       Next r       .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues     End With   End With   Set Target = Nothing End Sub 2)C列2行目から最下行まで、全セルをループして  閾値より大きい値を持つセルの表示文字列を " "半角スペース区切りで連結した文字列  を Split() 関数を使って配列にします。  (簡素化する為に、タイトル"%"の分だけ余計な条件を加えたままにしています) Sub Threshol_jj()   Dim TargetCD   Dim MinCD As Variant   Dim MaxRow As Long   Dim r As Range ' ループ用   With ActiveSheet     .AutoFilterMode = False     MaxRow = .Range("C1").End(xlDown).Row     MinCD = .Range("D1").Value     With .Range("C2:C" & MaxRow)       For Each r In .Cells         If r.Value > MinCD Then TargetCD = TargetCD & " " & r.Text       Next r       TargetCD = Split(Mid(TargetCD, 2))       .AutoFilter Field:=1, Criteria1:=TargetCD, Operator:=xlFilterValues     End With   End With End Sub 以上、ご参考になれば。

mayu1992
質問者

お礼

 早速のご回答誠にありがとうございます。 現実的には、200列程あり、それぞれフィルターの値を選択し、(フィルターを掛け、値を取得し 更にフィルターを掛け文字を取得し…)と何回かの過程を経て最終値を別のBookに反映するのが 目的なのです。 >確認事項1~2、4■  大変参考になりました。 >確認事項3■ >.AutoFilter で、タイトルを抽出条件に加えるのは必要ではないです。  2列目全てにフィルタを掛けると文字列が▽で見えなくなるのと、2列目の文字を検索するよりも 1列目の数字で検索するのが私としてはやりやすいので、タイトル(2列目)も条件に加えたいのです。 >確認事項5■ >1列のRangeオブジェクトにAutoFilterを指定するのに >> Field:=3 >とすれば存在しない3列めを指定していることになり、エラーになります。  前述の通り、実際は3列目では無く、質問を簡略コードに書き換えておりました。 もっと具体的且つ詳細に質問するべきでした。すみません。 >> j = Format(j + 0.001, "#.###") >この行の意図は汲み取れませんでした。  私のコードで確認した時に、最初は j = j + 0.001 でしたが、j の値が 1回目で 0.9####### と表示されたので、フォーマットしました。 >備考■ >実在しているかどうかわからない値を Criteria 配列 に指定するのは必要以上のこと。 >データによっては負荷が大きすぎちゃうんじゃないでしょうか。。  おっしゃる通りでございます。-100.0%未満も含まれる事があるのですが、最近質問したご回答を 引用出来るかなと思い。。。なにぶん超初心者なもので・・・ 皆さんはどこでどうやってVBAを勉強されたのでしょうか?? 私は、マクロを記録し、類似した質問を検索しカット&トライでなんとか効率を上げている事務員で 御座います^^;

関連するQ&A

  • エクセル2007のVBAでオートフィルタのチェック

     エクセル2007のVBAでオートフィルタのチェックを特定の日付のみに入れたいのです。 (同様の質問をしておりますが、質問の意図が伝わらなかった、意味不明だったのか、ご検討中なのか、こちらで再度質問させて頂きます。)  ユーザー設定フィルタでは視覚的に解りつらい為、フィルタの▽をクリックした時に、チェックがされている事を確認したいのです。 【シート1の内容】 セルA1から行方向に数字の1~4 セルB1から行方向に、日付、値1、値2、% ’日付は過去1年~未来1年分です。 セルA3から列方向に、書式は yyyy/m/d セルB3とC3から列方向に、ランダムな整数 セルD3から列方向に、“=B3/C3”が入力されており、書式は パーセンテージ(小数点以下の桁数は“1”) セルF2に 2012(年)、セルG2に 9(月)、セルH2に 閾値として 10.5% 【目的】 動きとしては、過去1年前~2012年9月末日までのデータの内、閾値以上の結果を出すつもりで書きました。 【質問】 フィルタがかかった▽をクリックした時に、指定した範囲の日付チェックボックスにチェックを入れたいのです。 試行錯誤の状態のコードで失礼します。 Selection.AutoFilter Field:=1, Criteria1:=Array("日付"), Operator:=xlFilterValues, _ Criteria2:=Array(buf) この部分のbufの記述方法が、わかりません。 Sub Sample1() Dim TargetDate As Date Dim YY As Integer Dim MM As Integer Dim DD As Date Dim EoD As Integer Dim MaxRow As Integer Dim i As Integer Dim buf As Variant Selection.AutoFilter YY = ActiveSheet.Range("F2").Value MM = ActiveSheet.Range("G2").Value DD = YY & "/" & MM & "/1" EoD = Day(DateAdd("d", -1, DateAdd("m", 1, DD))) MaxRow = Range("A1").End(xlDown).Row TargetDate = YY & "/" & MM & "/" & EoD 'TargetDate = Format(YY & "/" & MM & "/" & EoD, "m/d") 'TargetDate = DateValue(YY & "/" & MM & "/" & EoD) 'MsgBox TargetDate For i = 3 To MaxRow With Worksheets("Sheet1").Cells(i, 4) .Activate .FormulaR1C1 = "=R[-0]C[-2]/R[-0]C[-1]" .Style = "Percent" .NumberFormatLocal = "0.0%" End With Next i buf = "" For d = 0 To 365 ' If d = 0 Then ' buf = "2, " & """" & TargetDate - d & """" ' ElseIf d >= 1 Then ' buf = buf & ", 2, " & """" & TargetDate - d & """" ' End If ' If d = 0 Then ' buf = "2, " & """" & Format(TargetDate - d, "m/d/yyyy") & """" ' ElseIf d >= 1 Then ' buf = buf & ", 2, " & """" & Format(TargetDate - d, "m/d/yyyy") & """" ' End If 'buf = buf & " 2, " & """" & Format(TargetDate - d, "yyyy/m/d") & """" 'buf = buf & " 2, " & """" & DateValue(TargetDate - d) & """" 'buf = buf & "2, " & """" & DateValue(TargetDate - d) & """" 'If d <> 365 Then ' buf = buf & """" & DateValue(TargetDate - d) & """" & ", " 'Else ' buf = buf & """" & DateValue(TargetDate - d) & """" 'End If If d <> 365 Then buf = buf & """" & TargetDate - d & """" & ", " Else buf = buf & """" & TargetDate - d & """" End If 'Range("N1") = buf Next d Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=Array("日付"), Operator:=xlFilterValues, _ Criteria2:=Array(buf)   'ここでエラーを検出してます。 'Criteria2:=Array(2, "2012/3/5", 2, "2012/08/11", 2, "2014/5/6") End Sub 皆様、良いお知恵をお貸し下さい。。。 OSは、WinXPとWin7共動いて欲しいです。 宜しくお願い致します。

  • エクセルVBAのオートフィルタについて

    いつもお世話になります。 エクセル2007でVBAでオートフィルタを操作したいのですが、 一部うまくいきません。 以下の様なコードを書いて 日付で絞り込みたいのですが、 何も抽出されません。 リストを見てみると、変数はちゃんと入っており OK ボタンを押すとその日付で抽出されます。 何故VBAでの操作では抽出されないのでしょうか。 ご存じの方がおられましたら、よろしくお願いします。 Sub test() Dim mydate As Variant Dim rng3 As Range Dim fmt As Variant Dim objList3 As ListObject Dim wb1 As Workbook Dim wb2 As Workbook Dim wb4 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim sh4 As Worksheet Dim sh7 As Worksheet '----------------------------------------------------------------------- Set wb1 = Workbooks("301.xlsm") Set wb2 = Workbooks("1.xls") Set wb4 = Workbooks("2.xls") Set sh1 = wb1.Worksheets("@") Set sh2 = wb1.Worksheets("@@") Set sh3 = wb2.Worksheets("@@@") Set sh4 = wb2.Worksheets("@@@@") Set sh7 = wb4.Worksheets("@@@@@") '---------------------------------------------------------- sh2.Range("A1:z63").ClearContents With sh7 Set objList3 = .ListObjects("リスト1") fmt = .Range("A2").NumberFormatLocal mydate = Format(mydate, fmt) objList3.Range.AutoFilter Field:=7, Criteria1:=mydate objList3.Range.AutoFilter Field:=5, Criteria1:="test" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A2") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=5, Criteria1:=">=190" Set rng3 = objList3.Range.SpecialCells(xlCellTypeVisible) rng3.Copy sh2.Range("A20") objList3.Range.AutoFilter Field:=5 objList3.Range.AutoFilter Field:=7 End With Application.CutCopyMode = False Set rng3 = Nothing Set fmt = Nothing Set objList3 = Nothing Set wb1 = Nothing Set wb2 = Nothing Set wb4 = Nothing Set sh1 = Nothing Set sh2 = Nothing Set sh3 = Nothing Set sh4 = Nothing Set sh7 = Nothing End Sub (一部省略しています)

  • 「~以上、~以下」のオートフィルタの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

  • エクセルVBAのオートフィルタについて

    オートフィルタ後の範囲選択で教えてください。 1行目にタイトルがある表で Range("a1").AutoFilter Field:=2, Criteria1:="PC" Range("A1").CurrentRegion.Select と実行すると1行目のタイトル行を含めて商品がPCの行が セレクトされます。 オートフィルタを何度も実行した結果を別シートにまとめる為 2回目以降はタイトル行を含めずにセレクトしたいのですが やり方がわかりません。お知恵をお貸しください。

  • VBA のオートフィルタについて

    ExcelVBA初心者でございます。 2点質問がございます。 (1)エクセルVBAのオートフィルタの機能を使い、"マスタ0701"シートの13行目が”ABC”の行を、"検索結果"というシートにコピーしたいです。 以下のマクロを実行しますと、まず"マスタ0701"のB1のセル(13行目はブランク)がコピーされ、その下に13行目が”ABC”に該当する行がコピーされます。 なぜ、B1セルまでコピーされるのかご教示頂けますと幸いです。 (2)また検索結果だけでなく、オートフィルタのタイトル行もコピーするようにするにはどうしたら良いでしょうか? よろしくお願いいたします。 Sub 絞り込み() With Worksheets("マスタ0701").Range("A1") .AutoFilter Field:=13, Criteria1:="ABC" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") .AutoFilter End With End Sub

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

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 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 どなたか助けてください! 宜しくお願い致します。

  • 好みの列にフィルタをかけたいのですが・・?

    Windows XP Home Edition Excel 2002 変数関連の記述の仕方が間違っていると思いますが、 いろいろ試してみましたが、うまく実行できません。 何卒、ご教示お願い致します。 Sub オートフィルタtest() Dim i As Long Dim S As Range Dim Sdown As Range Set S = Selection.Cells(1, i) Set Sdown = Selection.Cells(2, i) Rows("6:6").AutoFilter Sheets(1).Activate Selection.AutoFilter Field:=i, Criteria1:=">=2", Operator:=xlAnd, _ Criteria2:="<3" With Range(Sdown, Sdown.End(xlDown)) .Interior.ColorIndex = 40 End With End Sub

  • 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&"*"の部分で 「構文エラー」になっているようなのですが… お分かりになる方教えてください。よろしくお願いします。

  • エクセル マクロ:文字変更

    教えてください。 sheet5にデータがあります。 マクロを実行すると、一番右の列のセルに○があると●と書き換える 一番右の列のセルに△があると▲と書き換えるコードを作成しています。 下記のコードでは時間がかかってしまいます。 省略 If Sheets("sheet5").Cells(r, cmax).Value = "○" Then Sheets("sheet5").Cells(r, cmax).Value = "●" 省略 AutoFilterを使用してマクロを作成しましたが、列に○と△が両方無いと 範囲指定したセルがすべて▲となってしまいます。 下記コードをどのように手直ししたらよいのか教えて頂けないでしょうか。 よろしくお願いします。 Sub 文字変更() Dim c As Integer Dim cmax As Integer Dim rmax As Long With Sheets("sheet5") rmax = .Range("A3").End(xlDown).Row cmax = .Range("A3").End(xlToRight).Column .Rows("1:1").Select Selection.AutoFilter For c = 2 To cmax Selection.AutoFilter Field:=c, Criteria1:="○" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "●" Selection.AutoFilter Field:=c, Criteria1:="△" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "▲" Selection.AutoFilter Field:=c Next c End With Selection.AutoFilter End Sub

  • エクセルのVBAの記述について

    VBAの記述についてなのですが、 Sub filter() Dim gyo As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Set ws1 = Worksheets("データ") Set ws2 = Worksheets("チーム") Application.ScreenUpdating = False ws2.Range("A4:BH30").Clear gyo = ws1.Range("A65536").End(xlUp).Row ws1.Activate With ws1.Range(Cells(4, 1), Cells(gyo, 6)) .AutoFilter Field:=1, Criteria1:="A" .SpecialCells(xlCellTypeVisible).Copy ws2.Range("A4") Selection.AutoFilter End With Application.ScreenUpdating = True End Sub ならプログラムははしるのですが、 14行目を .SpecialCells(xlCellTypeVisible).Copy ws2.Range(Cells(4, 1)) だと 「実行時エラー 1004 Rangeメソッドは失敗しました Worksheet オブジェクト」 とでるのですが、出来ないのでしょうか? Cells(4, 1)の1のところを変数にして変えていきたいのですが、よい方法はありますか。 よろしくお願いいたします。