[[20070606022731]] 『市、区、町、村で分ける』(いいち) >>BOT

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

 

『市、区、町、村で分ける』(いいち)
 A2=LEFT(A1,FIND("市",A1))で市だけは分割出来たのですが同時に
 区、町、村の場合も分割出来るよう数式を入れたいのですが応用
 が分かりません。OR関数かな?とは思い試してみましたがなかなか
 うまくゆきません。よろしくお願いします。

 全文検索すれば、いろいろと出てくるはず。
[[20070605151955]]『郵便番号を振り分ける』(zamasu)
 (ぽ)

 おはようございま〜す。。。♪

 限定した少ないデータでしたら
 関数でも可能かも知れませんけれど
 住所の分割は、かなり難しいです。。

 ぽさんのリンクされた検索箇所とか

[[20050121161337]] 『住所の分割』(りんご)

[[20040831081709]] 『住所セルの分割』(ピヨ)

 の中の弥太郎さんの スペシャル関数は、いかがでしょうか?

 どんな住所を分割されたいのかも
 書かれた方が良いと思います。。。

 ご参考にどうぞ。。。

 。。。Ms.Rin〜♪♪

 折角Ms.Rin〜♪♪はんが紹介してくれてますんで、ニューバージョンを披露しときま
 すワ。(笑
 今度のんは行がずれとってもOKですし、エラーもでまへん。
 町、村で分割するのは、例えば「京都市左京区烏丸通り長者町下る」こういった町と
 して成立しない住所がしこたまありますんでそれには対処しとりまへん。
 区も又然りです。
 使い方は 複数を一挙に分割するばやいは=adrs1(a1:a500)などと入力します。
 単独で 都道府県、市区、その他 は=adrs1(a1)  =adrs2(a1)  =adrs3(a1)などと
 それぞれのセルに入力して、以下にコピーする方法にも対応しとります。
       (弥太郎)
 標準モジュールへ
 '-------------------------
 Public x As Variant
 Dim sp1 As String, sp2 As String, sp3 As String

 Function adrs2(adrs As Range)
    work (adrs)
    adrs2 = sp2
 End Function
 Function adrs3(adrs As Range)
    work (adrs)
    adrs3 = sp3
 End Function

 Function adrs1(adrs As Range)
    Application.EnableEvents = True
    If adrs.Rows.Count > 1 Then
        ReDim x(1 To adrs.Rows.Count, 1 To 3)
        For i = 1 To adrs.Rows.Count
            x(i, 1) = "=adrs1(" & adrs(i, 1).Address(0, 0) & ")"
            x(i, 2) = "=adrs2(" & adrs(i, 1).Address(0, 0) & ")"
            x(i, 3) = "=adrs3(" & adrs(i, 1).Address(0, 0) & ")"
        Next i
        adrs1 = Empty
        Exit Function
    End If
    work (adrs)
    adrs1 = sp1
 End Function
 Sub work(adrs)
    Dim fist_Cnt As Integer, lngh As Integer
    Dim data As String, get_data As String
    data = adrs

    With CreateObject("vbscript.regexp")
        .Pattern = "^(東京都|大阪府|京都府|北海道)|^(..|...)県"
        If .test(adrs) Then
            sp1 = .Execute(adrs)(0)
            data = Mid(adrs, .Execute(adrs)(0).Length + 1)
        Else
            sp1 = ""
        End If
        .Pattern = "市"
        If .test(data) Then
            fist_Cnt = .Execute(data)(0).firstindex
            .Pattern = "^(八日市場|市川|市原|今市|四日市|八日市|廿日市)市"
            If .test(data) Then
                sp2 = .Execute(data)(0)
                lngh = .Execute(data)(0).Length
            Else
                .Pattern = "^(余市|高市)郡"
                If .test(data) Then
                    sp2 = .Execute(data)(0)
                    lngh = .Execute(data)(0).Length
                Else
                    .Pattern = "^(郡上|小郡|郡山|蒲郡|大和郡山)市"
                    If .test(data) Then
                        sp2 = .Execute(data)(0)
                        lngh = .Execute(data)(0).Length
                    Else
                        .Pattern = "^.+郡"
                        If .test(data) Then
                            sp2 = .Execute(data)(0)
                            lngh = .Execute(data)(0).Length
                        Else
                            sp2 = Left(data, fist_Cnt + 1)
                            lngh = Len(sp2)
                        End If
                    End If
                End If
                data = Mid(data, lngh + 1)
                .Pattern = "^.+区"
                If Right(sp2, 1) = "市" And .test(data) Then
                    get_data = .Execute(data)(0)
                    If .Execute(data)(0).Length < 6 Then
                        .Pattern = "([\d0-9]|一|二|三|四|五|六|七|八|九|十|公園|須岡|城西|八迫|由宇町.|太田中|太田北|金生字.)区"
                        If Not .test(data) Then
                            .Pattern = "(見市笠原町|部市生地|諸市東区)"
                            If Not .test(adrs) Then
                                sp2 = sp2 & get_data
                                data = Mid(data, Len(get_data) + 1)
                            End If
                        End If
                    End If
                End If
            End If

        ElseIf sp1 = "東京都" Or sp1 = "" Then
            .Pattern = "^.+区"
            If .test(data) Then
                sp2 = .Execute(data)(0)
                data = Mid(data, .Execute(data)(0).Length + 1)
            End If
        Else
            .Pattern = "^.+郡"
            If .test(data) Then
                sp2 = .Execute(data)(0)
                data = Mid(data, .Execute(data)(0).Length + 1)
            End If
        End If
    End With
    sp3 = data
 End Sub

 'そのシートモジュールへ
 ’-----------------------
  Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Left(Target.Formula, 7) <> "=adrs1(" Then Exit Sub
    If Not Target.Formula Like "*:*" Then Exit Sub
    Application.EnableEvents = False
    Target.Resize(UBound(x), 3) = x
    Application.EnableEvents = True

 End Sub


弥太郎様 from とおりすがりの者です。
素晴らしいVBAありがとうございます。
使用させていただいております。
要望といいますかお願いですが…。

「市区」までは分解できますが、その先「町、字」で一区切り(地方なもので(笑))「番地(数字)」で最終くくりの感じでバージョンUPなんて考えてますでしょう? 一人ごとでした。


コメント返信:

[ 一覧(最新更新順) ]


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