データが変更されたときにExcelの自動フィルターを自動更新するにはどうすればよいですか?
使用例:1つのセルの値をフィルター処理された値に変更します。他に何もせずに現在の行が消えるのを見たいです。
データが変更されたときにExcelの自動フィルターを自動更新するにはどうすればよいですか?
使用例:1つのセルの値をフィルター処理された値に変更します。他に何もせずに現在の行が消えるのを見たいです。
回答:
テーブルを操作したときに、これが機能しないことがわかりました。フィルターはシート上ではなく、テーブル上にありました。このコードはトリックをしました
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
.AutoFilter.ApplyFilter
End With
End Sub
ここで情報を見つけました:http : //www.jkp-ads.com/articles/Excel2007TablesVBA.asp
シート名を右クリックし、[コードの表示]を選択して、以下のコードを貼り付けます。貼り付けた後、左上の[ファイル]の下にあるExcelアイコンをクリックするか、Alt-F11を入力してスプレッドシートビューに戻ります。
これにより、自動更新が有効になります。マクロをサポートする形式でファイルを保存することを忘れないでください.xlsm
。
Private Sub Worksheet_Change(ByVal Target As Range)
If Me.FilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With ActiveWorkbook
.CustomViews.Add ViewName:="Mine", RowColSettings:=True
Me.AutoFilterMode = False
.CustomViews("Mine").Show
.CustomViews("Mine").Delete
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub
Worksheet_Change
イベントにもとづくVBA / Macroを使用していますが、私のアプローチは少し異なります... OK、最初にコード、次に説明:
Private Sub Worksheet_Change(ByVal Target As Range)
' first remove filter
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1
' then apply it again
ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1, Criteria1:="<>0"
End Sub
(Alt+ F11キーの組み合わせを使用して、開発パネルを表示し、自動更新するフィルターを含むワークシートにコードを貼り付けます。)
私の例では、単一の列(この場合はL)に単純なフィルターがあり、データ範囲は1(見出しを含む場合もある)から126(行に十分な数を選択)の行にあると仮定しています承知しました)。操作は簡単です。シート上で何かが変更されると、指定された範囲のフィルターが削除/再適用され、更新されます。ここで少し説明が必要なのはFieldとCriteriaです。
フィールドは、範囲のオフセットの整数です。私の場合、列フィルターは1つしかなく、範囲は範囲の最初の1列(L)で構成されます(したがって、値として1を使用します)。
基準は、データ範囲に適用するフィルタを説明する文字列です。私の例では、L列が0と異なる行のみを表示したいと思います(したがって、「<> 0」を使用しました)。
それで全部です。Range.AutoFilterメソッドの詳細については、https://msdn.microsoft.com/en-us/library/office/ff193884.aspxを参照してください。
答えを統合するだけです:
ソリン言う:
シート名を右クリックし、[コードの表示]を選択して、以下のコードを貼り付けます。貼り付けた後、左上の[ファイル]の下にあるExcelアイコンをクリックするか、Alt-F11を入力してスプレッドシートビューに戻ります。
これにより、自動更新が有効になります。マクロをサポートする形式のファイルを.xlsmで保存することを忘れないでください。
そして、Chrisはこのコードを使用しました(2010年に私がやったばかりです)。
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
投稿を展開しないと、長い答えしか表示されません!;)
申し訳ありませんが、コメントするには担当者が不十分です。(管理者、これを上記のコメントに自由にカットしてください。)「Worksheet_ChangeイベントにもとづくVBA /マクロを使用しますが、私のアプローチ...」で始まるユーザー「danicotra」応答は、
「最初にフィルターを削除
」し、それを適用します再び
Excel 2007+を使用する場合の正しいソリューションです。ただし、.AutoFilter.ApplyFilterはXL03以前では無効であるため、以下の方法を示します。
本当の専門家と達人がコードを読んでくれることを願っています。なぜなら、それが最高の棚材料だと確信しているからです。おそらく、この答えに対する不可解な下票の数は、人々が以下で行われている良いことを見ると逆転する可能性があります。
danicotraは簡単な例を使用しました。実際には、より一般的にこれを行うことができます。ActiveSheetで次の(または他のシートオブジェクト)を想定します。
オートフィルターの範囲を保存します。.AutoFilter.Filters.Count列と(.AutoFilter.Range.Count / .AutoFilter.Filters.Count)行があり、rngAutofilterに保存されます
.Onまたは.Operatorがfalseの場合、「アプリケーション定義エラー」を避けるように注意して、各.AutoFilter.Filters.Countオートフィルターアイテムの4つのプロパティのそれぞれをmyAutofilters配列に収集します。(myAutofiltersは、ステップ1の行と列の数に再調整されます)
フィルターをオフにしますが、.ShowAllDataでドロップダウンを保持します
保存された配列に従って.Onであった各フィルター項目について、各.AutoFilter.Filters.Count自動フィルター項目の4つのプロパティのうち3つをリセットします。.Operatorがfalseの場合は、「アプリケーション定義エラー」を回避するように注意してください。したがって、各項目「i」に対して、
rngAutofilter.AutoFilter Field:= i、Criteria1:= myAutofilters(i、2)
または
rngAutofilter.AutoFilter Field:= i、Criteria1:= myAutofilters(i、2)、Operator:= myAutofilters(i、3)、Criteria2:= myAutofilters(i、4)
これで、コードの開始前と同じ範囲でオートフィルターが再設定されますが、データの変更に応じてオートフィルターが更新されます。
Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
If iNumActiveAutofilters < 1 Then
Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
Exit Sub
End If
ActiveSheet.ShowAllData
Rem Here optionally do stuff which can include changing data or toggling autofilter columns
For i = 1 To iNumAutofilters
If myAutofilters(i, 1) Then
If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
Else
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
End If
Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
End If
'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
Dim i As Long, iRowsAutofiltered As Long
SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
ReDim myAutofilters(1 To iNumAutofilters, 4)
For i = 1 To iNumAutofilters
myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
If myAutofilters(i, 1) Then
SaveAutoFilterInfo = SaveAutoFilterInfo + 1
myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
End If
End If
Next i
iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function
Excelの「テーブルからのデータ」/パワークエリを使用して、ファイルを開くときにデータを更新するオプションを提供します。 (また、自動ソート、およびインデックス列(フィルタリングされた行の数を自動的に)) これにより、別のシートに結果が作成されます。 -マウスを使用して必要なデータを選択(行と列) -テーブルからデータタブをクリック -最後の列で、空白を除外します(塗りつぶされたセルのみを表示する場合はオプション) -列、インデックス列の追加(オプション、フィルター結果に行番号を追加する場合) -閉じてロードする もう一度編集するには、[クエリ]タブをクリックしてから[編集]をクリックします Excelの[デザイン]タブをクリックし、更新の下の矢印、接続プロパティ、 ファイルを開くときにデータを更新します。 適応:https://www.excelcampus.com/tips/sort-drop-down-lists-automatically/ パート:3. Power Queryを使用したドロップダウンリストのソート 空ではない場合、たとえばフィールドa1の場合、sheet1からデータをコピーすることもできます。 これをsheet2のa1フィールドにコピーします: = IF(Sheet1!A1 ""; Sheet1!A1; "")