| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Excel VBA オートフィルタをシート間で同期

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Excel VBA オートフィルタをシート間で同期

Excel | Excel VBA |

オートフィルタの状態をシート間で同期させる

  1. Sub SyncAutoFilter()
  2. Dim srcSht As Excel.Worksheet '同期元のシート
  3. Dim dstSht As Excel.Worksheet '同期元のセル
  4. Dim srcCell As Excel.Range '同期元のシート
  5. Dim dstCell As Excel.Range '同期先のセル
  6. '対象セルの位置
  7. Dim r As Integer
  8. Dim c As Integer
  9. r = 2
  10. c = 1
  11. '同期元情報を変数にセット
  12. Set srcSht = Application.Sheets("Sheet1")
  13. Set srcCell = srcSht.Cells(r, c)
  14. '同期先情報を変数にセット
  15. Set dstSht = Application.Sheets("Sheet2")
  16. Set dstCell = dstSht.Cells(r, c)
  17. '同期処理
  18. Dim idx As Integer 'AutoFilter index
  19. Dim fld As Integer 'フィルタの対象となるフィールド番号(リストの左側から数えた番号)
  20. idx = 1
  21. fld = 1
  22. If srcSht.AutoFilter.Filters(idx).On Then
  23. Select Case srcSht.AutoFilter.Filters(idx).Operator
  24. Case 0
  25. '条件指定なし
  26. dstCell.AutoFilter Field:=fld, _
  27. Criteria1:=srcSht.AutoFilter.Filters(idx).Criteria1
  28. Case xlAnd, xlOr
  29. '条件指定 ANDOR
  30. dstCell.AutoFilter Field:=fld, _
  31. Criteria1:=srcSht.AutoFilter.Filters(idx).Criteria1, _
  32. Operator:=srcSht.AutoFilter.Filters(idx).Operator, _
  33. Criteria2:=srcSht.AutoFilter.Filters(idx).Criteria2
  34. Case xlTop10Items, xlBottom10Items, xlTop10Percent, xlBottom10Percent
  35. '条件指定 上位、下位の件数、%
  36. dstCell.AutoFilter Field:=fld, _
  37. Operator:=srcSht.AutoFilter.Filters(idx).Operator
  38. Case Else
  39. 'NOP
  40. End Select
  41. Else
  42. ' フィルタの解除
  43. Call dstCell.AutoFilter(fld)
  44. End If
  45. End Sub