• 締切済み

住所の並び替え

エクセルで住所録を作っています。住所の若い順に並び替えをしたいのですが、うまくいきません。 というのも、**1丁目1-1のあとに**1丁目2-1を並べたくても**1丁目11-1のように並んでしまいます。一桁が先に並ぶ方法がないでしょうか?とっても困ってます!!

みんなの回答

  • siskin
  • ベストアンサー率18% (9/49)
回答No.4

住所データの入っているセルを指定して、 ツールバーの「データ」→「区切り位置」で 「カンマやタブなど・・・」を選択して次へ 区切り文字を「-」としてセルを分割して 並べ替えると上手くいくと思います。 同じような質問が他に出てますので、詳しくは そちらの回答を参考になさっては如何でしょう?

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=260031
回答No.3

それでは,私はNo.1のgonta_gomaさんの方法をもう少しすっきりとさせたやつを・・・。 **1丁目 1- 1 **1丁目 2- 1 **1丁目11- 1 とスペースを入れるのはどうでしょう? 軒数が多い場合は,No.2のnishi6さんの方法で・・・。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

住所の数が多かったり、**1丁目02-01とかの入力にしたくない場合の対応例です。 住所の『番地、号』部分を2桁化するユーザー定義関数を作ってみました。これでソートします。 例えば、住所の列の横(C列として)に1列挿入(D列)して、D列に、=番地補正(C2) のようにします。 『番地、号』部分が2桁化されると思うので、この列を基準にソートします。 通常は、この列を非表示にしておけば気にならないでしょう。 『丁目と-』を基準に考えています。入力具合が完全には分かりませんが、うまくいかない場合があれば補足して下さい。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 挿入→標準モジュールで標準モジュールを挿入します。出てきたコードウインドウに下記マクロを貼り付けます。 Public Function 番地補正(rg As Range)   Dim Jyusyo As String '住所   Dim pot1 As Integer '丁目の位置   Dim pot2 As Integer '『-』の位置   Dim wk1 As String '『-』以下の1文字のチェック用変数   Dim wk2 As String '『-』以下の2文字のチェック用変数   Jyusyo = rg.Text   Jyusyo = Application.Substitute(Jyusyo, "-", "*") '号の後の『-』を無視するため   Jyusyo = Application.Substitute(Jyusyo, " ", "*") '号の後の『 』を無視するため   '番地の2桁化   pot1 = InStr(Jyusyo, "丁目") + 1   pot2 = InStr(pot1, Jyusyo, "*")   If pot2 - pot1 = 2 Then     Jyusyo = Left(Jyusyo, pot1) & "0" & Right(Jyusyo, Len(Jyusyo) - pot1)   End If   '号の2桁化   pot2 = InStr(pot1, Jyusyo, "*")   wk1 = Mid(Jyusyo, pot2 + 1, 1)   wk2 = Mid(Jyusyo & "*", pot2 + 1, 2)   If IsNumeric(wk1) = True And IsNumeric(wk2) = False Then     Jyusyo = Left(Jyusyo, pot2) & "0" & Right(Jyusyo, Len(Jyusyo) - pot2)   End If   番地補正 = Jyusyo End Function

kimikimi
質問者

お礼

とりあえずやってみたのですが、うまくいきませんでした。データが大量なので、この方法をもう少し研究してみたいと思います。ありがとうございました。

回答No.1

**1丁目01-01 **1丁目02-01 **1丁目11-01 という風に桁数をそろえたらどうでしょうか。

関連するQ&A