[[20050408162423]] 『住所の分割』(りんご) ページの最後に飛ぶ

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

 

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

差込印刷を使って、変更届を作っているのですが、住所が長いため変なところで
改行されてしまいます。
そこで、エクセルシートの住所を、住所1住所2住所3と分割して差込印刷のフィールドで
設定しようと思うのですが、住所を住所1都道府県 住所2 市区町村(番地含む) 住所3それ以下(マンション名等)
と分割させるにはどうしたらよいですか?

例 〒587-6876 東京都港区六本木1-1-1 六本木ヒルズ203
  
 

 住所1  住所2       住所3
 東京都  港区六本木1-1-1  六本木ヒルズ203

 必ず全角スペースで区切りがあるのでしたら、
メニューのデータ>区切り位置で全角スペースを区切り文字に
指定することで出来そうですが・・・、
さて、実際のデータはそうなっているでしょうか?
(みやほりん)(-_∂)b

 デ−タはべた打ちになっているので東京都港区六本木1-1-1六本木ヒルズ203
 となっています。
 これだと難しいですか?

  (りんご)


 A1セルに住所があるとして、
 B1セル =IF(OR(MID(A1,3,1)="都",MID(A1,3,1)="道",MID(A1,3,1)="府",MID(A1,3,1)="県"),LEFT(A1,3),LEFT(A1,4))
 C1セル =RIGHT(A1,(LEN(A1)-LEN(B1))) 
 こんな感じで 都道府県は分けられます。住所3は分け目の基準が無いと
 難しいと思います。
(純丸)(o^-')b ※名前が抜けてた


[[20050121161337]]『住所を離す方法』(5963)
 弥太郎さんのユーザー関数を愛用しています
 スゴイです!!!!!
 (kohe)

 koheさん、おおきに〜
 なんとなく引きづりだされとるような、とらんような・・・(笑
 わたしゃサルやおまへんけど、サルの気持ちが良う分かりますワ、はい。
 ほんなら一丁木ぃに登ってみたろやおまへんか(笑

 但し絶対条件として住所3の分け目には必ず全角か半角のスペースを挟んで
 くらはい。(スペースは1個に限る)
 郵便番号と住所はくっついとってもスペースがはいっとってもOKデス。
 勿論郵便番号が無いデータでもいけまっせぇ。

 標準モジュールに
 '-----------------------------------
 Option Explicit
 Public adrs_1 As String
 Public tbl As Range
 Public data As Range
 Public adrs As String
 Dim sp_data As String
 Dim get_data As Variant
 '-------------------------------------
 Function ringo(data As Range)
    adrs_1 = data.Address
    If data.Address Like "*:*" Then
        data = Range(Split(data.Address, ":"))
    End If
    macro (data)
    ringo = sp_data
 End Function
 '-------------------------------------
 Sub test()
    Application.EnableEvents = True
 End Sub
 '----------------------------------
 Function ringo1(data As Range)
    macro (data)
    ringo1 = Right(get_data(0), Len(get_data(0)) - Len(sp_data))
 End Function
 '------------------------------------
 Function ringo2(data As Range)
    macro (data)
    ringo2 = get_data(1)
 End Function
 '----------------------------------
 Sub macro(data)
    Dim i As Integer
    Dim flag As Boolean
    If Left(data, 1) = "〒" Then
        data = Right(data, Len(data) - 9)
    End If
    If Left(data, 1) = " " Or Left(data, 1) = " " Then
        data = Right(data, Len(data) - 1)
    End If
        data = Replace(data, " ", " ")
        get_data = Split(data, " ")
    Select Case Left(get_data(0), 3)
        Case "大阪府", "京都府", "東京都", "北海道"
            sp_data = Left(get_data(0), 3)
        Case Else
            For i = 3 To 4
                If Mid(get_data(0), i, 1) = "県" Then
                    sp_data = Left(get_data(0), i)
                    flag = True
                    Exit For
                End If
            Next i
            If Not flag Then sp_data = ""
    End Select

 End Sub

 'シートモジュールへ
 '-----------------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Left(Target.Formula, 7) <> "=ringo(" Then Exit Sub
        adrs = Target.Address(0, 0)

    Set tbl = Range(adrs_1)
    Application.EnableEvents = False
    Set data = Range(adrs)
    Range(adrs).Offset(, 0) = "=ringo(" & tbl.Cells(1, 1).Address(0, 0) & ")"
    Range(adrs).Offset(, 1) = "=ringo1(" & tbl.Cells(1, 1).Address(0, 0) & ")"
    Range(adrs).Offset(, 2) = "=ringo2(" & tbl.Cells(1, 1).Address(0, 0) & ")"

    If tbl.Rows.Count > 1 Then
        Range(adrs).Offset(, 0).Resize(, 3).Select
        Selection.AutoFill Destination:=Range(adrs).Offset().Resize _
                            (tbl.Rows.Count, 3), Type:=xlFillDefault
        adrs_1 = ""
    End If

    Application.EnableEvents = True
 End Sub

 これはスペシャル関数と申しますが、まあ、一般的に関数と同じ役目を果たします
 んですます。
 従って、例えば分割したいデータがA1からA500に並んどるとすると拾い出したい
 セルに=ringo(a1:a500)といった塩梅に入力してみてくらはい。
 勿論=ringo(a1)っちゅう具合にも使えます、はい。
 まぁまぁ、なにはともあれいっぺん試してみておくんなはれ。きっとお気に召される
 ものと信じて疑いまへん。(笑

 多分エラーはでんとは思いますがなんせこの世は何が起こるかわかりまへんさかい、
 そん時はtestを実行しといてくだはい。
    ほな(弥太郎)(宮保倫流笑顔)


コメント返信:

[ 一覧(最新更新順) ]


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