Excelデータ並び替え | エクセルマクロを使用してデータを並び替える方法

このQ&Aのポイント
  • エクセルでデータの並び替えを行いたい場合、マクロを使用することで簡単に実現することができます。
  • マクロを利用することで、特定の条件でデータを並び替えることも可能です。
  • また、グループごとに並び替える際に、さらに名簿順に並び替えることも可能です。
回答を見る
  • ベストアンサー

(再)エクセル データ並び替え

前回、こちらで質問させて頂いた者です。 http://okwave.jp/qa/q7917475.html 一度は解決したのですが、 エクセルの表を作り変える必要が出てきて、セルの位置などが変わってしまい、 教えていただいたマクロではエラーが出てしまって並び替えができなくなってしまいました。 前回:1行目がタイトル行     データは2行目以降(A・B列は2行ずつ結合) ↓ 変更:4行目がタイトル行     データは5行目以降(A・B・C列は2行ずつ結合)     少し変わっただけなので、このへんかな~と勝手に見当をつけて自分でマクロをいじってみたのですが、検討違いのようでエラーばっかりで直りません(T0T) (マクロはとっても苦手です・・) 下のマクロが、以前の質問で回答してくださった方から教えていただいたマクロなんですが、 ここのどこを変えれば、変更後の表に対応できるようになりますでしょうか? どなたか教えてください~(>_<) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub 並び替え() 'この行から Dim i As Long Application.ScreenUpdating = False 'セルの分割 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 With Cells(i, 1) .UnMerge .Offset(, 1).UnMerge .Offset(1) = Cells(i, 1) .Offset(1, 1) = Cells(i, 2) End With Next i Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes _ , key2:=Cells(1, 2), order2:=xlAscending, Header:=xlYes 'セルの再結合 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row - 1 Step 2 Application.DisplayAlerts = False With Cells(i, 1) .Resize(2, 1).Merge .Offset(, 1).Resize(2, 1).Merge End With Next i Application.ScreenUpdating = True End Sub 'この行まで ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ また、わがままで申し訳ないのですが、グループごとに並び変えるときに、さらに名簿順になるように並び替えられると助かるのですが、何か文を追加することで、そういう並び替えになりますか? もし可能なら、それも教えて頂きたいです。 なにとぞ、よろしくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 前回のコードは無視して↓に変更してください。 間違いが2か所ありました。 Sub 並び替え2() Dim i As Long Application.ScreenUpdating = False 'セルの分割とよみ表示 Range("A:B").Insert For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 2 '↑5行目~C列の最終行まで2行おき(A・B列を挿入しているため、元のA列がC列に移動) With Cells(i, 1) .Value = Application.GetPhonetic(.Offset(, 2)) .Offset(, 1) = Application.GetPhonetic(.Offset(, 3)) .Offset(, 2).Resize(1, 3).UnMerge .Resize(1, 2).Copy .Offset(1) End With Next i '並び替え i = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(4, 1), Cells(i, 9)).Sort key1:=Cells(4, 1), order1:=xlAscending, Header:=xlYes _ , key2:=Cells(4, 2), order2:=xlAscending, Header:=xlYes '↑の Cells(i, 9) はA列最終行のG列(2列挿入しているため列番号が「9」となります。 '再結合 Range("A:B").Delete For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 With Cells(i, 1).Resize(2, 1) .Merge .Offset(, 1).Resize(2, 1).Merge .Offset(, 2).Resize(2, 1).Merge End With Next i Application.ScreenUpdating = True End Sub 何度も失礼しました。m(_ _)m

kumachandayo
質問者

お礼

tom04さん! 前回に引き続き、今回までも・・・! (実はtom04さん、見てくれないかな~と期待はしてました(笑))、 ほんとにほんとにご丁寧にありがとうございます。2回も書き込んで頂いて、恐縮です。 見ず知らずの者のために、時間を割いて頂いて・・・ほんとに感謝です。 そしてそして・・・ できました~!!! どど~って並び替えられました、感動。 マクロできる人ってほんとにすごいです。尊敬します。 そして、G列以降もデータがあるので、自分でいじってみたら、ちゃんと直せましたよ! わざわざ、直すときの説明をつけてくれたおかげです。 ほんとに助かりました!ありがとうございました!

その他の回答 (3)

回答No.4

やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。今回のように自力でメンテできないという問題があるし、サイト管理者による監視の目があるとはいえ、極端な場合は危険なコードがないとも言えません。 VBE 上で各単語にカーソルを置いて F1 キーを押せば、すぐヘルプが出ます。ネットで検索してもいいです。ヘルプ内で使われているような独特の用語については、ネットが効率的かもしれません。すぐに全てが理解できるということは、まず、ないと思いますが、いろんな課題に接するうちに、だんだん分かってきます。 No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。初心者であってもご自分がプログラマとなって内容を確認していれば、どこをどう修正したらこんなエラーが出たくらいは言えるし(恐らく今は、説明もできませんね?)、回答者が修正版を提示するときも、部分的に書く程度で済むかもしれません。 No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。

kumachandayo
質問者

お礼

>No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。 はい、ほんとにそのとおり・・・・。そういった批判もくるだろうなと思ってましたが、時間がなかったので、こちらの質問サイトを頼ってしまいました。反省しています。ほんとにtom04さんや、MackyNo1さんには頭が下がる思いです。 >やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。 はい、今回教えていただいたコードだけでも、ちゃんと勉強して理解します。今後も表の変更があると思いますし、その都度こうやって業務委託するわけにはいからないですからね(笑)努力してみます! >No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。 ぜひやってみます!!美しいコードなんて、私のような初心者には全然必要ないです(^^*) ご指摘ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

前回の質問でNo4の回答をしたものですが、マクロコードが理解できないのに回答をコピペするだけで問題を解決しようとすると、トラブルが発生したときに対応できなくなるのであまりお勧めできる管理方法とは言えません。 またマクロを使用する場合もエクセルの基本機能を十分駆使して作成するほうが簡単で効率的です。 例えば前回の質問のNo4で回答した方法は結合セルがある場合に並べ替える簡便な対処法ですが、これを自動的にマクロで実行させたいなら、「マクロの記録」を利用することで、コードを完全に理解できていなくても簡単に実行できます。 具体的には、開発タブの「マクロの記録」(Exce;2003以前なら「ツール」「新しいマクロの記録」)で適当な名前を付けて以下のような操作をします。 C5:C100セルを選択し(データの増加分を見込んで大きめに選択)右クリック「コピー」、D6:G100セルを選択して右クリック「形式を選択して貼り付け」で「書式」にして「OK」します。 つぎに、A5:G100セルを選択して「データ」「並べ替え」でご希望のご希望の並べ替えを行い、最後にD6:G100セルを選択して右クリック「セルの書式設定」の配置タブで「結合」のチェックを外して「OK」し、マクロの記録を終了します。

kumachandayo
質問者

お礼

おっしゃるとおりです。 マクロは以前、本を借りて読んでみましたが、ちんぷんかんぷんで、それ以来苦手です。 そして、お恥ずかしいことに、データの行や列が増えたり減ったりするだけでマクロのコードが使えなくなってしまうのも知りませんでした・・・・。 たった1行増えたりするだけでもエラーになってしまうのですね。 せめて、教えていただいたコードに書かれてる内容だけでも、きちんと調べて把握したいと思います。 それと、マクロの記録方法を教えて頂いてありがとうございます!! これならデータが増加しても対応できるんですね。 やってみます! ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 前回投稿した者です。 実は投稿後気になっていたのですが・・・ たまたま質問の表はグループ・氏名が「ひらがな」になっていたので、前回の方法でも何とか対処できたと思います。 漢字など含まれているのが普通だと思いますので、その辺も変えてもう一度コードを載せてみます。 尚、データはG列までだとしていますので、 もっと列がある場合はコード内のコメント部分で調整してみてください。 Sub 並び替え2() Dim i As Long Application.ScreenUpdating = False 'セルの分割とよみ表示 Range("A:B").Insert For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 2 With Cells(i, 1) .Value = Application.GetPhonetic(.Offset(, 2)) .Offset(, 1) = Application.GetPhonetic(.Offset(, 3)) .Offset(, 2).Resize(i, 3).UnMerge .Resize(1, 2).Copy .Offset(1) End With Next i '並び替え i = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(4, 1), Cells(i, 7)).Sort key1:=Cells(4, 1), order1:=xlAscending, Header:=xlYes _ , key2:=Cells(4, 2), order2:=xlAscending, Header:=xlYes '↑の Cells(i, 7) はA列最終行のG列 '再結合 Range("A:B").Delete For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 With Cells(i, 1).Resize(2, 1) .Merge .Offset(, 1).Resize(2, 1).Merge .Offset(, 2).Resize(2, 1).Merge End With Next i Application.ScreenUpdating = True End Sub こんなんではどうでしょうか?m(_ _)m

