過去ログ

                                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
 ───────────────────────────────────────  ■題名 : Re:ソートに関しての質問です。  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/11/28(木) 22:15  -------------------------------------------------------------------------
   あみやきさん、こんばんわ。
>たびたび申し訳ないです。
>誰か教えてください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 _
  <<以下略>>
 ───────────────────────────────────────  ■題名 : Re:ソートに関しての質問です。  ■名前 : あみやき  ■日付 : 02/11/29(金) 9:06  -------------------------------------------------------------------------
   りん さん、こんばんわ〜。

ありがとうございましたm(__)m
早速試してみました。

>Selectせずに直接指定した方が処理が速くなるらしいです。
>
>Range("a8:E" & j&).Sort _
>  <<以下略>>
↑こっちは出来ましたが、
↓こっちはソートに失敗したってなってしまいました・・・。

>
>Rangeオブジェクトの引数を文字列ではなく、両端のセルにするならば
>Range(Cells(8, 1), Cells(j&, 5)).Sort _
>  <<以下略>>

でも、上の方で問題ないので大丈夫です。ありがとうございましたm(__)m
完璧です。助かりました。
 ───────────────────────────────────────  ■題名 : Re:ソートに関しての質問です。  ■名前 : あみやき  ■日付 : 02/11/29(金) 9:22  -------------------------------------------------------------------------
   ▼りん さん:

おはようございます。朝から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
 ───────────────────────────────────────  ■題名 : Re:ソートに関しての質問です。  ■名前 : Jaka  ■日付 : 02/11/29(金) 16:13  -------------------------------------------------------------------------
   あみやきさん、りんさん こんにちは。
横レス失礼します。
質問の内容を見てません。
こんな感じでしょうか?

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
 ───────────────────────────────────────  ■題名 : またろくに確認しませんでした  ■名前 : Jaka  ■日付 : 02/11/29(金) 16:15  -------------------------------------------------------------------------
   質問の内容を見てません。
  ↓
質問の内容を良く見てません。
 ───────────────────────────────────────  ■題名 : たびたびすみません。  ■名前 : Jaka  ■日付 : 02/11/29(金) 16:33  -------------------------------------------------------------------------
   ReDim arry1(N)
  ↓
ReDim arry1(1 To N)

で、最後に

Erase arry1

を、いれてください。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : あみやき  ■日付 : 02/11/29(金) 16:45  -------------------------------------------------------------------------
   Jaka さんいつもいつもありがとうございますm(__)m

>ReDim arry1(N)
>  ↓
>ReDim arry1(1 To N)
>
>で、最後に
>
>Erase arry1
>
>を、いれてください。
これを行うとどうなるのですか?
試したのですが、変化が分らないので、解説お願いできないでしょうか?
お願いします。
 ───────────────────────────────────────  ■題名 : ただの後始末です。  ■名前 : Jaka  ■日付 : 02/11/29(金) 17:05  -------------------------------------------------------------------------
   ヘルプより

Erase ステートメント
静的配列の要素を再初期化したり、動的配列に割り当てたメモリを解放します。。

詳しくは、ヘルプを見てね!
 ───────────────────────────────────────  ■題名 : Re:ただの後始末です。  ■名前 : あみやき  ■日付 : 02/11/29(金) 17:09  -------------------------------------------------------------------------
   ▼Jaka さん:
>ヘルプより
>
>Erase ステートメント
>静的配列の要素を再初期化したり、動的配列に割り当てたメモリを解放します。。
>
>詳しくは、ヘルプを見てね!

ありがとうございましたm(__)m
さっそくヘルプで調べてみます。
今後ともよろしくお願いします。
 ───────────────────────────────────────  ■題名 : 解りづらくてすみません。  ■名前 : Jaka  ■日付 : 02/11/29(金) 17:10  -------------------------------------------------------------------------
   >で、最後に
>Erase arry1

は、End Sub の上です。
こんな感じに、

  Erase arry1
End Sub
 ───────────────────────────────────────  ■題名 : いえいえ。  ■名前 : あみやき  ■日付 : 02/11/29(金) 17:15  -------------------------------------------------------------------------
   丁寧ですよ!!
私の頭でも十分理解できました。
本当に、親切にして頂いて、ありがとうございます。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : あみやき  ■日付 : 02/11/29(金) 17:00  -------------------------------------------------------------------------
   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|
−−−−−−−−−−−−−−−−−−−−−−−
言う変換するイメージです。
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : Jaka  ■日付 : 02/12/2(月) 9:43  -------------------------------------------------------------------------
   おはようございます。

>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
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : あみやき  ■日付 : 02/12/2(月) 18:21  -------------------------------------------------------------------------
   Jaka さん、こんにちは。
お礼が遅れて申し訳ございません。
お忙しいのにご指導いただきありがとうございました。
これから、試させていただきます。
結果はで次第報告いたします。
本当にありがとうございました。
今後ともよろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : あみやき  ■日付 : 02/12/3(火) 13:38  -------------------------------------------------------------------------
   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")のところで「名前付引数が見つかりません」と表示されてしまいます。
どうしたら、うまくできるのでしょうか?
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : Jaka  ■日付 : 02/12/3(火) 14:02  -------------------------------------------------------------------------
   マクロ記録を取ってみれば解ると思いますが、ソートキーは3個まで。
それ以上になると別キーで、もう一度ソートする事になると思います。
やった事が無いんで、どのような結果になるかわかりませんが。
一応考えては見ようと思います。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : あみやき  ■日付 : 02/12/3(火) 14:18  -------------------------------------------------------------------------
   ▼Jaka さん:
>マクロ記録を取ってみれば解ると思いますが、ソートキーは3個まで。
>それ以上になると別キーで、もう一度ソートする事になると思います。
>やった事が無いんで、どのような結果になるかわかりませんが。
>一応考えては見ようと思います。

そうなんですか〜?。
ありがとうございます。
そのように仕樣を変更しようと思います。
もし、よい回答がわかりましたら、教えてください。
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:たびたびすみません。  ■名前 : Jaka  ■日付 : 02/12/4(水) 9:29  -------------------------------------------------------------------------
   おはようございます。
こんな感じで、ケツの方からソートしてけば良い様でした。

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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 426