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

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

 

『並び替え』(GS)

 並び替えについて教えてください。

      A     B     C
  -------------------
 1|   11    abc   def
 2|         g3i   jkl
  -------------------
 3|   10    cba   sdf  
 4|         wer   t1u
  -------------------
 5|   8     asd   erf
 6|         157   we3
  -------------------
 7|   13    wer   tyu
 8|         ase   tyu
 .
 .
 .
 上記のような表がありまして、2行ごとに1グループの内容になってます。
 A列を基準にして上から昇順に並び替えて下記のようにしたいのですが
 excelのデータの並び替えを使うとA列に空白があるのでグループが崩れてしまい
 思うように並び替えが出来ませんでした。
 良い方法があれば詳しく教えてください。
 宜しくお願い致します。

 このように並び替えたいです。(B,C列はランダムの文字列が入ってます。)
 ↓
      A     B     C
  -------------------
 1|   8     asd   erf
 2|         157   we3
  -------------------
 3|   10    cba   sdf  
 4|         wer   t1u
  -------------------
 5|   11    abc   def8
 6|         g3i   jkl
  -------------------
 7|   13    wer   tyu
 8|         ase   tyu
 .
 .
 .

 あと、A列には同じ数字が入ってる場合もあります。その際は、B列の文字列も基準にして並び替えたいです。

 windowsXP、excel2003を使ってます。 

 非常に単純なことなのですが、最初の表でA1:A7をコピーして、
 A2セルを選択、形式を選択して貼り付けから、空白セルを無視するにチェックしてOKで、
 このような表にします。

      A     B     C
  -------------------
 1|   11    abc   def
 2|   11    g3i   jkl
  -------------------
 3|   10    cba   sdf  
 4|   10    wer   t1u
  -------------------
 5|   8     asd   erf
 6|   8     157   we3
  -------------------
 7|   13    wer   tyu
 8|   13    ase   tyu

 その上で、A2:A8セルに条件付き書式で、
 セルの値が>次の値に等しい> =A1 
 として、フォントの色を白色(背景色)にすればどうでしょうか。
 その後、A列でソートすればご希望のようになりませんか。

 >あと、A列には同じ数字が入ってる場合もあります。その際は、B列の文字列も基準にして並び替えたいです。

 この辺はどうしたらよいか分かりませんが。
 基本機能では無理かもしれません?
 (sato)

 私も別案で、最初の課題だけ。
 作業列使います。
 例えば、D1に「=A1」、 D2にも「=A1」と入力。
 D1からD2を選択した状態でフィルハンドルをダブルクリック
 これで、D列すべてに式がコピーされます。
 表全体を選択した状態で、メニューバーより「データ」>「並び替え」
 「最優先されるキー」に「列D」を選択して「OK」

 2番目のお題は。。。むずいですね〜
 (代奈)


 お返事ありがとうございます。早速試してみたのですが、
 やはり、A列に同じ数字がある場合、グループが崩れてしまいました。
 この場合、何かうまい方法ありますか?

 最初、A列をグループごとに結合してみたりしたのですが、結合すると並びかえって出来ないんですね。VBA使えば出来たりするんでしょうか? 
(GS)

 A列に同じ数字がある場合にグループを崩さないためには、
 E列に通し番号をつけて、二番目に優先するキーに列Eを指定する。
 (代奈)

 VBA処理ですが、同じ番号で同じ名前がある場合には、めちゃくちゃになる可能性があります。
 こんな面倒なことをするより、シートの構成を考え直したほうが良いのでは?

 Sub test()
 Application.ScreenUpdating = False
 With ActiveSheet
    .Columns(1).Insert
    With .Range("b1").CurrentRegion
        .Columns(1).Copy .Offset(, -1).Resize(, 1)
        On Error Resume Next
        With .Offset(, -1).Resize(, 1)
            .SpecialCells(xlCellTypeConstants, 1) _
            .FormulaR1C1 = "=text(rc[1],""00000"")&rc[2]"
            .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]c&rc[2]"
        End With
        Err.Clear
    End With
    .Range("a1").CurrentRegion.Sort key1:=.Range("a1"), header:=xlNo
    .Columns(1).Delete
 End With
 Application.ScreenUpdating = True
 End Sub
 (seiya)


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

 代奈さんへ
 通し番号って、具体的にはどのように付ければいいんでしょうか?
 詳しい説明をお願いしても宜しいでしょうか?

 seiyaさんへ
 A列が同じで、B列では同じ文字列が無ければ大丈夫でしょうか?
 構成は、お客様から来ているフォームにこちらの情報を打ち込んで並び替えて送りなおす為かえることが出来ないんです。

