[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『住所の分割』(りんご)
差込印刷を使って、変更届を作っているのですが、住所が長いため変なところで
改行されてしまいます。
そこで、エクセルシートの住所を、住所1住所2住所3と分割して差込印刷のフィールドで
設定しようと思うのですが、住所を住所1都道府県 住所2 市区町村(番地含む) 住所3それ以下(マンション名等)
と分割させるにはどうしたらよいですか?
例 〒587-6876 東京都港区六本木1-1-1 六本木ヒルズ203
住所1 住所2 住所3 東京都 港区六本木1-1-1 六本木ヒルズ203
必ず全角スペースで区切りがあるのでしたら、 メニューのデータ>区切り位置で全角スペースを区切り文字に 指定することで出来そうですが・・・、 さて、実際のデータはそうなっているでしょうか? (みやほりん)(-_∂)b
(りんご)
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 ※名前が抜けてた
弥太郎さんのユーザー関数を愛用しています スゴイです!!!!! (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.