• ベストアンサー

エクセル:住所の番地順に並び替えたい

お願いします。エクセル2000です。 住所データを並べ替えすると次のような順番になってしまいます。 (例1) 東京都東京市大畑878-9 東京都東京市大畑88-14 東京都東京市大畑88-15 東京都東京市大畑882-10 これを次のような順番にソートするためにはどうすればよいでしょうか。 (例2) 東京都東京市大畑88-14 東京都東京市大畑88-15 東京都東京市大畑878-9 東京都東京市大畑882-10

  • x9e
  • お礼率57% (105/182)

質問者が選んだベストアンサー

  • ベストアンサー
  • Yosha
  • ベストアンサー率59% (172/287)
回答No.8

例のように漢字と数字(文字列)とが続いている場合のソートの方法は、適当な関数が用意されていないので、ちょっと面倒くさく、次のようになります。(他にも方法はありますが、これが分かり易いので...) 番地順にソートするには、番地の部分を抜き出して、数字に変換するか、または番地の頭に"0"を幾つか追加して、この番地に対して行えばよいことになります。 これには、何段階かの手順を踏みますので、シート内の右の方の住所録には使わないセルを作業用として割り当てます。今回は、A列に住所が書かれており、E列目より右が空いていて、作業用として使えるものと仮定します。 手順は、 1)住所の中には"-"が複数あるのが通常ですから、ソートに不要な最初の"-"位置から後を削除するために、"-"の位置を検索します(G列)。 2)住所の"-"以降を削除した新しい住所を作成します(H列)。 3)この住所中のそれぞれの数字の位置を検出します(I列~Q列)。 4)その中の最小値を見つけます(F列)。 5)この位置以降が番地となりますので、この部分をとりだし、数値に変換します(E列)。 最後に、ソートしたい住所をA列~E列を含めて、選択し、E列についてソートし目的が達成できます。 エクセルで作業をするときこのように空いたセルを利用して作業を行えば分かり易く間違えのない作業が出来ます。 具体的には、 1)G列に、「=SEARCH("-",A1)」または「=SEARCH("-",$A1)」の関数を入れます。 2)H列に、「=LEFT(A1,G1-1)」または「=LEFT($A1,$G1-1)」の関数を入れます。 3)I列に、「=IF(ISERR(SEARCH("1",$H1)),"",SEARCH("1",$H1))」の関数を入れます。 "1"の中の数字は、住所内の数字と同じ形式(全角の場合は全角での意味)にします。 SEARCH関数は、検索文字列が見つからない場合には"#VALUE!"エラーを返しますので、セルを空欄にします。 このI列のセルをJ列~Q列までまでコピーし、"1"の部分をそれぞれ"2"~"9"に変更します。 4)F列に、「=MIN(I1:Q1)」または「=MIN($I1:$Q1)」の関数を入れます。 5)E列に、「=VALUE(MID(H1,F1,50))」または「=VALUE(MID($H1,$F1,50))」の関数を入れます。 関数中の[50]は、引数を入れないとエラーとなりますので、住所の文字列より多い数を入れます。多すぎる場合にはエラーとなりませんので多目の数字を入れます。 最後に、例の場合だと("A1:E4") または("A1:Q4")を選択し、[データ]→[並べ替え]→[優先されるキー] 1番目[昇順]を選び[OK]を押して、目的達成です。 この後、不要ならば、作業領域のセルを削除してください。

x9e
質問者

お礼

大変ありがとうございます!

