› S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › 講座が始まります。
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
青色の部分を追加してあげれば、出来上がりです。
これは、以前の記事でも書きましたが、
自動化には欠かせない、考え方ですので憶えておくといいですよ。
こんな感じの講座をやっていきたいと思います。
受講者募集中!
「マクロの記録」で、ソート処理の記録を作りましたが、
データが゙増えると、うまく並び替えできません。どうしてですか?
というもの。
例えば、下のデータを参考に考えてみましょう。
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)