[[20100918213036]] 『並び替え』(bb) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『並び替え』(bb)
 Excel2007 Windows 7

 例
 A1     A1
 A1A1   B1
 A1A2   C1
 B1     A1A1
 B1A1   B1A1
 B1A2   C1A1
 C1     A1A2
 C1A1   B1A2
 C1A2   C1A2

 数字のみのデータと、アルファベット+数字のデータを並び替えしたいのですが、

 数字のみは昇順
 アルファベット+数字は基本は頭文字で昇順しますが、頭文字が違っても
 二文字目以降が全く一緒のものは上に並べるといものです。

 昇順にすると例左の様になってしまいますが、例右の様にしたいです。

 説明下手ですいませんが、詳しい方お願いいたします。

 VBAを使うと・・・、

 標準モジュールに

 '======================================================
 Sub test()
    Dim rng As Range
    Dim crng As Range
    Dim ml As Long
    Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
    ml = Evaluate("max(len(" & rng.Address & "))")
    For Each crng In rng
       With crng
          .Offset(0, 1).Value = String(ml - Len(.Value), " ")
          .Offset(0, 1).Value = .Offset(0, 1).Value & StrReverse(.Value)
       End With
    Next
    With rng.Resize(, 2)
       .Sort Key1:=.Cells(1, 2), Order1:=xlAscending, header:=xlNo

    End With
    rng.Offset(0, 1).Clear
 End Sub
 
 データがA列1行目から、あるとすると・・・・、

 上記のtestを実行してみてください。尚、B列は、プログラムが作業列として
 使っていますので、レザーブしておいてください。

 ichinose


 ichinoseさん、ありがとうございます。

 最初に言えばよかったのですが、、

 この並び替えの条件を、オートフィルタの並び替えの様にすることはできますか?
 といいますのも、A列以外にも入力がありその列も同時に並び替えたいのです。

 ちなみに、

 >上記のtestを実行してみてください。尚、B列は、プログラムが作業列として
 >使っていますので、レザーブしておいてください。

 上記はB列を空白にしておくということでしょうか?


 >この並び替えの条件を、オートフィルタの並び替えの様にすることはできますか?
 ↑これ、意味がわかりません、オートフィルタの並び替え って?
 >A列以外にも入力がありその列も同時に並び替えたいのです。
 ↑これがしたいというなら、並べ替える列を増やせばよいのですが・・・。

 >レザーブしておいてください。  ×
 リザーブの間違いです。つまり、B列はプログラムが使用しますから、
 ユーザーが値を入力しても消されてしまいますよ という意味です。
 例としてB列を作業列にしただけです。作業列は、どこでもよいです。
 コード内の列指定を変更すれば・・・。

 >Sub test()
 >   Dim rng As Range
 >   Dim crng As Range
 >   Dim ml As Long
 >   Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
 >   ml = Evaluate("max(len(" & rng.Address & "))")
 >   For Each crng In rng
 >      With crng
 >         .Offset(0, 1).Value = String(ml - Len(.Value), " ")
 >         .Offset(0, 1).Value = .Offset(0, 1).Value & StrReverse(.Value)
 >      End With
 >   Next
 >   With rng.Resize(, 2)
 >      .Sort Key1:=.Cells(1, 2), Order1:=xlAscending, header:=xlNo
 >   End With
 >   rng.Offset(0, 1).Clear
 >End Sub

 まずは、Helpやレファレンスを使って上記の意味を理解してください。

 尚、VBAはまるっきり知らないし、覚える気もないという考えなら・・・、
 (これは、価値観の違いですから、仕方ないですよね!!)
 他の投稿を待ってください。

 ichinose


 ichinose様

 >>この並び替えの条件を、オートフィルタの並び替えの様にすることはできますか?
 >↑これ、意味がわかりません、オートフィルタの並び替え って?

 たぶん言葉を間違えているだけでしょう。
 オートフィルタの意味をご存知なく、昇順並び替えのことを言われているのかと。
 おそらく、B列〜○列まで、A列の値に対応する何らかのデータが入っており、
 A列を言われているような変則の昇順に並び換える時に、行を丸ごと並び変えてほしいか、○列まで並び変えてほしいのかと。

 bb様

 どこの列まで、どのようなデータが入っていて、どこの列までをどのような条件で並び変えたいのか、
 明確にしてください。

 (へむ)

 >オートフィルタの並び替え
 オートフィルタをかけた後、下三角ボタンを押した際のメニュー内にある「昇順で並べ替え」のことでしょう。
 (確か2003で追加された機能だったかと)

 もっとも通常の並べ替えと変わらないと思いますが…
 (独覚)


 皆様、お返事ありがとうございます。

 >この並び替えの条件を、オートフィルタの並び替えの様にすることはできますか?

 すいません。理解していない言葉で書いてしましました。。
 A列を並び替えた時に、ほかの列も行ごと並び替えたいということです。

 まず、ichinoseさんが作ってくださいましたコードを勉強したいと思います。

 (bb) 

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.