Page 426 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼ソートに関しての質問です。 あみやき 02/11/28(木) 18:59 ┗Re:ソートに関しての質問です。 りん 02/11/28(木) 22:15 ┣Re:ソートに関しての質問です。 あみやき 02/11/29(金) 9:06 ┗Re:ソートに関しての質問です。 あみやき 02/11/29(金) 9:22 ┗Re:ソートに関しての質問です。 Jaka 02/11/29(金) 16:13 ┗またろくに確認しませんでした Jaka 02/11/29(金) 16:15 ┗たびたびすみません。 Jaka 02/11/29(金) 16:33 ┣Re:たびたびすみません。 あみやき 02/11/29(金) 16:45 ┃ ┣ただの後始末です。 Jaka 02/11/29(金) 17:05 ┃ ┃ ┗Re:ただの後始末です。 あみやき 02/11/29(金) 17:09 ┃ ┗解りづらくてすみません。 Jaka 02/11/29(金) 17:10 ┃ ┗いえいえ。 あみやき 02/11/29(金) 17:15 ┗Re:たびたびすみません。 あみやき 02/11/29(金) 17:00 ┗Re:たびたびすみません。 Jaka 02/12/2(月) 9:43 ┣Re:たびたびすみません。 あみやき 02/12/2(月) 18:21 ┗Re:たびたびすみません。 あみやき 02/12/3(火) 13:38 ┗Re:たびたびすみません。 Jaka 02/12/3(火) 14:02 ┗Re:たびたびすみません。 あみやき 02/12/3(火) 14:18 ┗Re:たびたびすみません。 Jaka 02/12/4(水) 9:29 ─────────────────────────────────────── ■題名 : ソートに関しての質問です。 ■名前 : あみやき ■日付 : 02/11/28(木) 18:59 -------------------------------------------------------------------------
たびたび申し訳ないです。 誰か教えてくださいm(__)m あるデータのある列(下ではA列ですが・・・)をソートしたいのですが、 最終データがどこにあるかはわからないという条件でソートしたいです。 ちなみに昇順です。 下のコードが作ってみたものです。 やじるしの部分がおかしいみたいです。 sub macro1() Dim rec&, j& Dim i As Byte, N As Byte, m As Long N = 4 For i = 0 To N rec& = Cells(65536, i + 1).End(xlUp).Row If rec& > j& Then j& = rec& Next If j& <> 1 Then Range("a8:j&").Select←−−−−−−−−−−−−−−−ここです。 Selection.Sort Key1:=Range("a8"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Else MsgBox "レコードは未入力です", Buttons:=vbOKOnly + vbExclamation, Title:="警告" End If ' End Sub |
あみやきさん、こんばんわ。 >たびたび申し訳ないです。 >誰か教えてくださいm(__)m > If j& <> 1 Then Range("a8:E" & j&).Select←−−−−−−−−−−−−−−−ここです。 > Selection.Sort Key1:=Range("a8"), Order1:=xlAscending, Header:=xlGuess, _ > OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ > :=xlPinYin > <<以下略>> Selectせずに直接指定した方が処理が速くなるらしいです。 Range("a8:E" & j&).Sort _ <<以下略>> Rangeオブジェクトの引数を文字列ではなく、両端のセルにするならば Range(Cells(8, 1), Cells(j&, 5)).Sort _ <<以下略>> |
りん さん、こんばんわ〜。 ありがとうございましたm(__)m 早速試してみました。 >Selectせずに直接指定した方が処理が速くなるらしいです。 > >Range("a8:E" & j&).Sort _ > <<以下略>> ↑こっちは出来ましたが、 ↓こっちはソートに失敗したってなってしまいました・・・。 > >Rangeオブジェクトの引数を文字列ではなく、両端のセルにするならば >Range(Cells(8, 1), Cells(j&, 5)).Sort _ > <<以下略>> でも、上の方で問題ないので大丈夫です。ありがとうございましたm(__)m 完璧です。助かりました。 |
▼りん さん: おはようございます。朝から2度もすいません。 >> If j& <> 1 Then Range("a8:E" & j&).Select←−−−−−−−−−−−−−−−ここです。 >> Selection.Sort Key1:=Range("a8"), Order1:=xlAscending, Header:=xlGuess, _ >> OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, >>SortMethod _ >> :=xlPinYin > > <<以下略>> > > >Selectせずに直接指定した方が処理が速くなるらしいです。 > >Range("a8:E" & j&).Sort _ > <<以下略>> > >Rangeオブジェクトの引数を文字列ではなく、両端のセルにするならば >Range(Cells(8, 1), Cells(j&, 5)).Sort _ > <<以下略> 上の処理は出来た!! っと思ったのですが、どうもうまく処理が出来ないようです・・・。 RANGEクラスのSORTメソッドが失敗しました。とでてしまいます。 助けてください。 お願いしますm(__)m |
あみやきさん、りんさん こんにちは。 横レス失礼します。 質問の内容を見てません。 こんな感じでしょうか? Sub sort1() Dim arry1() As Long N = 5 ReDim arry1(N) For i = 1 To N arry1(i) = Cells(65536, i).End(xlUp).Row Next maxrow = Application.Max(arry1) If maxrow <> 1 Then '← ここが? なんですが、そのままのしました。 Range("A8:E" & maxrow).Sort Key1:=Range("A8"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Else MsgBox "レコードは未入力です", Buttons:=vbOKOnly + vbExclamation, Title:="警告" End If End Sub |
質問の内容を見てません。 ↓ 質問の内容を良く見てません。 |
ReDim arry1(N) ↓ ReDim arry1(1 To N) で、最後に Erase arry1 を、いれてください。 |
Jaka さんいつもいつもありがとうございますm(__)m >ReDim arry1(N) > ↓ >ReDim arry1(1 To N) > >で、最後に > >Erase arry1 > >を、いれてください。 これを行うとどうなるのですか? 試したのですが、変化が分らないので、解説お願いできないでしょうか? お願いします。 |
ヘルプより Erase ステートメント 静的配列の要素を再初期化したり、動的配列に割り当てたメモリを解放します。。 詳しくは、ヘルプを見てね! |
▼Jaka さん: >ヘルプより > >Erase ステートメント >静的配列の要素を再初期化したり、動的配列に割り当てたメモリを解放します。。 > >詳しくは、ヘルプを見てね! ありがとうございましたm(__)m さっそくヘルプで調べてみます。 今後ともよろしくお願いします。 |
>で、最後に >Erase arry1 は、End Sub の上です。 こんな感じに、 Erase arry1 End Sub |
丁寧ですよ!! 私の頭でも十分理解できました。 本当に、親切にして頂いて、ありがとうございます。 |
Jaka さん わがままついでにもう一つお聞きしてよろしいでしょうか? ソートの件なのですが、行をレコードとし、レコードの固まりを崩さず、A行を第1キー(昇順)、B行を第2キー(昇順)、C行を第3キー(降順)のようなソートはどのように行えばよろしいのでしょうか?? ご指導お願いします。m(__)m イメージ −−−−−−−−−−−−−−−−−−−−−−− | A | B | C | −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2222| 3333333| −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2222| 3333311| −−−−−−−−−−−−−−−−−−−−−−− | 0| 0|99999999| −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2221| 3333333| −−−−−−−−−−−−−−−−−−−−−−− | あいうえ| |PPPPPPPP| −−−−−−−−−−−−−−−−−−−−−−− | あいうえ| AAAA|PPPPPPPP| −−−−−−−−−−−−−−−−−−−−−−− を −−−−−−−−−−−−−−−−−−−−−−− | A | B | C | −−−−−−−−−−−−−−−−−−−−−−− | 0| 0|99999999| −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2221| 3333333| −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2222| 3333311| −−−−−−−−−−−−−−−−−−−−−−− | 1111| 2222| 3333333| −−−−−−−−−−−−−−−−−−−−−−− | あいうえ| AAAA|PPPPPPPP| −−−−−−−−−−−−−−−−−−−−−−− | あいうえ| |PPPPPPPP| −−−−−−−−−−−−−−−−−−−−−−− 言う変換するイメージです。 よろしくお願いします。 |
おはようございます。 >A行を第1キー(昇順)、B行を第2キー(昇順)、C行を第3キー(降順) との事ですが、提示された例だと A行を第1キー(昇順)、B行を第2キー(昇順)、C行を第3キー(昇順) になってますけど。???。 取りあえず、提示された例の方で...。 マクロ記録で出来たコードを、下記の様にかいれかえるだけです。 Sub Macro1() Selection.Sort Key1:=Range("A8"), Order1:=xlAscending, Key2:=Range("B8") _ , Order2:=xlAscending, Key3:=Range("C8"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin End Sub ↓ Sub sort1() Dim arry1() As Long N = 5 ReDim arry1(1 To N) For i = 1 To N arry1(i) = Cells(65536, i).End(xlUp).Row Next maxrow = Application.Max(arry1) If maxrow <> 1 Then Range("A8:E" & maxrow).Sort Key1:=Range("A8"), Order1:=xlAscending, Key2:=Range("B8") _ , Order2:=xlAscending, Key3:=Range("C8"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin Else MsgBox "レコードは未入力です", Buttons:=vbOKOnly + vbExclamation, Title:="警告" End If Erase arry1 End Sub |
Jaka さん、こんにちは。 お礼が遅れて申し訳ございません。 お忙しいのにご指導いただきありがとうございました。 これから、試させていただきます。 結果はで次第報告いたします。 本当にありがとうございました。 今後ともよろしくお願いします。 |
Jaka さん、こんにちは。 色々試してみたのですが、もしKEYを増やしたい場合はどうしたらよろしいのでしょうか? N = 5 ReDim arry1(1 To N) For i = 1 To N arry1(i) = Cells(65536, i).End(xlUp).Row Next maxrow = Application.Max(arry1) If maxrow <> 1 Then '← ここが? なんですが、そのままのしました。 Range("A1:G" & maxrow).Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _ , Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Key4:=Range("D1"), Order4:=xlAscending, _ Key5:=Range("E1"), Order5:=xlAscending, Key6:=Range("F1"), Order6:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Else MsgBox "レコードは未入力です", Buttons:=vbOKOnly + vbExclamation, Title:="警告" End If こんな感じにしてみたのですが、Key4:=Range("D1")のところで「名前付引数が見つかりません」と表示されてしまいます。 どうしたら、うまくできるのでしょうか? よろしくお願いします。 |
マクロ記録を取ってみれば解ると思いますが、ソートキーは3個まで。 それ以上になると別キーで、もう一度ソートする事になると思います。 やった事が無いんで、どのような結果になるかわかりませんが。 一応考えては見ようと思います。 |
▼Jaka さん: >マクロ記録を取ってみれば解ると思いますが、ソートキーは3個まで。 >それ以上になると別キーで、もう一度ソートする事になると思います。 >やった事が無いんで、どのような結果になるかわかりませんが。 >一応考えては見ようと思います。 そうなんですか〜?。 ありがとうございます。 そのように仕樣を変更しようと思います。 もし、よい回答がわかりましたら、教えてください。 よろしくお願いします。 |
おはようございます。 こんな感じで、ケツの方からソートしてけば良い様でした。 With Range("A8:E" & maxrow) .Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("E1"), Order2:=xlAscending .Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order2:=xlAscending, _ Key3:=Range("C1"), Order3:=xlAscending End With |