前提・実現したいこと
オートフィルターのVBAで教えてほしい事があります。
Excelで在庫管理をしようとしています。
DATAにA列からE列で記載された条件を用いて一個づつSheet1にフィルターをかけて、Sheet2に記載していきたい。
Private Sub CommandButton1_Click() Dim aaa As Variant aaa = Array(2, 4, 6, 7, 9, 10) Dim MotoRng As Range Set MotoRng = Worksheets("Sheet1").Range("A1") With Worksheets("Data") Dim maxRow As Long maxRow = .Range("A" & Rows.Count).End(xlUp).Row '"Data"の2行目から順にループ処理 Dim rw As Long, cl As Long For rw = 2 To maxRow MotoRng.AutoFilter 'AutoFilter解除 '2, 4, 6, 7, 9, 10列を条件にフィルタをかける For cl = 2 To UBound(aaa) MotoRng.AutoFilter cl, .Cells(rw, cl).Value Next 'フィルタをかけた"Sheet1"のデータを"Sheet2"に追加コピーする With Worksheets("Sheet2") Dim Sheet2MaxRow As Long Sheet2MaxRow = .Range("A" & Rows.Count).End(xlUp).Row + 1 MotoRng.CurrentRegion.Copy .Range("A" & Sheet2MaxRow) End With Next End With
追加
VBA
1Private Sub CommandButton1_Click() 2Dim aaa As Variant 3 aaa = Array(2, 4, 6, 7, 9, 10) 4Dim MotoRng As Range 5 Set MotoRng = Worksheets("Sheet1").Range("A1") 6 7 8 With Worksheets("Data") 9 Dim maxRow As Long 10 maxRow = .Range("A" & Rows.Count).End(xlUp).Row 11 '"Data"の2行目から順にループ処理 12 Dim rw As Long, cl As Long 13 For rw = 2 To maxRow 14 MotoRng.AutoFilter 'AutoFilter解除 15 '2列目から6列目までを条件にフィルターをかける 16 For cl = 0 To UBound(aaa) 17 Debug.Print cl 18 Debug.Print rw 19 20 MotoRng.AutoFilter aaa(cl), .Cells(rw, cl + 1).Value 21 Next 22 'フィルターをかけた"Sheet1"のデータを"Sheet4"に追加コピーする 23 With Worksheets("Sheet4") 24 Dim Sheet4MaxRow As Long 25 Sheet4MaxRow = .Range("A" & Rows.Count).End(xlUp).Row + 1 26 27 28 Intersect(Range("A1").CurrentRegion, Range("B:B,D:D,G:G,M:M")).Copy _ 29 Sheets("Sheet4").Range("A" & Sheet4MaxRow) 30 End With 31 Next 32 End With 33 34 MotoRng.AutoFilter 'AutoFilter解除 35 36End Sub 37
コードは「コードの挿入」で記入してください。
>規則性のない場合の方法を探しています
配列を使用してはどうでしょうか? ※配列を知らない場合は調べてください。
すみません。「コードの挿入」しました。
配列も試して、コードを追記してみましたが、うまくできませんでした。(コード追記しました)
「オートフィル」と「オートフィルター」は別の機能ですので、タイトルと質問文内の「オートフィル」の修正をお願いします。
エクセルのオートフィルで連続データをサクっと入力 https://www.becoolusers.com/excel/autofill.html
ありがとうございました。誤記修正いたします。
回答2件
あなたの回答
tips
プレビュー