その他の回答 (9)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんばんは。 私は、以前、某掲示板をROMしていた時に、似たような話の覚えがありますが、現実のデータでは、ものすごく難しいと感じました。以下のようにしてみましたが、自分でも疑心暗鬼です。 一応、アラビア数字が書かれているものとします。 ただ、数字がどこに出てくるか分からないからです。せめて、市町ぐらいならよいのですが、[市町]がないとすると、訳が分からなくなってきます。また、漢数字で、最後だけが、アラビア数字だと、誤動作します。 ユーザー定義関数です。 (標準モジュールに貼り付けます) '------------------------------------------------------ Function FigPickup(arg As Variant) As Double '住所の中から、数字のまとまりを二つだす関数 Dim myStr As String Dim Matches As Object Dim Match As Object Dim buf As String If VarType(arg) <> vbString Then Exit Function myStr = StrConv(arg, vbNarrow) With CreateObject("VBScript.RegExp")  .Global = False  .Pattern = "[区市町]\D*(\d+-?\d*)"  Set Matches = .Execute(myStr)  If Not Matches Is Nothing Then    Set Match = Matches(0)    buf = Replace(Match.SubMatches(0), "-", ".")  End If  FigPickup = buf End With End Function '------------------------------------------------------   住所             数字      東京都東京市大畑878-9 →878.9 =FigPickup(A1) XXX都XXXX区XXXX1-26-1 →1.26  =FigPickup(A2) という数字を出してきます。 この出てきた数字で並べ替えればよいです。ただ、うまくいくのか、疑問が残ります。

x9e
質問者

お礼

ありがとうございます!!+

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.9

No.8です。書き忘れましたので、追加します。 5)まで終了しましたら、(E1:Q1)を選択し、選択範囲の右下の「+」を左クリックしたまま、住所が書き込まれている最後の行まで、ドラッグしてコピーします。 これで、住所が書き込まれている全行のE列~Q列に関数が書き込まれました。 このあと、「最後に、・・・」を実行してください。

回答No.7

どうしてもであれば 住所1、住所2、住所3...として 住所1に東京都~大畑までを入力 住所2に88、住所3に14、住所4に次の番地を数字で入力し ソートキーを住所1を第一キー、住所2を第二キー、住所3を第三キーとすればソートできます 住所表示は別セルで&でつなげば出来ます 要するに数字セルは数字、文字セルは文字に分ける事が大事です

noname#204879
noname#204879
回答No.6

No.5ですが、その発言は無視してください。私が勘違いしていました。お騒がせしました。

noname#204879
noname#204879
回答No.5

「次のような順番」はどのような規則になっていると考えれば良いのですか? コンピュータは一定の規則に基づいてしか仕事をしてくれませんから。

noname#22222
noname#22222
回答No.4

東京都東京市大畑088-14 東京都東京市大畑088-15 東京都東京市大畑878-09 東京都東京市大畑882-10 とデータを修正!

  • makoteru
  • ベストアンサー率29% (128/440)
回答No.3

この参考URLも一度ご覧ください。 同じ問い合わせかと・・

参考URL:
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200502/05020043.txt
  • dulatour
  • ベストアンサー率20% (327/1580)
回答No.2

ソートは、数字の昇降順なので、一般の方法では、多い順か、少ない順にしか並べ替えは出来ないでしょう。自分の並べたいようにインデックスを付けるしか、ないのでは・・・

  • mii-japan
  • ベストアンサー率30% (874/2820)
回答No.1

東京都東京市大畑 88-14 東京都東京市大畑 88-15 東京都東京市大畑878-9 東京都東京市大畑882-10 の様にデータを修正するしか無いのでは (並べ替えの判定手順から見て)

