[[20040831081709]] 『住所セルの分割』(ピヨ) ページの最後に飛ぶ

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

 

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

同じセルに市区町村名が入ったセルを、市区・町村名の2つのセルに分割するって不可能ですか?


 一定の条件や規則性があれば可能です。

  (INA)


衝突しました・・・。

 A1に文字が入っているとして、B1に市または区、C1にそれ以降の住所として以下ではどうでしょう。
 B1=LEFT(A1,IF(ISERR(FIND("市",A1,1)),FIND("区",A1,1),FIND("市",A1,1)))
 C1==MID(A1,IF(ISERR(FIND("市",A1,1)),FIND("区",A1,1),FIND("市",A1,1))+1,LEN(A1)-IF(ISERR(FIND("市",A1,1)),FIND("区",A1,1),FIND("市",A1,1)))
 ただし、C1の式が長くなるので、100文字以上ってまず無いでしょうから、
 C1=MID(A1,IF(ISERR(FIND("市",A1,1)),FIND("区",A1,1),FIND("市",A1,1))+1,100)
 こちらでも良いです。
追加:住所として分ける場合は、市と区が逆かも・・・(^_^;)
 (川野鮎太郎)


ありがとうございました。郡のない分については分割できました(^^♪

郡のある分もいろいろやってみたところ、なんとか分割できました。

ところで、
(ISERR(FIND("市",A1,1)),FIND("区",A1,1),FIND("市",A1,1))
の最後の FIND("市",A1,1) は重複しているようなのですが、これも必要なのでしょうか?

(ピヨ)


 重複しているわけではなく、IF文で市が無いときは、区までの文字数、
 市がある場合には市までの文字数としてますので必要です。

(川野鮎太郎)


 あれ?IFの仕組みが?なのに、郡まで考慮したものが出来たんですね(^_^;)
 (川野鮎太郎)


 これは大変難しい作業ですワ。
 例えば 下のデータのばやい

 兵庫県明石市西城町2丁目	    兵庫県明石市	    西城町2丁目
 郡山市東中町5丁目	    郡山市	    東中町5丁目
 寝屋川市寝屋川市役所前2丁目  寝屋川市	    寝屋川市役所前2丁目
 徳島県三好郡市場町	    徳島県三好郡市	    場町
 八日市場市場内3	             八日市	    場市場内3
 市川市古市3丁目		    市                川市古市3丁目
 八日市市赤池町4番地	    八日市	    市赤池町4番地
 四日市市中町5丁目	    四日市	    市中町5丁目
 廿日市市本町6丁目	    廿日市	    市本町6丁目
 東京都町田市東町2−3	    東京都町田市	    東町2−3
 東京都練馬区古市町3丁目	    東京都練馬区古市  町3丁目
 香川県大川郡引田町7番地	    #VALUE!	    #VALUE!

 川野さんの関数やと右のようになってしまいますわなぁ。
 川野さん、勘違いせんとってや、あんさんの関数にイチャモン付けとるわけやおまへん
 でぇ。(笑)

 いやさ、これを関数で補おうと思うたら相当長い関数になるか、作業列で紛らわしい
 データを別リストにしてそれを検索しながらというふうになりますわなぁ。
 それでもでけるかどうかは疑問とちゃいまっか?
 我と思わん方、挑戦してみてくだはい。

 以前に似たような質問があって(そんときは県、区、市、郡、町、村 別に分ける や
 ったと思う)途中で頓挫したユーザー関数があったんでそれをちょっといじってみまし
 た。
 電車の駅名でも頭に市の付く駅が33個もおますさかい、日本全国市の付く町や村はゴマ
 ンとおまっしゃろ。郡も然りですわなぁ。

 せやさかい、この関数が全てをカバーしとるとは到底思えまへんけど、その何分の1
 かは補うとると思いますんでご参考に。
 使用方法は下のコードを標準モジュールにコピペして
 分割したいセルに、例えばA列にデータが並んどるとしたら
 B1に(任意)=splt(a1) C1に =splt2(b1) '←これ重要
 とすれば2つのセルに欲しいデータが並ぶ筈ですから、後は下方向へそれぞれコピー
 して貰たらOKデス。
        (弥太郎)
 '-------------------------------
 Function splt(data)
    Dim i As Integer, f As Integer, x As Integer, y As Integer, n As Integer
    Dim get_city

    y = InStr(data, "市")
    x = InStrRev(data, "市")
    f = InStr(data, "区")
    n = InStr(data, "郡")

    If y > 0 And f > 0 And f < x Then y = 0
    If y > 0 And n > 0 And n < x Then
        If data Like "*郡山市*" Then
            y = y
        Else
            y = 0
        End If
    End If
    If y = 0 Then
        y = InStr(data, "区")
        If y = 0 Then
            y = InStr(data, "郡")
        Else
        End If
        splt = Left(data, y)
    Else
        If y = x Then
            splt = Left(data, y)
        Else
            get_city = Array("八日市場市", "市川市", "市原市", "今市市", "四日市市", _
                                "八日市市", "廿日市市")

             For i = 0 To UBound(get_city)
                If data Like "*" & get_city(i) & "*" Then
                   splt = get_city(i)
                    Exit For
                End If

            Next i
            If IsEmpty(splt) Then
                splt = Left(data, y)
            End If

        End If
    End If
 End Function
 '----------------------------------
 Function splt2(data)
    Dim t As Integer
    Dim adrs As String
    Dim get_formula

    get_formula = Range(data.Address).Formula
    t = InStr(get_formula, "(")
    adrs = Mid(get_formula, t + 1, Len(get_formula) - (t + 1))
    splt2 = Right(Range(adrs), Len(Range(adrs)) - Len(Range(data.Address)))
 End Function


 (T▽T)アハハ!郡に対応したのは作ってたんですが・・・
 =LEFT(A1,IF(ISERR(FIND("区",A1)),IF(ISERR(FIND("市",A1)),FIND("郡",A1),FIND("市",A1)),FIND("区",A1)))
 確かに、市や郡を含む住所ってありますよね(^_^;)
 そこまで深く考えていなかった_/ ̄|○ il||li
 (川野鮎太郎)


 ところで平群(へぐり)って市でっしゃろか?
 川野さん、ご存じ有りまへんか?
   地理には格別疎い(弥太郎)


 ググッてみました。
 へぐり 【平群】
 奈良県北西部にある農林業の町。古代の豪族平群氏の本拠地。信貴山寺がある
 奈良県生駒郡平群町らしいです。
 (川野鮎太郎)

 あっら〜、なんと、わたしの縄張り関西地区やったとは。 
 いや、なんともはや、お恥ずかしい。
 訊かにゃよかった。(汗)
 川野さん、えらい手間とらせてスンマヘン。
 今度コーヒー奢りますワ。
     汗、汗(弥太郎)
 

コメント返信:

[ 一覧(最新更新順) ]


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