Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3270 / 13645 ツリー ←次へ | 前へ→

【63095】7つのキーでデータソートをするには? Lee 09/10/7(水) 22:06 質問[未読]
【63098】Re:7つのキーでデータソートをするには? かみちゃん 09/10/8(木) 5:14 発言[未読]
【63099】Re:7つのキーでデータソートをするには? ichinose 09/10/8(木) 6:07 発言[未読]
【63189】Re:7つのキーでデータソートをするには? Lee 09/10/14(水) 9:23 お礼[未読]
【63210】Re:7つのキーでデータソートをするには? m2m10 09/10/15(木) 14:19 発言[未読]

【63095】7つのキーでデータソートをするには?
質問  Lee  - 09/10/7(水) 22:06 -

引用なし
パスワード
   いつも勉強させていただいてます。

B列には名前・2行目には項目
C3からI26にはランダムに数字が入力されているデータがあります。
C列からI列をC列を第1キーD列を第2キー.....7つのキーでデータを昇順に並べ替えしたいのです。
下記VBAではエラーがでてしまします。
3つまでならエクセルの並べ替えでできるのですが・・・
どうかご教授よろしくお願いします。

Sub test()

Range("B2:I26").Select
   Selection.Sort Key1:=Range("C3"), Order1:=xlAscending _
          , Key2:=Range("D3"), Order2:=xlAscending _
          , Key3:=Range("E3"), Order3:=xlAscending _
          , Key4:=Range("F3"), Order4:=xlAscending _
          , Key5:=Range("G3"), Order5:=xlAscending _
          , Key6:=Range("H3"), Order6:=xlAscending _
          , Key7:=Range("I3"), Order7:=xlAscending _
    Header:=xlGuess, OrderCustom:=1, _
    MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal _
    , DataOption2:=xlSortNormal, DataOption3:=xlSortNormal _
    , DataOption4:=xlSortNormal, DataOption5:=xlSortNormal _
    , DataOption6:=xlSortNormal, DataOption7:=xlSortNormal
End Sub

【63098】Re:7つのキーでデータソートをするには?
発言  かみちゃん  - 09/10/8(木) 5:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>B列には名前・2行目には項目
>C3からI26にはランダムに数字が入力されているデータがあります。
>C列からI列をC列を第1キーD列を第2キー.....7つのキーでデータを昇順に並べ替えしたいのです。
>下記VBAではエラーがでてしまします。
>3つまでならエクセルの並べ替えでできるのですが・・・

Excel2003までの場合は、Excelの一般操作では、3つまでしかできませんよね?
一般操作でできないものは、VBAでもできません。

そのために、作業列を1列用意して、ソートキーを作成するか、
Sortメソッドではなく、クイクックソートなどのアルゴリズムを使うことになるのではないでしょうか?

【63099】Re:7つのキーでデータソートをするには?
発言  ichinose  - 09/10/8(木) 6:07 -

引用なし
パスワード
   ▼Lee さん:
おはようございます。

新規ブックの標準モジュールに

'==========================================================
Sub sample()
  サンプル作成
  MsgBox "このデータを優先順位 項目1〜項目7の順に昇順にソートします"
  With Range("A1:G21")
    .Sort Key1:=Range("E1"), Order1:=xlAscending, Key2:=Range("F1") _
    , Order2:=xlAscending, Key3:=Range("G1"), Order3:=xlAscending, Header:= _
    xlYes
    .Sort Key1:=Range("b1"), Order1:=xlAscending, Key2:=Range("c1") _
    , Order2:=xlAscending, Key3:=Range("d1"), Order3:=xlAscending, Header:= _
    xlYes
    .Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlYes
  End With
  MsgBox "というように優先順位の低い順にソートしていきます"
End Sub
'=======================================================================
Sub サンプル作成()
  With Range("a1:g21")
    With .Rows(1)
     .Formula = "=""項目"" & column()"
     .Value = .Value
    End With
    With .Rows("2:21")
     .Formula = "=int(rand()*10)+1"
     .Value = .Value
    End With
  End With
End Sub


これは、例題ですが、試してみてください。

【63189】Re:7つのキーでデータソートをするには?
お礼  Lee  - 09/10/14(水) 9:23 -

引用なし
パスワード
   ▼ichinose さん:

御礼がおそくなり申し訳ありません。

テスト段階では上手くいってる気がしますが
実際ではデータ量がかなり多くなるので
下記のVBAを元にがんばってみます。
ありがとうございました。

>'==========================================================
>Sub sample()
>  サンプル作成
>  MsgBox "このデータを優先順位 項目1〜項目7の順に昇順にソートします"
>  With Range("A1:G21")
>    .Sort Key1:=Range("E1"), Order1:=xlAscending, Key2:=Range("F1") _
>    , Order2:=xlAscending, Key3:=Range("G1"), Order3:=xlAscending, Header:= _
>    xlYes
>    .Sort Key1:=Range("b1"), Order1:=xlAscending, Key2:=Range("c1") _
>    , Order2:=xlAscending, Key3:=Range("d1"), Order3:=xlAscending, Header:= _
>    xlYes
>    .Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlYes
>  End With
>  MsgBox "というように優先順位の低い順にソートしていきます"
>End Sub
>'=======================================================================
>Sub サンプル作成()
>  With Range("a1:g21")
>    With .Rows(1)
>     .Formula = "=""項目"" & column()"
>     .Value = .Value
>    End With
>    With .Rows("2:21")
>     .Formula = "=int(rand()*10)+1"
>     .Value = .Value
>    End With
>  End With
>End Sub
>
>
>これは、例題ですが、試してみてください。

【63210】Re:7つのキーでデータソートをするには?
発言  m2m10  - 09/10/15(木) 14:19 -

引用なし
パスワード
   私は、3以上の並び替えは、使ってない列
仮に j3=+c3&D3&e3&f3&g3&h3&i3 の計算式を入れ
て↓にコピーをして処理をするか

DAOでシートをSQLで処理してます。

3270 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free