@フィルターのクリア
A所定の列で昇順に並び替え
B最終行の次の行にセルを移動
どんなファイルであっても検索と入力を兼ねるテーブルの場合はそれをルーチンとして常に行わなければなりません。
この3つの作業も面倒なのでマクロで自動化してしまいましょう。
そして、同じショートカットキーにマクロを登録しておくとどんなファイルでも同じショートカットでマクロを実行させることができます。
例えば、こんな受注データがあります。
今、氏名が"高橋良男"でフィルターをかけ商品コードでソートして、何かデータの検索を行っています。
で、検索の作業が終了し、新たなデータを入力しなければならなくなりました。
と、上の@~Bの作業を手動でやらなければなりませんが、マクロで実行するとショートカットキーを押すだけで、
こんな感じに一発でフィルターがクリアされて受注コードで昇順でソートしてデータが入力する位置に選択セルが移動されます。
下の方にこのサンプルファイルのリンクが貼ってあります。
構成は、
Macro1_フィルターのクリア
Macro2_昇順に並び替え
Macro3_最終行の下に移動
Macro4_マクロの自動実行
の4つのマクロを作成します。
それでは、実際のVBAを見ていきましょう。
このままコピペしても使えます。
まず、フィルタをクリアするマクロでです。
ここでのポイントはフィルタを解除する時にフィルターがかかっているかどうかをif文で確認することです。
フィルターがかかっていない時はこのマクロを実行しない様にしています。
何故かと言うと、フィルターがかかっていないのにフィルター解除のマクロを実行するとエラーになってしまいます。
Sub Macro1_フィルターのクリア()
'ワークシート“受注マスタ”を選択
Worksheets("受注マスタ").Select
'セルA2(データの左上)を選択
Cells(2, 1).Select
'もしフィルターがかかっていたら
If ActiveSheet.FilterMode Then
'フィルターを解除する
ActiveSheet.ShowAllData
End If
End Sub
実際のVBAのコードウィンドウです。
次は、昇順に並び替えるマクロです。
Sub Macro2_昇順に並び替え()
'テーブル1の“受注コード”で昇順に並び変える
Call Range("テーブル1").Sort(Key1:=Range("テーブル1[受注コード]"), Order1:=xlAscending, Header:=xlYes)
End Sub
実際のVBAのコードウィンドウです。
次は、新たなデータ入力のために最終行の下に選択セルを移動させます。
Sub Macro3_最終行の下に移動()
'変数n
Dim n
'ワークシート“受注マスタ”を選択
Worksheets("受注マスタ").Select
'セル“A2”からデータのある最終行番号を変数nに保管
n = Range("A2").End(xlDown).Row
'列Aの最終行の継の行を選択
Cells(n + 1, 1).Select
End Sub
実際のVBAのコードウィンドウです。
最後はこれらの一連のマクロを実行するマクロです。
Sub Macro4_マクロの自動実行()
'Macro1を実行
Call Macro1_フィルターのクリア
'Macro2を実行
Call Macro2_昇順に並び替え
'Macro3を実行
Call Macro3_最終行の下に移動
End Sub
実際のVBAのコードウィンドウです。
サンプルExcelファイル:North Wind_20200209.zip
前のページ:
次のページ:
関連ページ
・Excel VBA メニュー
・VBAを使えるようにしてみました!
最近はもう何が起きるかわからなくなってきましたねー。
と、言うわけで一家に一台ソーラー発電!