[[20080910113406]] 『住所の並び替えについて』(ばら) ページの最後に飛ぶ

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

 

『住所の並び替えについて』(ばら)

 はじめてお世話になります。
 現在エクセルで顧客を住所順に並べていますが
 うまくいきません。(下記参照)

 (たて並びで)
 ばら町1-1-3
 ばら町1-12-3
 ばら町1-2-3

 のようになってしまいます。

 これを

  (たて並びで)
 ばら町1-1-3
 ばら町1-2-3
 ばら町1-12-3

 のようにしたいのですが、
 何か良い方法があれば教えていただけませんか?
 よろしくお願いいたします。

 (Excel2003、WindowsXPを使用しています)


 住所は必ず(或いは基本的に)
 「○○町 (丁目) ハイフン (番地) ハイフン (号)」
 の様になっているのでしょうか?

 でしたら、この列をコピーし表の最終列へ貼り付け
 データ → 区切り位置 と進み
 ハイフンで区切ると
 「○○町 (丁目)」「(番地)」「(号)」
 の3つの列に分かれるので、これらの列を使用して
 並べ替えを行うのはどうでしょう。

 但し、「番地」「号」しかない住所の場合は
 丁目の列に番地が、番地の列に号が入りますので
 手直しが必要です。

 (HANA) 

さっそくご回答ありがとうございます。
実は一つのセルに”ばら町1-2-3”と入力してある状態です。
HANAさんのご回答ですと「番地」「号」などと
わけないと並び替えはできないのですね?

もし可能であれば一つのセルに入力してあるので
それを利用して並び替えをしたいのですが
不可能でしょうか?

ご回答よろしくお願いいたします。


 1つのセルに入力している文字列を並び替えると、頭の文字から小さい順(大きい順)に並ぶと
 思って下さい。
 ですので、"1-2-3"の方が"1-12-3"より大きいと言うようになってしまいます。
 ⇒左から3文字目の"2"と"1"では"1"の方が小さいですよね。
 ですから分割が必要になります。

 或いはマクロで。
 (歩行者)

 [御参考]
[[20030828005606]] 『住所の番地順に並び替えるには』(TSND)
 (dack)

ご回答ありがとうございました。
分割にしてがんばってみます

 ん?
 >この列をコピーし表の最終列へ貼り付け
 >データ → 区切り位置 と進み
 >ハイフンで区切ると
 自動的に分割されますが・・・。

 「再入力するのが面倒だなぁ」
 なんて思って居られるのでしたら
 お試し下さい。

 (HANA)

 田舎町3丁目14番15号
 ばら町3-12-15
 田舎町4-12-18
 ばら町3-3-8
 等と入力されとっても並べ替えます。
 その範囲をマウスでなぞってAlt+F8で並べ替え一発を実行
       (弥太郎)
 '---------------------
  Sub 並べ替え一発()
    Dim data As String, rng As Range, i As Long, x
    Application.ScreenUpdating = False
    With CreateObject("vbscript.regexp")
        .Pattern = "(\D+)(\d+)(丁目|-)(\d+)(番|番地|-)(\d+)(.+)*"
        tbl = Selection.Value
        Set rng = Selection.Cells(1)
        ReDim x(1 To UBound(tbl, 1), 1 To 2)
        For i = 1 To UBound(tbl, 1)
            data = StrConv(tbl(i, 1), vbNarrow)
            If .test(data) Then
                x(i, 1) = .Replace(data, "$1")
                x(i, 2) = Format(.Replace(data, "$2"), "00000") & "-" & Format(.Replace(data, "$4"), "00000") _
                    & "-" & Format(.Replace(data, "$6"), "00000")
            End If
        Next
        Sheets.Add.Name = "dmy"
        With Sheets("dmy")
            Cells(1, 1).Resize(UBound(tbl, 1), 1) = tbl
            Cells(1, 2).Resize(UBound(tbl, 1), 2) = x
            Cells(1, 1).Resize(UBound(tbl, 1), 3).sort key1:=Cells(1, 2), key2:=Cells(1, 3), _
                    order1:=xlAscending, order2:=xlAscending
            tbl = Cells(1, 1).Resize(UBound(tbl, 1))
        End With
    End With
    Application.DisplayAlerts = False
    Sheets("dmy").Delete
    rng.Resize(UBound(tbl, 1)) = tbl
    Application.ScreenUpdating = True
 End Sub

 無用な変数がありましたんで削除
       (弥太郎)
 9/11 9:55

コメント返信:

[ 一覧(最新更新順) ]


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