• 締切済み

セルの値をCriteriaに入れる

オートフィルターでセルの値をCriteriaに入れるマクロを教えて下さい。

みんなの回答

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

補足です。 #1のマクロを読みきれているのかは分かりませんが、#2の表のようなものを想定して、以下のマクロを作ってみました。すぐに出来ると思いましたが、なかなかそうはいきませんでした。 Sub TestMacro1()   Dim iSh As Worksheet   Dim kSh As Worksheet   Dim myData As Range   Dim c As Variant   Dim i As Long   Dim j As Long   Set iSh = Worksheets("一覧表")   Set kSh = Worksheets("記入用")   Application.ScreenUpdating = False      With iSh   '検索用のデータの抽出   If .AutoFilterMode = True Then .AutoFilterMode = False     With .Range("G1", .Range("G65536").End(xlUp))       .AdvancedFilter _       Action:=xlFilterCopy, _       CopyToRange:=.Range("AZ1"), _       Unique:=True     End With     Set myData = .Range("AA2", .Range("AA65536").End(xlUp))     'オートフィルタで抽出     For Each c In myData       .Range("D1", .Range("G65536").End(xlUp)).AutoFilter _       Field:=4, _       Criteria1:=c.Value       With .AutoFilter.Range.SpecialCells(xlCellTypeVisible)       '抽出行の最後の行+1         j = .Cells(65536, 1).End(xlUp).Row + 1       End With       .Rows(j).Insert              '記入用のシートからコピーする列は、Resize(, 7) は、7列という意味       kSh.Range("A13").Resize(, 7).Copy .Cells(j, 1)     Next c     .AutoFilterMode = False     '検索用のデータの削除     .Range("AZ1").CurrentRegion.ClearContents   End With   Application.ScreenUpdating = True   Set myData = Nothing   Set iSh = Nothing   Set kSh = Nothing End Sub

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

こんにちは。 ご自身で考えられたのですね。私は、すぐに理解できませんでしたが、コードの書き方とかは別として、独特のアイデアで、それは非凡な発想だと思います。ここの掲示板では、そのコードで理解できる人ばかりではありませんが、そのコードなら、分かる人は、必ず評価してくれるはずです。やはり、最初にコードを書くべきだったと思います。 行を挿入して、そこに合計などを入れるのでしょうか。 今、別の方法を考えてみたのですが、パッと思いつきません。 通常は、以下のようになっていて、下にSelect を下げていく方法で、上と下の Cells(i,7).Value <>Cells(i+1,7).Value [7は、G列] というような方法をとりますが、特に、何千行という場合には、それは、いわゆる、ぬるいコードというしかありません。かといって、なかなかSort を使おうという発想にはなりません。Sort を使う真価は、大量の行がある時です。3万行程度でも、まったく、待たされることがなく、選び出します。 ここの質問は、最初だと思いますが、もう数回、頑張ってみるつもりがあるなら、私もお付き合いいたします。あまり、くだらないことを書くつもりはありませんが、もう少し、テクニック的なものが必要ですね。 こんなスタイルになるのでしょうか? 部署 -------- 営業1課 営業1課 営業1課 営業1課 営業1課 営業2課 <- 一行、挿入して、ペースト 営業2課 営業2課 営業2課

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

こんばんは。 例えば、こんな風に書きます。 なお、マクロのご質問では、なるべくコードを出したほうが回答が付きやすいです。 そうしないと、製作依頼のように思われて、敬遠されてしまいます。 Sub Test1()   Dim myCrite As String   myCrite = Range("F1").Value      If myCrite <> "" Then     Range("A1").CurrentRegion.AutoFilter _     Field:=1, _     Criteria1:=myCrite, _     Operator:=xlOr, _     Criteria2:="="   End If End Sub   

tomu2288
質問者

お礼

お礼遅くなって申し訳ございません。解決いたしました。 どうもありがとうございました。 質問は、記入用から一覧表の部署毎の一番下に挿入できるようにマクロを組みましたがまだマクロ初心者で部署毎にマクロを作ったので一つにしようと "Criteria1:="後に関数とか入れてみましたがだめだったので質問しました。コードは長いので以下一部をだします。 Sub 記入() Sheets("一覧表").Select Columns("D:G").Select Selection.AutoFilter Selection.AutoFilter Field:=4, Criteria1:="営業" Range("G1").Select Range(Selection, Selection.End(xlDown)).Select Dim x1 As Integer, y1 As Integer Dim z1 As Long y1 = Range("A:A").Column z1 = Range("G1").End(xlDown).Row With ActiveSheet For x1 = 1 To y1 Range(Cells(z1 + 1, x1), Cells(z1 + 1, x1)).Select Selection.EntireRow.Insert Sheets("記入用").Select Range("A13").Select Selection.Copy Sheets("一覧表").Select ActiveCell.Select Selection.PasteSpecial Paste:=xlValues Next x1 End With Dim x2 As Integer, y2 As Integer Dim z2 As Long y2 = Range("B:B").Column z2 = Range("G1").End(xlDown).Row With ActiveSheet For x2 = 2 To y2 Range(Cells(z2 + 1, x2), Cells(z2 + 1, x2)).Select Sheets("記入用").Select Range("B13").Select Selection.Copy Sheets("一覧表").Select ActiveCell.Select ActiveSheet.Paste Selection.Font.ColorIndex = 0 Next x2 End With

