ダウンロード

マクロコードを編集(EXCEL2007以降版)EXCEL2003以前版

手順に従って、マクロの記録と編集を行い、融通性の高いコードを作成していきます。

メニュー
問1.準備:マクロの記録
問2.編集:融通性の高い抽出条件
問3.編集:データ範囲を自動選択
ダウンロード(サンプルファイル)
リンクリスト
コメント参照/記入
解答を 全て展開 折り畳む



問1.準備:マクロの記録

問題

下図のコマンドボタンに以下の仕様のマクロを記録し、登録しなさい。

マクロ名はボタンと同じ名前とします。

データ抽出」ボタン − オートフィルタを用いて「」「30代」を抽出する。

すべて表示」ボタン − データを全て表示する。





ここで記録されたコードを変更することで、融通性の高いマクロを作成していきます。

完成例


解答例


1.フィルタをまず表示しておきます。

2.マクロの記録を開始し、マクロ名を「データ抽出」とします。

3.年齢のドロップダウンリストから、
 数値フィルタ → 指定の範囲内 をクリックし




 30以上 40より小さい として、「OK」をクリック




4.完成例のようにデータが抽出されたら、記録終了




記録されたコード

Sub データ抽出()
'
' データ抽出 Macro
'
'   Range("D7").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$6:$G$26").AutoFilter Field:=7, Criteria1:=">=30", _
        Operator:=xlAnd, Criteria2:="<40"
End Sub    

問2.編集:融通性の高い抽出条件


問題

問1で記録したマクロは操作した手順をそのままコードに変換しただけなので、記録した以上のことはできません。
つまり、融通性に欠けます。

しかし、記録したマクロの一部を書き換えるだけで、格段に実用性の高いマクロに改良することが出来ます。


セルA1:B3に条件を設定できる表を用意しました。


条件値は入力規則を利用してリストから選択できるようになっています。

リストの最後の項目「*」は何でもよいというワイルドカードです。


この条件表を利用してデータ抽出が出来るようにマクロを変更しなさい。



解答例



記録されたマクロを解析すると下のようになります。

これを
"男" → B1の値
">=30" → ">=" & B2の値
"<40" → "<" & B3の値

と変更すればよい。

は文字列を連結する演算子
セルB1の値を取り出すにはRange("B1").Valueを使います。

注: ">=B2" "<B3" としてはいけない。
   B2、B3という文字列と比較することになります。





問3.編集:表のデータ範囲を自動選択

問題

抽出結果を別シートに保存するマクロを記録して左のボタンに登録しなさい。
条件は「」「30代


記録する動作は以下のとおり。

@ 抽出結果を全て選択する。
A 「コピー」ボタンをクリックする。
B ワークシートを追加する。
C 追加したワークシートのセルA1をアクティブにして「貼り付け」ボタンをクリックする。
D 列幅を自動調整する。
E 元の「問3」のワークシートをアクティブにする。
F 「ESC」キーを押してコピーモードを解除する。

追加したワークシートを削除しなさい。
マクロをボタンに登録して実行しなさい。



抽出条件を「」、30以上50未満にして抽出し、「別シートに保存」を実行しなさい。

結果を確認してください−取りこぼしがあったでしょう!

解答例



これは、マクロで右のように選択範囲が固定されていることから不具合が発生しています。

そこでエクセルに「データが連続している範囲」を自動認識させまとめて選択する必要があります。
そのショートカットキーが Ctrl + 「*」 です。

表の中にカーソルを置きCtrl + 「*」 で抽出結果を選択するようにマクロを再度記録しなさい。

下のようにコードが変わったでしょう。
 下右図ピンク部分:表の中にカーソルを置く
 下右図部分:Ctrl + 「*」の操作



この Selection.CurrentRegion.Select が表を自動認識させるコードです。


CurrentRegion:「現在作業中の領域」を意味
  Current:現在の、最新の、進行中の
  Region:部(位)、領域

これで、表の開始位置(または何処かの確定部分)さえ判っていれば、
表の大きさに関係なくマクロを実行出来ます。

補足:入力データが1つも無い行、列を境界として認識
下図のような場合、データの入力されていないベージュ部分範囲の境界とします。
その外側にデータ入力セルがあっても無関係



最後に、条件を「」、30以上50未満にして正常に動作することを確認しなさい。



×
PageTop