私はこのVBAを書いています。しかし、大部分の値は自分自身で何度も繰り返されています。以下のコードをループに変換できるかどうかは疑問です。確かにこれは何らかの方法で最適化することができますが、特に "オートフィルタ"が1つの "フィールド"を持つことができるかどうかを確認するのは苦労しています。何か案が?オートフィルタモードの最適化
With Sheets(7)
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=14, Criteria1:="america"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(18, 2) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=14, Criteria1:="asia"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(19, 2) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=14, Criteria1:="europe"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(20, 2) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=14, Criteria1:="africa"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(21, 2) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=15, Criteria1:="america"
.Range("A:E").AutoFilter Field:=12, Criteria1:="red"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(18, 3) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=15, Criteria1:="asia"
.Range("A:E").AutoFilter Field:=12, Criteria1:="green"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(19, 3) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=15, Criteria1:="europe"
.Range("A:E").AutoFilter Field:=12, Criteria1:="yellow"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(20, 3) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=15, Criteria1:="africa"
.Range("A:E").AutoFilter Field:=12, Criteria1:="dark red"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(21, 3) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=17, Criteria1:="america"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(18, 5) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=17, Criteria1:="asia"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(19, 5) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=17, Criteria1:="europe"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(20, 5) = j
.AutoFilterMode = False
.Range("A:E").AutoFilter Field:=1, Criteria1:="=*apple"
.Range("A:E").AutoFilter Field:=17, Criteria1:="africa"
j = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Sheets(15).Cells(21, 5) = j
.AutoFilterMode = False
End With
クイック質問 - 第4回最後の行は.Range(「A:E」)と言う:しかし、あなたはこのようにそれをラップすることができますオートフィルタフィールド:= 17、Criteria1:=」。 africa "これは.Range(" A:E ")にする必要があります。オートフィルタフィールド:= 17、Criteria1:=" africa "? – Jeremy
'Sheets(15)'にいくつかのCOUNTIFS式を置いたほうが良いかもしれません。 – Rory
[コードレビューサイト](http://codereview.stackexchange.com)を使用して、作業コードのコードレビューをリクエストする方がよいでしょう。 –