関連するQ&A

  • オートフィルタの項目設定

    オートフィルタにてあるセルに値(又は文字列)を入力すると、それに対応したフィルタをかけられるようにするにはどうしたらよいですか? Criteria1:= Range"A1".Value ではエラーが出ます。 マクロは記録のみでしか作成したことがない初心者ですがよろしくお願いします

  • ExcelVBA:オートフィルタをかけたシート上でのセル内の値参照について

    オートフィルタをかけた状態で、セル内の値を参照しても、オートフィルタがかかってないセル(隠れているセル)の値を参照してしまいます。 例えば、ある条件でオートフィルタをかけて、行が1,2、6,7、8・・・となって、3,4,5行が非表示になっているのにもかかわらず、 Range("A1").Offset(0, 2).Value を参照すると、6行目の値ではなくて、非表示の3行目の値を拾ってきてしまいます。 このように、オートフィルタをかけたシート上で値を参照する際に、非表示行を無視して行数取りし、値を参照したいのですが、何か方法はありますでしょうか? 上の例ですと、6行目のセルを3行目として扱いたいわけです。 どなたか、ご教授くださいませ。 よろしくお願い致します。

  • EXCElセルの値でフィルター抽出したい

    windows10,microsoft365使用の超初心者です。 Sub セルの値でオートフィルターで抽出しその行を削除したい() Range("D8").AutoFilter Field:=6, Criteria1:=Range("F4").Value, Operator:=xlAnd End Sub このコードでやっても、うまく抽出してくれません。 どうして出来ないのかわかりません。ご教示よろしくお願いいたします。 セルF4は、表示は「6月20日」数値は44002です。 セルD8は、表示は「令和2年6月分」で数値は44002です。

  • エクセルのオートフィルターをマクロで記録

    エクセルのマクロ記録でオートフィルター機能を記録したのですが フィルターのボタンを押して各項目を選択するのに (すべて) (トップテン) (オプション) (空白セル) (空白以外のセル)があるのですが (空白セル)を選択すると , Criteria1:"=" (空白以外のセル)だと , Criteria1:"<>" のようにマクロ記録されます (すべて)を選択した場合 , Criteria1:が記録されないのですが これをあえて構文として書くと、どのようになるのでしょう 他のマクロで引用したいので困っています よろしくお願いいたします

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

  • 可視セルのみで平均を計算

    Sheet1にある表をオートフィルタで抽出し、その可視セルの三列目にある値の平均値をSheet2のあるセルに出力するマクロを作りたいのですが、どうすればいいでしょうか? ↓これがキー 番号     名前      値 027***  あそこ     12 027***  こちら     0 027***  どちら     5   ・    ・       ・   ・    ・       ・   ・    ・       ・ 右の値の平均値をSheet2に出力

  • エクセルのセルにある同じ値が何件あるかを調べたいのですが・・

    教えてください。 マイクロソフトエクセルで各セルの値が何件あるかを調べたいのです。 例えば A1セルに4300 A2セルに1500 A3   1000 A4   4300 A5   1000 ・・・・・ など同じAセルに約300近くの値が入っていたとします。 この場合 4300 は 2件 1500 は 1件 1000 は 2件など「件」はつかなくて数値だけでも助かります。 代金の返金をする時に紙幣や硬貨を用意する為に同じ値がいくつあるかが知りたいです。 オートフィルタで同じ数値だけを出す方法もありますが、こちらの方法で出来ることでしたら教えて下さい。 宜しくお願い致します。 エクセルのバージョンは古くて2002です。

  • エクセルのオートフィルタの条件にセルの値を入れる。

    エクセルのオートフィルタを使用した際、条件の中に【A月B日以上】【C月D日以下】としたいのですが、その【A月B日】【C月D日】を、それぞれあるセルに入力した値にしたいのですが、どのようにやればよいですか? 当然、毎回日付は変更します。 マクロでできる方法を教えて下さい。 よろしく御願いします。

  • オートフィルタ 検索

    オートフィルタで三つの条件でデータを抽出するマクロを作っています 以下のような記述は誤りでしょうか? ActiveSheet.Range("$B$2:$D$114").AutoFilter Field:=1, Criteria1:="=02722*" _ , Operator:=xlOr, Criteria2:="=02729*" _ , Operator:=xlOr, Criteria3:="=02737*" 表はこのようなものです ↓キー 番号      名前      値 027**     **     * 027**     **     * 027**     **     * ・ ・ ・

  • エクセルのマクロ・Criteria1:=の扱いについて

    エクセルのマクロ・Criteria1:=の扱いについて お世話になっております。 エクセルで、「部署全体で担当している案件の一覧」を月ごとにまとめております。 これを月初に、 フィルタで担当者別に案件表示し、それを手動で印刷して、各人に配布しているのですが、 マクロで処理したいと考えています。 記録マクロを使用し、フィルタでAさんを抽出し印刷という工程を 下記のとおり、確認したのですが --------------------------- Sub Macro1() ' ' Macro1 Macro ' ' ActiveSheet.Range("$A$2:$EJ$1503").AutoFilter Field:=10, Criteria1:="A さん" ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" ActiveWindow.SmallScroll Down:=81 End Sub ---------------------- Bさん、Cさんと順々に印刷させていくには、 上記と同様の内容のスクリプトをCriteria1:="B さん"に変えていくしか方法がないのでしょうか? これでは人数分スクリプトを用意しなくてはならず、また人員の変動のたびに Aさんは削除、Dさんを追加などと、手間がかかります。 月初毎にフィルタをかけて担当者別に印刷を行う効率の良い方法はないものでしょうか アドバイス等お願い申し上げます。

専門家に質問してみよう