Worksheets("main").Sort.SortFields.Clear
Worksheets("main").Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Worksheets("main").Sort
.SetRange Range("A2:G317")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
以下、コメントです。
'option explicit 入れましょう!念のためですが、初期設定は導入編でお伝えしたとおりにやっていますか?
'部分だけでなく、これらを呼び出す全体制御のマクロとも連動するところまで作ってみましょう。それで何度か動作確認したら、[*]の問題にも気づけたかも。
Sub GyoNarabekae2()
Dim wsFm As Worksheet
Dim cnt As Long
Dim InFmMx As Long
Set wsFm = Worksheets("main")
InFmMx = Range("B" & Rows.Count).End(xlUp).Row
wsFm.Range("A1").Value = "日付"
'■■■■■Autorfillを使ってみる。
'最低、2つのセルへの入力が必要です。以下だと、すべての行に値「1」が入ってしまいます。(excel2007で動作確認した場合) [*]
With Range("A2")
.Value = 1
.AutoFill Destination:=Range("A2:A" & InFmMx)
End With
wsFm.Range("A1:G" & InFmMx).Sort Key1:=Range("B1"), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
Sub Narabekae2() '通常の.sortで十分なのでノーコメントです。
'■並べ替えでAutofilterを使ってみる。
Dim wsFm As Worksheet
Dim InFmMx As Long
Set wsFm = Worksheets("main")
InFmMx = Range("B" & Rows.Count).End(xlUp).Row
wsFm.AutoFilterMode = False
wsFm.Range("A1").AutoFilter
wsFm.Range("A1").AutoFilter.Sort.SortFields.Add Key:=Range("B1"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("main").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1:A" & InFmMx).ClearContents
End Sub
Sub Keisen2() '↓よく書けていると思います v(^^*
'■sub keisennでSelectionを削除したマクロ
Dim InFmMx As Long
InFmMx = Range("B" & Rows.Count).End(xlUp).Row
With Range("B16:K" & InFmMx)
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlHairline
End With
End With
End Sub
Sub GyoModosu2()
'■■■■■■■行を戻すマクロ
Dim wsFm As Worksheet
Dim InFmMx As Long
Set wsFm = Worksheets("main")
InFmMx = Range("B" & Rows.Count).End(xlUp).Row
wsFm.Range("A1:G" & InFmMx).Sort Key1:=Range("A1"), _
Order1:=xlAscending, _
Header:=xlYes
Range("A1:A" & InFmMx).ClearContents
End Sub
三橋さんの投稿
(投稿ID: 3580) 添付ファイルのダウンロード権限がありません
お世話になります。
小川さんのコメントに従い早速トライをしてみました。
添付ファイルのModule2に新たに書きました。
>[1]
> '↓autofillを使った方法も検討してみてください v(^^
> For cnt = 2 To InFmMx
> wsFm.Range("A" & cnt).Value = cnt
> Next
Sub GyoNarabekae2がそれに当たります。
お恥ずかしながら、うまくいきませんでした。
始まりを「1月」のように文字列にするとうまくいくのですが、単純に数字を入れようとすると、A列がすべて1になってしまいました。
おかしいと思い文字列の"1"から始めてみたりしたのですがうまくいきません。
申し訳ございません、ご教示いただけると助かります。
> [2]
>Sub Keisen では、 Select, Selection が登場しない書き方に
>書き改めてみてください。
小川さんのフォローメールセミナーをもとに加工しました。
sub Keisen2がそれに当たります。
ステップインで動きを見ていると、Selectionを使ったマクロでは最後に罫線がすべて書き出されていましたが、
Selectionを削除した今回提出したまくろでは、罫線を順番に引いていました。
>[3]
> Sub DenpyoZentai では、最後に、A列で並べ替えましょう。
>そうすると、マクロ実行前の状態に復元できます。
sub GyoModosu2がそれに当たります。
番外編ですが
Autofilterを使ってならば替えをしたらどうなるか、と思いトライしてみました。
Sub Narabekae2がそれに当たります。
Sortメソッドは1行で済むのに、Autofilterを使ってソートをしようとすると、こんなに多くの行が必要になるんですね。
ファイルがまた壊れているようでしたら、ご連絡いただければ、質問感想フォームに書き出します。
よろしくお願いいたします。
小川 慶一さんのコメント
(コメントID: 5062)
[1] ソース内へのコメント参照ください
[2] 全体制御するマクロに組み込むと挙動が見えてくるかと
[3], [番外編] AutofilterのSortではなく、エクセル2007以降の通常の.sortメソッドも試してみたいですね。
並べ替えについては、書くのが面倒かつ条件3つまでのときは、僕は2003までの書き方で書いています。
2007以降の.sortメソッドの記述も、慣れると味わいあって僕は嫌いではありません。あらかじめ既存の並べ替え条件すべてを削除するあたり、「伝票作成マクロ」の課題であらかじめ作成済伝票をすべて削除するのと思想が似ていますね。テキストも読んでみてください。
autofilterされていない状態で、自動記録しつつ、リボン [ホーム] → 編集グループ内の[並べ替えとフィルタ] から昇順か降順を選択。
すると、以下のようなマクロを得られます。
以下、コメントです。