[[20190111150438]] 『番地とマンション名・部屋番号が混在するセルを、』(中西学) ページの最後に飛ぶ

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

 

『番地とマンション名・部屋番号が混在するセルを、効率よく分割する方法』(中西学)

番地とマンション名・部屋番号が混在するセルを、効率よく分割する方法はありますでしょうか。

入力規則はバラバラでして、以下のような具合です。これらのセルが18,000ほどありまして、非常に困っております。

━━━━━━
1-C-1001号室
1-2-3-506
1-2-3中央ビル506
1-2-3-中央ビル506
1-2-3-中央ビル-C506
━━━━━━

お知恵をお借りできますと幸いです。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 とりあえず、例示のパターンならどのように分けたいのかを書かれた方がいいと思います。
(コナミ) 2019/01/11(金) 15:37

大変失礼しました。
以下のように、番地と建物名に分割できればと思います。

━━━━━━

1-C-1001号室 → 1 C-1001号室
1-2-3-506→1-2-3 506
1-2-3中央ビル506 →1-2-3 中央ビル506
1-2-3-中央ビル506→1-2-3 中央ビル506
1-2-3-中央ビル-C506→1-2-3 中央ビル-C506
━━━━━━
(中西学) 2019/01/11(金) 15:55


 最初のケースとかどこまでが住所なのかを判別するのが難しそうですよね。
 結局は目視になりそうだし。

 もし私がやるなら、MID関数とかで頭から10文字とかを抜き出す式を作って
 別セルに分ける→それでできているデータは抜き出しておく
 10を11に変えて残りをチェック…

 みたいにするでしょうか。
 アナログな対応しか思いつきません…
(コナミ) 2019/01/11(金) 16:32

 例が少なすぎるなぁ・・

 (1) B1セル =MATCH(TRUE,INDEX(ISERR(-MID(SUBSTITUTE(SUBSTITUTE(A1,"-","C",3),"-","0"),ROW($A$1:$A$50),1)),0),0)
 (2) C1セル =LEFT(A1,B1-1-(RIGHT(LEFT(A1,B1-1))="-"))
 (3) D1セル =MID(A1,B1+(LEFT(MID(A1,B1,50))="-"),50)

 <結果図>
  行  _________A_________  _B_  __C__  ______D______
   1  1-C-1001号室           3      1  C-1001号室   
   2  1-2-3-506              6  1-2-3            506
   3  1-2-3中央ビル506       6  1-2-3  中央ビル506  
   4  1-2-3-中央ビル506      6  1-2-3  中央ビル506  
   5  1-2-3-中央ビル-C506    6  1-2-3  中央ビル-C506

( 半平太) 2019/01/11(金) 17:13


Sub main()
'A列に元データ B,C列に分割
    Dim ctr As Long, i As Long, c As Range
    Range("B:C").ClearContents
    For Each c In Range("A:A").SpecialCells(2)
    ctr = 0
    For i = 1 To Len(c.Value)
    If Mid(c.Value, i, 1) = "-" Then ctr = ctr + 1
    If ctr = 3 Then
        c.Offset(, 1).Value = Left(c.Value, i - 1)
        c.Offset(, 2).Value = Mid(c.Value, i + 1)
        Exit For
    End If
    If Not (Mid(c.Value, i, 1) Like "[0-9]") And Mid(c.Value, i, 1) <> "-" Then
        c.Offset(, 1).Value = Left(c.Value, i - 1)
        c.Offset(, 2).Value = Mid(c.Value, i)
        Exit For
    End If
    Next i
    If Right(c.Offset(, 1).Value, 1) = "-" Then c.Offset(, 1).Value = Left(c.Offset(, 1).Value, Len(c.Offset(, 1).Value) - 1)
    Next c
End Sub
(mm) 2019/01/11(金) 17:16

みなさま、ありがとうございます。

イレギュラーな組み合わせ等もありましが、ご教示いただいたマクロと関数を駆使しながらデータ分割ができました。感謝です。
(中西学) 2019/01/19(土) 20:45


コメント返信:

[ 一覧(最新更新順) ]


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