(GS)


 > A列が同じで、B列では同じ文字列が無ければ大丈夫でしょうか?
 試してみてください。(seiya)


 seiyaさんへ
 実物の表に当てはめようと思ったのですが、実際の表ではA列に同じ数字があった場合、
 B列でなくてC列を優先するのとC列が2行目に判断する文字列があります。
 自分で修正して使わせてもらおうと思ったのですが、難しくてよくわかりませんでした。実物の表を公開しますので直していただけませんでしょうか?
 お手数ですがお願い致します。
 http://proxy.f2.ymdb.yahoofs.jp/users/bd5259d7/bc/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8/%a5%b5%a5%f3%a5%d7%a5%eb.exl.xls?bctlY6DBiLYxPzV0

 (GS)

 > 通し番号って、具体的にはどのように付ければいいんでしょうか?

 E1に「1」と入力、E2に「2」と入力。
 E1からE2を選択した状態でフィルハンドルをダブルクリック。
 (代奈)

 私のやり方だと、こうなりますね。(代奈)

 A       B         C              D         E
 C/NO	STYLE	NO.		

 23	CASE		      23	17
 		S1-3-zxc-012-A	23	18
 24	CASE	       	24	1 
 		S1-3-zxc-012-A	24	2
 25	CASE	       	25	7
 		S1-3-zxc-012-A	25	8
 26	CASE	       	26	21
 		S1-6-zxc-013-A	26	22
 27	CASE	       	27	11
 		S1-6-zxc-013-A	27	12
 28	CASE	       	28	3
 		S1-6-zxc-013-A	28	4
 29	CASE	       	29	13
 		S1-6-zxc-013-A	29	14
 30		       	30	5
 		S1-3-zxc-272-A	30	6
 30		       	30	9
 		S1-3-zxc-257-A	30	10
 30	CASE	       	30	15
 		S1-6-zxc-013-A	30	16
 30		       	30	19
 		S1-3-zxc-258-A	30	20
 30		       	30	23
 		S1-3-zxc-271-A	30	24

 例題とまるっきり違うじゃないですか!

 Sub test()
 Dim x As Long
 Application.ScreenUpdating = False
 With ActiveSheet
    .Columns(1).Insert
    .Range("a3").FormulaR1C1 = _
    "=text(rc[1],""00000"")&r[1]c[3]"
    .Range("a4").FormulaR1C1 = _
    "=r[-1]c&rc[3]"
    x = .Range("d" & Rows.Count).End(xlUp).Row
    With Range("a3").Resize(2)
        .AutoFill .Resize(x - 2)
    End With
    .Range("a3").CurrentRegion.Sort key1:=Range("a3"), _
    key2:=.Range("d3"), header:=xlNo
    .Columns(1).Delete
 End With   
 Application.ScreenUpdating = True
 End Sub
 (seiya)

 結果

 C/NO	STYLE	NO.

 23	CASE	
		S1-3-zxc-012-A
 24	CASE	
		S1-3-zxc-012-A
 25	CASE	
		S1-3-zxc-012-A
 26	CASE	
		S1-6-zxc-013-A
 27	CASE	
		S1-6-zxc-013-A
 28	CASE	
		S1-6-zxc-013-A
 29	CASE	
		S1-6-zxc-013-A
 30		
		S1-3-zxc-257-A
 30		
		S1-3-zxc-258-A
 30		
		S1-3-zxc-271-A
 30		
		S1-3-zxc-272-A
 30	CASE	
		S1-6-zxc-013-A


 お返事ありがとうございます。
 代奈さんへ
 C列の優先順位が合いません・・・。やっぱり、通常の並び替えだと難しいんですね。
 seiyaさんのVBAを使ってやってみます。せっかく考えて頂いたのですが申し訳ありませんでした。 ありがとうございます。

 seiyaさんへ
 例の書き方が良くありませんでした。申し訳ありませんでした。
 結果は完璧にできてます!
 早速、試してみたいと思います。
 ありがとうございました。

 (GS)

 >せっかく考えて頂いたのですが申し訳ありませんでした。 

 案が採用される、されないは重要ではありません。
 後々、似たような悩みを抱えた方が単語検索等でこのようなスレッドを見つけ、
 このような発想を応用されればよいという動機で書き込んでいます。
 私がいつもそのようにして助けられているように。
 (代奈)

  ↑
 ヒューッ(これ口笛の音)
 ナイスレスポンス!
     (名前書かれへん)(笑


コメント返信:

[ 一覧(最新更新順) ]


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