• ベストアンサー

Excelで2行以上の昇順並び替え

社員旅行の写真の申込みを振分けるのに、Excelで注文番号を整理しています。注文番号を昇順に並び替えたいと思いますが、下記Aさんの様に1行の並び替えは出来たのですが、Bさんの様に2行以上の並び替えで、 1行目左端→1行目右端→2行目左端…→最終行右端(枚数によっては右端までいかない)というようにするにはどの様にしたらよいのでしょうか? Aさん  12 15 21 18 30 Bさん  14 27  7 31 16       6  35 19 41  2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

かなり限定的な機能のヤツですが、マクロを作成してみました。 数値の入っているセルを矩形で選択して実行 Public Sub sort() 'ソートモドキ Dim x As Range, i, wk Dim NumList, max Set NumList = CreateObject("Scripting.Dictionary") max = 0 '0以下の数字はない For Each x In Selection If Not NumList.Exists(x.Value) Then '重複チェック NumList.Add x.Value, x.Value If max < x.Value Then max = x.Value '空白は0扱い End If Next i = 1 Selection.ClearContents For Each x In Selection Do Until NumList.Exists(i) i = i + 1 If i > max Then Exit Sub Loop x.Value = NumList.Item(i) i = i + 1 Next End Sub

vegemate
質問者

お礼

うまくいきました! 朝早くにご返事頂いたようですね。 有難うございました(m_m)

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

この問題はエクセルでは、意外に手強いですね。 それでVBAになってしまいました。ご参考に Z列を作業列として使っています。したがって25写真以内の仮定が入ります。写真が25枚以上なら、作業列を枚数以上の更に右列に移してください。その場合下記コードの中のZを全て変える必要あり。 Sub test01() Dim cl As Range s = 2 '最初データ行 d1 = Range("A65536").End(xlUp).Row 'A列最下行 d2 = Range("B65536").End(xlUp).Row 'B列最下行 d = Application.WorksheetFunction.Max(d1, d2) '最下データ endsgn = "N" '------ For i = s + 1 To d If Cells(i, "A") <> "" Then '人が途切れたら shori: j = 1 For Each cl In Cells(s, "B").CurrentRegion '申し込み明細につき If cl.Column <> 1 And cl <> "" Then 'A列や空白行以外を '----Z列に貯め込み Cells(j, "Z") = cl j = j + 1 End If Next '---Z列ソート Range(Cells(1, "Z"), Cells(j - 1, "Z")).Sort _ Key1:=Range("Z1"), Order1:=xlAscending '----元のセルに戻し j = 1 For Each cl In Cells(s, "B").CurrentRegion '申し込み明細につき If cl.Column <> 1 And cl <> "" Then 'A列や空白行以外を '----Z列に貯め込み cl = Cells(j, "Z") j = j + 1 End If Next '---Z列クリア Range(Cells(1, "Z"), Cells(j - 1, "Z")).ClearContents '----- s = i '次のブロックの始まり End If If endsgn = "Y" Then End Next i '----最後のブロックの処理----------------------- s = d2 endsgn = "Y" GoTo shori End Sub (テストデータ)A2:F7でソート後 大川 2 8 9 12 17 島田 3 5 5 16 18 23 34 木村 5 16

vegemate
質問者

お礼

すごい!(@_@;) 簡単に出来そうで、出来ないんですね。 もっとマクロを勉強します。 参考になりました。 有難うございました(m_m)

回答No.2

回答ではないですが。 この場合、写真番号を書いてその横にチェックを入れるような表にすれば、書く写真の枚数も自動で計算できるし良いと思いますよ

vegemate
質問者

お礼

この方法も考えましたが、なんせ番号が800番まであるので……(^^;ゞ 有難うございました。

関連するQ&A