2014年02月26日

講座が始まります。

マクロの講座や勉強会でよく質問にあがるのが、

「マクロの記録」で、ソート処理の記録を作りましたが、
データが゙増えると、うまく並び替えできません。どうしてですか?
というもの。


例えば、下のデータを参考に考えてみましょう。

Sheet1
講座が始まります。


Sheet1のデータを売上金額の多い順に並べ替える処理を記録します。

マクロの記録の手順でいくと、

「マクロの記録」開始

①Sheet1をクリック
②セルA1をクリック
③ショートカットキー(Shift + Ctrl + :)
 ※対象データが選択される。
④並べ替えをクリック(データタブ)
  売上/降順でソート実行
⑤セルA1をクリック

「マクロの記録」終了


マクロを実行してみましょう。
講座が始まります。


うまくいきました。

では、2月6日のデータを1件追加してみましょう。


講座が始まります。

先ほどの、マクロを実行してみましょう。

講座が始まります。

追加された2月6日のデータがソートされてません。

なぜ?・・・というもの。


記録されたマクロをみてみましょう。

Sub ソート()
'
' ソート Macro
'
'
Sheets("Sheet1").Select
Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C6"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C6")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub


「マクロの記録」の手順の中で、

③ショートカットキー(Shift + Ctrl + :)

をしました。

データが何件増えても、選択できるようにという思いで、
行った操作のつもりです。

でも、その下のソート処理でことごとく、くずされてしまいます。
下線の部分で、しっかり範囲指定がされています。

これでは自動化の意味がありません。

オートフィルターやソートの「マクロの記録」は、このような仕組みみたいですね。

こんな時、VBAを少し勉強すれば、すんなり解決できるんですよ。

方法はいくつかありますが、わかりやすい方法でいくと、
データの最終行を取得するというやり方です。


Sub ソート()
'
' ソート Macro
'

'
Sheets("Sheet1").Select

Range("A1048576").Select
x = Selection.End(xlUp).Row

Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C" & x), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C" & x)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub

青色の部分を追加してあげれば、出来上がりです。

これは、以前の記事でも書きましたが、
自動化には欠かせない、考え方ですので憶えておくといいですよ。

こんな感じの講座をやっていきたいと思います。

受講者募集中!





Posted by ミール at 19:12│Comments(0)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。