関連するQ&A

  • Excelで住所を2つ(町名迄と番地以降)に分けるには?

    お世話になります。 Winxp、Excel2003を使用しています。 以下のような住所データがあります。 これを、町名迄と番地以降の2つのセルに分けるには、どうすれば良いでしょうか?よろしくお願いします。 セルA1に東京都小平市東町5-8-15       ↓   セルA2には東京都小平市東町 セルA3には5-8-15 としたい。

  • エクセルの関数で1つのセルに入っている住所を丁目までと番地以降に分けたい

    エクセルで1つのセルに東京都○○区○○町○丁目○ー○というように住所が入力されており、これを関数で「東京都○○区○○町○丁目」と「○ー○」に分けたいのですがどうすればよいでしょうか? また東京都××区××町×ー×というように丁目が入らない住所に関しては「東京都××区××町」と「×ー×」に分離したいです。 上記の処理が可能な関数を教えてください。

  • エクセルで住所を並べかえる方法教え下さい!

    エクセルで住所録を番地順に並べかえたいのですが、1つのセルに住所が収まっていて「並べかえ」機能でうまく並べかえできません。 文字列として認識されてしまってるので、1つずつ数字に変換できればいいと思うのですが… データは以下の様な感じで、入っている数字の個数が定まっておりません。 例)東京都足立区123番地1 パークス足立101 例)東京都練馬区1丁目2番1号 例)東京都江東区123番地 他の質問を拝見して、1つ目の数字の所までは並べかえ成功しました。 ただ2つ目(枝番)以降がどうしてもうまくいきません(3つ目の数字があることによりエラーになっているようです)。 関数を使ってうまくできないでしょうか。 あまり詳しくないので、悪戦苦闘しております。 よろしくお願いいたします。

  • エクセルで住所を違うセルに分けたいのですが・・・

    エクセル2000で住所禄を作ってあるのですが、そこから市町村の前の部分で 分けたいのですが可能でしょうか? ○○郡 △△町 ・・・・・ □□郡 ××村 ・・・・・     ◆◆市 ・・・・・ この例で言うと現在一つのセルにすべて入っている内容を郡と町、村、市と・・・・の3つの部分をそれぞれセルに分けたいのです。 ◆◆市が郡の列に入っても構いません。 たくさんあるデータをソートをかけて拠出していきたい為、何とかして分けられないものかと思案しています。 可能であれば方法を教えて下さい。

  • Excelの貼り付けが機能しない

    Excelでテーブル(Ctrl+T)でデータをソートして、それを別のExcelファイルに貼り付けしようとすると、一部しかコピーされません。 なぜでしょうか? 例) AというExcelファイルに全国の飲食店のデータがあるとします。 それらをCtrl+Tでフィルタリングします。 それで東京都、神奈川県の表示をするために、東京都、神奈川県のみをソートします。 ソートしたデータをコピーします。 それを、別のExcel、または別のシートなどに張り付けてもなぜか、 一部しか張り付かないです。。 なぜでしょうか? どうすれば原因解決するのでしょうか? Excel2010を利用しています。

  • エクセルにて住所録からグラフを作成したいのですが

    エクセルにて住所録からグラフを作成したいのですが、 文字をカウントする方法はありますでしょうか? 東京都新宿区 東京都練馬区 神奈川県横浜市 それ以外 などで分類し、人数(住所録人口)をグラフにしたいと考えています。 よろしくお願い致します。

  • 住所の番地とそのあとを分割したい

    住所の番地とそのあとを分割したい のです 例えば 「東京都港区赤坂1-2-3メゾン赤坂505」というデータがあった時に メゾン赤坂505のみをセル分割したいのです 番地は算用数字のみです どなたかご存じでしょうか?

  • 住所の番地とそのあとを分割したい

    住所の番地とそのあとを分割したい のです 例えば 「東京都港区赤坂1-2-3メゾン赤坂505」というデータがあった時に メゾン赤坂505のみをセル分割したいのです 番地は算用数字のみです どなたかご存じでしょうか?

  • 海外サイトでの住所の入力方法

    海外のサイトでの住所の入力方法はどういう順番になるのでしょうか? 例 東京都東京市東京1丁目2-3東京マンション456号室の場合はどの順番に入力すればいいんでしょうか? ちなみに下記のサイトです。 https://www.cdwow.com/account/signup よろしくお願いします。

  • エクセルで住所録を作成中です。

    エクセルで住所録を作成中です。 B列に住所が入力されている場合に、その列に記載されている住所が”港区”ならC列に”甲”と表示し、”中野区”なら”乙”と表示するというふうに、住所の中に特定の文字列を含んでいれば、それに対応した特定の文字列を表示する方法を教えて下さい。 例)  A      B        C 鈴木一郎 東京都港区・・・   甲 田中太郎 東京都中野区・・・  乙 山田花子 東京都千代田区・・・ 丙

専門家に質問してみよう