With WorkSheet("sheet1") .Range("A1").AutoFilter _ Field:=1,Criteria:="りんご" ' --- 検索のkeywordはりんごで、A列即ち、Field:=1だ EndWith WorkSheets("Sheet2").Cells(1,1).Value = WorksheetFunction.Subtotal(4,Worksheets("sheet1").Range(E:E)) '4 means MAXMAX+IFに対して、Autofilter+SubtotalのVBAコードは、1ケタぐらい所要時間が短縮できた。つまり、120分が10分ぐらいになった。
2020年1月3日金曜日
MAXIFSは重たいのでどうするか?VBAを組んでみた。
MAXIFS(MAXIF)は、EXCEL2016+365以降のため、365なしの場合、MAXとIFに配列数式{}(Alt+Shift+Enter)で代替する訳だが、これが相手するデータ量が大量だともの凄く時間がかかり、とても実用には適さない。そこで、これはもう、VBAを組むしかなくなる。
つまり、IFの代替としてのフィルターAutofilterで条件(例えば、A列に*りんご*というKeywordが含まれる。*はワイルドカードで含まれるという条件を実現する)となる行を絞り、MAX関数の代替としてのworksheetFunction:=subtotal(4,Range(targetRow:tagetRow))でターゲットの列(例えばE列)の最大値を求めればよいだけだ。たとえば、Sheet2のCells(1,1)つまり、Rnage("A1")に結果を入れる。
登録:
投稿 (Atom)