関連するQ&A

  • 離れたセル同士で並び替えが出来るようにしたい。

    複数のセルを結合させています。1つの項目が「L6」~「Q6」まで。2つ目の項目が「R6」~「S6」で結合されています。データは「L7」「R6」から下に数行あり(変動します) 「L6」の文字列をキーとして「R6」も一緒に昇順で表示させたい。 下記のVBAを作成したのですが、離れたセル同士では並び替え(ソート)が出来ないようです。お知恵をいただければ幸いです。宜しくお願い致します。 '◆「検索シート」のセルL7から指定範囲を解除する場合 Sub test1() Worksheets("検索シート").Range("L7").CurrentRegion.UnMerge Dim r As Range Dim ret Set r = Range("L6") ret = r.Sort( _ Key1:=Range("R7"), _ Order1:=xlAscending, _ Header:=xlYes) '◆「検索シート」のセルL7から指定範囲を結合する場合 Worksheets("検索シート").Range("L6").CurrentRegion.Merge End Sub

  • エクセルで多項目の並べ替えをしたい(2)

    エクセルのデータを並べ替えて整理するために先日質問をさせていただいた者です。 大変貴重なご回答をいただいたのですが、それを参考に試行錯誤しているうちに、とても複雑なマクロを作ってしまいました。 http://oshiete1.goo.ne.jp/qa3413127.html 回答ナンバー6さんの補足欄に書いています。 一応希望通りの動作はしてくれるのですが、#6さんの回答を見直しているうちに、私がとんでもない勘違いをしているような気がしてきて、再度作り直してみました。 これも一応の動作は確認できたのですが何か不安なので、詳しい方のご意見を伺いたいと思います。 データは各行それぞれA列からL列まで300行ほど入力されており、行数は随時増えていきます。 見出し行は第7行目にあり、データは8行目以降に入力されています。 この12列を、 「7(G列)→11→9→8→2・・・・→12,10(J列)」の優先順に並べ替えたいのですが、 下記のようなマクロで十分ということになるでしょうか。 空白セルも含みますが、H行には必ずデータが入るので[r1]でデータ最終行を特定しています。 Private Sub CommandButton1_Click() Dim r1 As Long Dim i As Variant Dim Incline As Integer Incline = xlDescending r1 = ActiveSheet.Range("H65536").End(xlUp).Row Application.ScreenUpdating = False With ActiveSheet For Each i In Array(10, 12, 1, 5, 6, 4, 3, 2, 8, 9, 11, 7) With .Range(.Cells(7, 1), .Cells(r1, 12)) If i = 7 Or i = 11 Then Incline = xlDescending Else Incline = xlAscending End If .Sort _ Key1:=.Cells(2, i), _ Order1:=Incline, _ Header:=xlYes, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin End With Next i End With Application.ScreenUpdating = True End Sub

  • マクロ 並び替え

    Sub 並べ替え() With Worksheets("Sheet1").Sort .SortFields.Clear .SortFields.Add Key:=Range("e6"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ CustomOrder:="金,銀,銅" .SetRange Range("a6:Cl16").CurrentRegion .Header = xlNo .Apply End With End Sub 6行目~16行目で並び替えを行ってほしいのですが、1行目から並び替えになります。 .SetRange Range("a6:Cl16").CurrentRegion と記入しているので6列目からになると思っていたのですが。 マクロ初心者のため詳しい方がいれば教えて下さい。

  • エクセルのマクロについて

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • 条件に合った行を削除するマクロについて

    こんにちは 今、現在、とある条件にあった行を削除するマクロ作っているのですが、 インターネットを調べてみると後ろから探索して、1行ずつ消していくのがいいと書いてありました。 まぁ、その理屈はわかるんですが、それなら 「Unionでセルの範囲を結合してから、最後に一度に消してしまった方が速いのでは」 (消す作業が1度だけで済むから) と思い試してみたんですが、実際試したところ・・・ ものすごく遅かったです。 (ちなみに、1万件のデータで削除した行数は6000ほどでした) 何故Union結合だと遅いのでしょうか? 速いマクロを作成するには、やはり後ろから探索して、1行ずつ消していくしかないのでしょうか? 以下は試したマクロです。 (test が unionで試したマクロ、test2が後ろから1行ずつ削除したマクロ) Option Explicit Public Sub test() Dim r As Range Dim r1 As Range 'Cells.Replace "-", " " For Each r In Range("A2", Range("A65536").End(xlUp)) If r = r.Offset(1, 0) And r.Offset(0, 1) < r.Offset(1, 1) Then If r1 Is Nothing Then Set r1 = r Else Set r1 = Union(r1, r) End If End If Next r1.EntireRow.Delete ' r1.Select End Sub Public Sub test2() Dim r As Range Dim r1 As Range Dim i As Integer 'Cells.Replace "-", " " Application.ScreenUpdating = False For i = Range("A65536").End(xlUp).Row To 1 Step -1 If Cells(i, 1) = Cells(i + 1, 1) And Cells(i, 2) < Cells(i + 1, 2) Then Cells(i, 1).EntireRow.Delete End If Next Application.ScreenUpdating = True End Sub

  • EXCEL VBA 早く処理をする

    よろしくお願いします 下の構文を標準モジュールに書き込み、callで実行しているのですが 処理に時間がかかります。 処理を早くする方法と構文の簡素化のご教示をお願いします。 Application.ScreenUpdating = False For i = 1 To 12 With Worksheets(i) .Select LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A8:G" & LastRow).Sort Key1:=Range("A8"), order1:=xlAscending .Range("G8:G" & LastRow - 1).Formula = "=G7+E8-F8" LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A" & LastRow).Select Dim EndRow As Long EndRow = .Range("A" & Rows.Count).End(xlUp).Row Cells(Rows.Count, 1).End(xlUp).Offset(1, 3) = .Name & "合計" Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) = Application.WorksheetFunction.Sum(Range("E7:E" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) = Application.WorksheetFunction.Sum(Range("F7:F" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(2, 3) = "前月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) = .Range("G7") Cells(Rows.Count, 1).End(xlUp).Offset(2, 5) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 4) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 3) = "次月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(4, 3) = "合計" Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) - Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(4, 4) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) Cells(Rows.Count, 1).End(xlUp).Offset(4, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(1, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(2, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(4, 6) = Cells(Rows.Count, 1).End(xlUp).Offset(0, 6) .Range("C7").End(xlDown).Select Selection.Offset(4, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 2).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 3).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 4).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(0, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 2).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 3).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 3).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 4).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 4).Borders(xlEdgeBottom).Weight = xlThin End With Next i Application.ScreenUpdating = True

  • 重複した値を一つ残す VBA

    重複した値を一つだけ残していきたいです。 たとえば リンゴ リンゴ リンゴ とあれば2つリンゴが消えて欲しいです 今のところ重複した値を消す方法しかわからず詰まっています。 なにとぞよろしくおねがいします  Option Explicit Sub test() Dim i As Double Dim x As Double Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Range("T3", Range("T" & Rows.Count).End(xlUp)).Sort Key1:=Range("T3"), Order1:=xlAscending, Header:=xlYes For i = 3 To Cells(Rows.Count, 20).End(xlUp).Row Range(Cells(i, "T"), Cells(i, "T")).RemoveDuplicates Columns:=Array(1), Header:=xlYes Application.Calculate Next End Sub

  • このVBAコードの解説をお願いします。

    特定の行の中で同じものが続いたらセルを結合する、ということがやりたくて 以下のコードをネット上から探してきました。 上記の動作は実現できたのですが、自分でこのコードをみてもイマイチわかりません。 お分かりになる方、できれば1行ずつ解説してください。 よろしくお願いします。 Sub Sample() Dim myRng As Range, myRow As Long Set myRng = Range("A1") For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(myRow, 1) If .Value = .Offset(1).Value Then Set myRng = Union(myRng, .Offset(1)) Else Application.DisplayAlerts = False myRng.Merge Application.DisplayAlerts = True Set myRng = .Offset(1) End If End With Next End Sub

  • 【Excel】リストボックスにデータを重複せず昇順に表示する方法

    教えてください。 ユーザーフォームにリストボックス(Listbox1)があり、日付が昇順で入力されるようになっています。 ただし、この日付データは重複が多いため重複されないよう表示しようと下記のコードを記述しましたが「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです」と表示されてしまいます。 これを回避し、実行させるためにはどういう風に記述を修正したらよいでしょうか? ================================================================ Private Sub UserForm_Initialize() Dim i As Long For i = 2 To 2000 ListBox1.AddItem Worksheets("データ").Cells(i, 1) Dim myValue As Variant Dim myRng As Range, myCell As Range Set myRng = Worksheets("データ").Cells(i, 1).End(xlUp) myValue = myRng.Value Application.ScreenUpdating = False myRng.Sort Worksheets("データ").Cells(i, 1), xlAscending, Header:=xlYes With ListBox1 .Clear For Each myCell In myRng.Resize(myRng.Rows.Count - 1).Offset(1) _ .SpecialCells(xlCellTypeVisible) .AddItem myCell.Value Next .ListIndex = 0 End With Next i ListBox1.ListIndex = 0 End Sub ================================================================

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

専門家に質問してみよう