[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『住所を離す方法』(5963)
いつもお世話になっております。
人の作った住所録の修正をしています。
『東京都』『世田谷区』『自由が丘1丁目』とあったら、「&」でくっつけて
『東京都世田谷区自由が丘1丁目』とするのと逆に
A B C D
1 『東京都世田谷区自由が丘1丁目』 『東京都』 『世田谷区』 『自由が丘1丁目』
とA列をB列、C列、D列にわけるのにはどうしたらいいのでしょうか?
よろしくお願いします。(5963)
ヘルプを見ました。
文字数が同じでないと例題のようにわけることはできないのでしょうか?
A B C D
1 『東京都世田谷区自由が丘1丁目』 『東京都』 『世田谷区』 『自由が丘1丁目』
2 『神奈川県横浜市青葉区』 『神奈川県』 『横浜市』 『青葉区』
と200件ほど続きます。理解力に乏しくてすいません。教えてください。(5963)
入力されている住所次第ですが、↓が参考になりませんか? (Hatch) [[20041008223005]]『郵便番号から、住所を複数セルへ振り分ける方法』(コミキ)
ありがとうございます、拝見させていただきましたが、
初心者の私には、ちょっと難しいのかなー・・・(>_<)
もうすこし、簡単に出来るのかななんて思っていました。
でも、大変勉強になりました。ありがとうございました。(5963)
文字をどこで分けるかは人の判断になるので,機械に自動で分けることは不可でしょう。
区,県,市などを区切り末尾と決めておけば,マクロコードで作れないことは ないと思いますが。 そこまでの元気は今ないですね。 (なお)
住所の内容にもよりますが・・・ 私が良く使う手としましては、まず例の内容で行くと
A B C D E 1 東京都世田谷区自由が丘1丁目 2 神奈川県横浜市青葉区
住所のA欄を変換で、「都」は「都 」(都の後ろはスペース)に、「県」は「県 」に、 「区」は「区 」に、「市」は「市 」にそれぞれ一括で変換をかけてしまいます。
A B C D E 1 東京都 世田谷区 自由が丘1丁目 2 神奈川県 横浜市 青葉区
それにそぐわないものだけを手作業で編集しておいて、 後はデータ→区切り位置で、スペースをキーに区切ってしまえば、 (ウイザードの2ページ目のスペースにチェック)
A B C D E 1 東京都 世田谷区 自由が丘1丁目 2 神奈川県 横浜市 青葉区
このようになりますが、どうでしょうか? (OP)
「都道府県」「市区町村」「その下の分類」の3つのブロックに分ける、 という条件なら OPさんの方法がベストでしょう。ただし、○○市○○区と ある場合は、ブロックがもう一つ増えてしまいます。また、市区町村名その ものに「市」とか「町」とかある市川市や町田市などもあって、そういう ところは手作業、ということでしょうね。 (とんとん)
こういうばやいはなんたってスペシャル関数でっせ。 完成品やおまへんけど、住所を分割するにはもってこいの関数ですワ、えぇ。 まあ、いっぺん試してみておくんなはれ。
愛知県郡上市馬宿町3番地15 千葉県今市市町谷3番町 栃木県八日市市新居浜市5条 北海道余市郡余市町3番地 太宰府市西町5丁目 東京都町田市区役所前(ほんなとこは無いで)
とか、その他いろいろ従来の関数では補えない分割(エラーとか割り間違い)を 大部分カバーでけると思いまんねんけど、まぁ、それもこの頭やと限界があります もんでな、そこんとこは手入力でカバーしておくんなはれ。
まあ、なにはともあれ試してみる価値は充分おまっせぇ。 上手い事いったら・・・それはあんさん運がええっちゅう事ですワ。
先ず最初に下のコードを標準モジュールにコピペしておくんなはれ コピーのやりかたはお分かりでっしゃろ?
'------------------------------- Public end_adrs As Long Public flag As Boolean Public adrs3, adrs1 Public sp_data Public tbl As Range Public adrs As String Option Base 1 '-------------------------------- Function yata(data) Dim get_sty() Dim n As Integer, i As Integer, mid_cnt As Integer Dim get_data As String Dim city As Integer, gun As Integer
Application.EnableEvents = True adrs3 = ActiveCell.Column Set tbl = Range(data.Address(0, 0)) If data.Address Like "*:*" Then adrs = data.Address(0, 0) adrs_data = Split(data.Address(0, 0), ":") adrs1 = adrs_data(0) adrs2 = Range(adrs_data(1)).Rows st_adrs = tbl.Cells(1, 1).Row end_adrs = tbl.Rows.Count data = Range(adrs1)
flag = True
ActiveCell(-1).Formula = "=yata (" & adrs1 & ")" End If sp_data = "" If data = "" Then yata = "": Exit Function
Select Case Left(data, 3) Case "大阪府", "京都府", "東京都", "北海道" sp_data = Left(data, 3) & "," mid_cnt = 3 Case Else For i = 3 To 4 If Mid(data, i, 1) = "県" Then sp_data = Left(data, i) & "," mid_cnt = i Exit For End If Next i End Select
get_data = Mid(data, mid_cnt + 1, 77) n = InStr(get_data, "市") city = InStr(n + 1, get_data, "市") gun = InStr(get_data, "郡") If n <> 0 Then If city <> 0 And city < 6 Then Select Case Left(get_data, city) Case "八日市場市", "市川市", "市原市", "今市市", "四日市市", _ "八日市市", "廿日市市" sp_data = sp_data & Left(get_data, city) & "," mid_cnt = mid_cnt + city Case Else If Left(get_data, 3) <> "余市郡" Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If End Select ElseIf gun <> 0 And n > gun Then If get_data Like "郡上市*" Or get_data Like "小郡市*" Or get_data Like _ "郡山市*" Or get_data Like "蒲郡市*" Or get_data Like "大和郡山市*" Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If ElseIf gun <> 0 And n < gun Then If Mid(get_data, 1, gun) <> "高市郡" Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If Else If n <> 1 Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If
End If End If
get_data = Mid(data, mid_cnt + 1, 77) n = InStr(get_data, "区") If n > 1 And n < 5 Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If
get_data = Mid(data, mid_cnt + 1, 69) If Not sp_data Like "*市*" And Not sp_data Like "*区*" Then n = InStr(get_data, "郡") If n > 1 Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n End If End If get_data = Mid(data, mid_cnt + 1, 77) n = InStr(get_data, "町") If n > 1 Then sp_data = sp_data & Mid(get_data, 1, n) & "," mid_cnt = mid_cnt + n ElseIf InStrRev(get_data, "町") > n Then sp_data = sp_data & Mid(get_data, 1, InStrRev(get_data, "町")) & "," mid_cnt = mid_cnt + InStrRev(get_data, "町")
End If get_data = Mid(data, mid_cnt + 1, 77) sp_data = sp_data & Mid(get_data, 1, 77) & "," yata = Split(sp_data, ",")(0) sp_data = Right(sp_data, Len(sp_data) - Len(yata) - 1)
End Function
'次はシート1に下のコードをコピペしておくんなはれ '------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim msg As Range Dim i As Integer, t As Integer, m As Integer, f As Integer, n As Integer Dim rng As String, trgt_data As String Dim data_a Static j As Integer
If Target.Count > 1 Then Exit Sub On Error GoTo trbl data_a = Target.Formula If data_a Like "*:*" Then j = 0 Range(Target.Address(0, 0)).Formula = "=yata(" & adrs1 & ")" Exit Sub End If Set msg = Intersect(Target, tbl) If msg Is Nothing And Left(data_a, 6) <> "=yata(" Then Exit Sub trgt_data = sp_data If Not msg Is Nothing Then Do i = i + 1 If Left(Cells(Target.Row, i).Formula, 6) = "=yata(" Then Cells(Target.Row, i).Select Cells(Target.Row, i).Formula = Cells(Target.Row, i).Formula If Target = "" Then Cells(Target.Row, i + 1).Resize(, 7).ClearContents Exit Sub End If Loop While i < 255 End If
If Left(data_a, 6) = "=yata(" Then Application.EnableEvents = False Target.Offset(, 1).Resize(, 7).ClearContents t = InStr(data_a, "(") m = InStr(data_a, ")") rng = Mid(data_a, t + 1, m - t - 1) msoft = Split(trgt_data, ",", -1) For i = 0 To UBound(msoft) f = Application.WorksheetFunction.Find(msoft(i), Range(rng), 1) n = Len(msoft(i)) If msoft(i) <> "" Then Target.Offset(, i + 1).Formula = "=mid(" & rng & "," & f & "," & n & ")" End If Next i End If If flag Then Application.EnableEvents = True For j = j + 1 To end_adrs Range(adrs).Cells(j + 1, adrs3).Formula = "=yata(" & Range(adrs).Cells(1, 1).Offset(j).Address(0, 0) & ")" Next j
End If flag = False trbl: Application.EnableEvents = True
End Sub
'------------------------------------------ 使用方法は 単独なら、例えばA1のデータを分割したいなら データを抽出したいセルに =yata(a1)と叩いてくらはい。 またまとまったデータがあるばやいは=yata(a1:a500) といった塩梅に入力したらあんさんの希望するデータがズラーッと並びますワ。
ただこれ、未完成品ですので平行行でのみ有効です。(元データがA1からやとC1とか D1とかに=yata( )に入力しておくんなはれ) 行がずれても言う事は聞きますけど、データを変更した時に得たい結果に?マーク がつきますから、それは悪しからず。(笑
ほな・・・(弥太郎)
師匠!!お久しぶりです。 よぉ!日本一!!!!! (SoulMan)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.