前提・実現したいこと
VBAで、
テーブルフィルタにフィルタが絞られていたら解除して、
また再度フィルタを掛けなおす。
その後に、Sheet1にAutoincrementを振りたいと思っています。
上記実現したいことの中で
発生している問題・エラーメッセージ
errorは、
1. ActiveSheet.ListObjects(1).ShowAutoFilter 2. ActiveSheet.ListObjects(1).ShowAutoFilter = True
上記テーブルフィルターの解除、設定で
Ifを普通のフィルタのときのように、AutofilterModeと同じような記述が必要なのかで悩みました。
下記にコードを記載しましたが、正直かなり色々混乱してきてしまいました。
該当のソースコード
VBA
1Option Explicit 2Dim MaxRow As Long 3 4Public Sub AutoIncrement(ByVal MaxRow As Long) 5 '自動連番を設定 6 Dim i As Long 7 i = 0 8 Range("A2").Select 9 If MaxRow >= 2 Then 10 ' MaxRow の行数が2以上のときの処理(データのある最終行まで、連番を振る) 11 For i = 1 To MaxRow Step 1 12 ActiveCell.Cells(i, 1).Value = i 13 Next 14 Else 15 Range("A2").Value = 1 '"A2"セルに1のみを代入(1行しかないため 16 End If 17End Sub 18Public Sub テーブルフィルタ絞り込みクリア() 19 MaxRow = Range("A1").SpecialCells(xlLastCell).Row - 1 20 Range("A2").Select 21 'フィルターの状態によって、条件分岐 22 If ActiveSheet.ListObjects(1).ShowAutoFilter Then 23 'フィルターが絞りこまれているときの処理 24 ActiveSheet.ListObjects(1).ShowAutoFilter = True 25 26 Call AutoIncrement(MaxRow) 27 Else 28 ' ActiveSheet.ShowAllData ' 絞り込みを解除 29 ActiveSheet.AutoFilter 30 Call AutoIncrement(MaxRow) 31 End If 32End Sub 33Public Sub Enter_AutoIncrement_Sheet1() 34 ' 自動連番を振る 35 Worksheets("Sheet1").Select 36 Call テーブルフィルタ絞り込みクリア 37End Sub
上記コードの流れは、
0. Enter_AutoIncrement_Sheet1
0. テーブルフィルタ絞り込みクリア
0. AutoIncrement
になります。
試したこと
できているのは、
上記流れのうち、1と3です。
なので、AutoIncrementはCallで呼び出しています。
問題なのは、2で下記コードのIf文がすごくごちゃごちゃになっているかと思います。
(色々試行錯誤していて、こうなってしまいました。見づらくてすみません。)
VBA
1 If ActiveSheet.ListObjects(1).ShowAutoFilter Then 2 'フィルターが絞りこまれているときの処理 3 ActiveSheet.ListObjects(1).ShowAutoFilter = True 4 5 Call AutoIncrement(MaxRow) 6 Else 7 ' ActiveSheet.ShowAllData ' 絞り込みを解除 8 ActiveSheet.AutoFilter 9 Call AutoIncrement(MaxRow) 10 End If
ずっとテーブルフィルターについて調べていたのですが、
AutoFilterと重なってよくわからなくなってきました。
こうすると、より分かりやすい、簡単だよというのがあれば教えていただければと思います。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ExcelはOffice365なので、2016です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/01 13:26