[[20060711115806]] 『空白セルを含む並べ替えについて』(ワーキングママ) ページの最後に飛ぶ

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

 

『空白セルを含む並べ替えについて』(ワーキングママ)
 データを並べ替える際、空白のセルがあるとうまく並べ替えられません。
たとえば

 受付No 受付日 内容  色
 1   7/3 エアコン  白  
             グレー
 2   7/4 冷蔵庫 白
             ピンク
             ベージュ
 3   7/5 エアコン  ベージュ

 こういったデータの場合、「内容」をキーにして並べ替えると

             グレー
             ピンク
             ベージュ
 1   7/3 エアコン  白 
 3   7/5 エアコン  ベージュ
 2   7/4 冷蔵庫 白
となってしまいます。

 1   7/3 エアコン  白  
             グレー
 3   7/5 エアコン  ベージュ
 2   7/4 冷蔵庫 白
             ピンク
             ベージュ
と並べ替えるにはどうしたらよいでしょうか?
宜しくお願いします。
エクセルバージョン:Excel2000、OSバージョン:Windows2000です。 


 1行ずつ空白なくデータを入れないと、例えば元表2つめのデータ、色グレーのものが
 受付bP、7/3受付日、エアコンの色を指しているってことがエクセルには判断できないです。
 全行データを入れて、見た目を上記のようにするなら、条件付き書式で重複するデータ
のフォント色を白にしてしまうのではいかがでしょう?
    A	B	C	D
1 受付No	受付日	内容	色
2   1	7月3日	エアコン	白
3   1	7月3日	エアコン	グレー
4   2	7月4日	冷蔵庫	白
5   2	7月4日	冷蔵庫	ピンク
6   2	7月4日	冷蔵庫	ベージュ
7   3	7月5日	エアコン	ベージュ
 A2からC7を範囲選択して、メニューバーから 書式>条件付き書式とすすみ、
条件を セルの値が となっているのを 数式が に変更。
 右側のボックスに =AND(A2=A1,$A2=$A1) と入力。
 書式ボタンをクリックして、フォントの色を白に変更してOK、OK。
 お望み通り、ではないんですけど^^;    (かなれっと)

 VBAで
 範囲をは必ず表題の行から指定してください。

 Sub test()
 Dim a, rng As Range, n As Long
 On Error GoTo Last
 Set rng = Application.InputBox("範囲を選択",type:=8)
 If Not rng Is Nothing Then Exit Sub
 On Error GoTo 0
 a = rng.Value
 Redim Preserve a(1 To rng.Rows.Count, 1 To rng.Columns.Count + 1)
 For i = 2 To UBound(a,1)
     If IsEmpty(a(i,2)) Then
        n = 0
        Do While IsEmpty(a(i+n,2))
           a(i+n,UBound(a,2)) = a(i-1,2) & ";" & n
           n = n + 1
        Loop
     End If
 Next
 VSortMA a, 2, UBound(a,1), UBound(a,2)
 rng.Value = a
 Erase a
 Last:
 End Sub

 Private Sub VSortMA(ary, LB, UB, ref)
 Dim M As Variant, temp i As Long, ii As Long, iii As Long
 i = UB : ii = LB
 M = ary(Int((LB + UB) / 2), ref)
 Do While ii <= i
     Do While ary(ii,ref) < M
          ii = ii + 1
     Loop
     Do While ary(i, ref) > M
          i = i - 1
     Loop
     If ii <= i Then
          For iii = LBound(ary,2) To UBound(ary,2)
               temp = ary(ii,iii) : ary(ii,iii) = ary(i,iii) : ary(i,iii) = temp
          Next
          ii = ii + 1 : i = i -1
     End If
 Loop
 If LB < i Then VSortMA ary, LB, i, ref
 If ii < UB Then VSortMA ary, ii, UB, ref
 End Sub
 (seiya)

かなれっと様、seiya様、ご回答ありがとうございました。
ご返信遅れてすみません。出来てからと思ったのですが、当方
エクセルの初心者の為、色々苦戦して試している最中です。
もう少しがんばってみます。


まずは、空白セルをなくして、並び替えを
行い。必要なら、再度同一項目を空白に
書き換えるという方法でどうでしょうか。
  空白セルを埋めたり、空白に
書き換えるという方法は比較的に簡単な
マクロで書けると思いますので、その
両者を組み合わせるか、別々に実行する
にでもいいでしょう。(夕焼)


 かなれっとさんが書かれているように、データを全て埋める方法です。

 	 [A]	 [B]	 [C]	 [D]
 [ 1]	受付No	受付日	内容	色
 [ 2]	1	7月3日	エアコン	白
 [ 3]				グレー
 [ 4]	2	7月4日	冷蔵庫	白
 [ 5]				ピンク
 [ 6]				ベージュ
 [ 7]	3	7月5日	エアコン	ベージュ

 上記のようなセル配置だとしたとき、C1を選択して、データ>フィルタ>オートフィルタ
 出来たオートフィルタのC列を選択して、空白セルでフィルタ
 C3から下を選択した状態で、=C2 と入力し、Ctrlキー押しながらEnterキーで確定

 これで空白セルが埋まりますので、 再度C列のフィルタを全て表示させて、C列で並び替え

 (川野鮎太郎)

川野鮎太郎さんの空白セルを埋める方法で、できました。

ただ、並べ替えた後、また空白に戻す方法は分かりません・・。

他の皆さんのアドバイスも確認中です。

色々教えて頂き、ありがとうございました。


 数式を入れたC列全体を選択して、編集>ジャンプ>セル選択>数式にチェックして
 OK そのままDeleteで消去できます。

 (川野鮎太郎)

すいません、これを参考にしているのですが、

『これで空白セルが埋まりますので、 再度C列のフィルタを全て表示させて、C列で並び替え』
これをすると、参照したまま並べ替えるので、
数式になっているところは、変わってしまいますよね??

なんらかの方法があれば教えてください

YK


 数式を入れた後にその列をコピーして同じところに値だけ貼り付け。
 これで数式は値になります。
 BJ


BJ様
ありがとうございました
YK

コメント返信:

[ 一覧(最新更新順) ]


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