[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルターのカウントが違うのは何故ですか』(師走)
シート1のB列とC列からオートフィルターでシート2の値を参照して結果をシート2へ転記していますが、シート1の2条件で抽出された表示は「8」あるのですが、シート2のセルC3には「4」とカウントされます。どこが間違っているのかおしえてください。
Sub オートフィルタ他シートに入力されているセル値参照()
Dim Sht1 As Worksheet
Dim Sht2 As Worksheet
Dim Buf1 As String
Dim Buf2 As String
Dim Count As Long
Set Sht1 = Sheets("Sheet1") Set Sht2 = Sheets("Sheet2") Buf1 = Sht2.Cells(3, 2).Value Buf2 = Sht2.Cells(2, 3).Value 'フィルターでデータ抽出 Sht1.Range("B2").CurrentRegion.AutoFilter Field:=2, Criteria1:=Buf1 Sht1.Range("B2").CurrentRegion.AutoFilter Field:=1, Criteria1:=Buf2 Count = WorksheetFunction.Subtotal(3, Range("B2").CurrentRegion.Columns(1)) Worksheets(2).Activate Range("C3").Value = Count - 1 End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
> Count = WorksheetFunction.Subtotal(3, Range("B2").CurrentRegion.Columns(1)) ~~~~~↑~~~~~~ ここらが怪しい(どのシートのB2が不明瞭)
Count = WorksheetFunction.Subtotal(3, Sht1.Range("B2").CurrentRegion.Columns(1)) ’ではどうか?
(半平太) 2022/12/02(金) 15:45:16
Sub 別案() With Sheets("Sheet1").Range("B2").CurrentRegion .AutoFilter Field:=2, Criteria1:=Sheets("Sheet2").Range("B3").Value .AutoFilter Field:=1, Criteria1:=Sheets("Sheet2").Range("C2").Value
Sheets("Sheet2").Range("C3").Value = .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 End With End Sub
(もこな2) 2022/12/02(金) 16:40:59
(もこな2) 2022/12/02(金) 17:35:08
■1
[[20221202113059]]で学習されたかとおもいますが、CurrentRegionプロパティで取得できるのは、そのセルが【含まれている表範囲】です。
したがって↓で取得できるセル範囲の左上はB2セルとは限りません。
Sheets("Sheet1").Range("B2").CurrentRegion
そして、大抵の場合↓は同じ結果になるとおもいます。
Sheets("Sheet1").Range("B2").CurrentRegion.AutoFilter Sheets("Sheet1").Range("B2").AutoFilter
また、オートフィルタが設定されている場合は、↓のようにすればその範囲が取得できます。
Worksheets("Sheet1").AutoFilter.Range
したがって、本件では、必ずしも「CurrentRegion」を使う必要は無いと思います。
■2
>カウントできませんでした。
リンク先を読んで理解できたとおもいますが、オートフィルタで「と等しい」で絞り込むには↓のようなルールがあるわけです、
AutoFilterメソッドの引数Criteria1には「文字列型」を指定しなければいけない
ですが、【セルC2の値は日付】ならば「Range("C2").Value」で取り出されるのは"シリアル値"ですから、<<抽出に失敗>>してたわけですね。
よって、カウント自体は正しく"0"件になっていたとおもいます。
そのうえで「Range("C2").Value」が"シリアル値であって「Field:=1」が日付が入っている列ならば、↓のようにすれば、正しく抽出できたでしょう。
.AutoFilter Field:=2, Criteria1:=Sheets("Sheet2").Range("B3").Value .AutoFilter Field:=1, Criteria1:=">=" & Sheets("Sheet2").Range("C2").Value, Operator:=xlAnd, Criteria2:="<" & Sheets("Sheet2").Range("C2").Value + 1
■3
ちなみに、いちいちオートフィルタで抽出しなくても、(Sheet2シートの)C3セルに↓の数式を設定すれば事足りそうな気がしますが、それではダメだったんですか?
=COUNTIFS(Sheet1!C3:C33,B3,Sheet1!B3:B33,C2) ※セル範囲は適当
(もこな2) 2022/12/03(土) 14:27:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.