No.7ベストアンサー
- 回答日時:
非常に微妙な論理を使ってますが、下記を実行して、ほぼうまく行けば使って見てください。
(1)テストとして、100行分のぐらいの住所を別シートのA列にコピーする。そして下記を実行し、B、C列に分離された内容が、圧倒的行数で正しいかチェック。不適当が少数なら手で修正する。
ロジックは文字部の塊が終わり、数字かハイフンが出現し、再び文字の現れた個所以下を気付・アパートとする。
Sub test01()
For i = 1 To 100 '1000行までなら1000に変える
s = Cells(i, "A") '住所のある列、C列なら"C"
For j = 1 To 30 '30は1000人の住所全体の最大文字数
c = Mid(s, j, 1) '住所のj番目文字を問題にする
Select Case c
Case Is = IsNumeric(c) '数字か
flg = 1
Case "0" 'ゼロか
Case "-" 'ハイフンか
Case "-" 'ハイフンか
Case Else
If flg = 1 Then
Cells(i, "B") = Mid(s, 1, j - 1) '分離後住所本体部を置く列
Cells(i, "C") = Mid(s, j, 10) '気付アパート部を置く列
flg = 0
GoTo p01
Else
flg = 0
End If
End Select
Next j
p01:
Next i
End Sub
(2)旨くいく条件
町字までの住所本体には数字や-がないとする.
丁・番・号には数字か-しかないものとする。1丁目とか2番地などの表現がないこと。
VBAの実行はシートでALT+F11
VBE画面で挿入(I)、標準モジュール(M)で出てくる画面に貼りつけ、F5キーで実行。
(テスト)
静岡市山田1-2山田マンション1234
仙台市新町1-2-3ABCアパート
大手町2-3-4富士ビル3階
大阪市中央区大手町1-20沖縄
大阪市北区駅前1-21希望1-234
東京都千代田区大手町3-3-3日本ビル123
埼玉県さいたま市宮前2-3-4 金剛333
埼玉県さいたま市宮前2-3-4
C列は
山田マンション123
ABCアパート
富士ビル3階
沖縄
希望1-234
日本ビル123
金剛333
となりました。
丁寧なご説明有難うございます。
#4さんにも描いたのですが番地の前に数字が入っているものが100件ほどありましたが、後はうまくいきました。
VBAは便利なものですね。
自分でも勉強してみようと思います。
本当に助かりました。
No.4
- 回答日時:
VBAマクロでよければ下記のコードをマクロの標準モジュールにコピー&ペーストして「マクロ実行」で試してみてください。
ただし下記の制約が必要です。1.番地表記が必ず半角数値で半角"="(ハイフン)でつながっていること。
2.アパート名の先頭文字が半角数字でないこと。
3.番地より手前の住所に半角数値が入っていないこと。
4.元住所がA列の1行目から下方向へあること
5.分割されたデータはそれぞれB列C列に入ります。
***ここからコピー
Option Explicit
Private Sub Split_Str()
Dim strAdd1 As String, strAdd2 As String, strAdd3 As String
Dim i As Integer, blnFlg As Boolean
Dim RowCnt As Integer
ThisWorkbook.Sheets(1).Activate
For RowCnt = 0 To 10
strAdd1 = Cells(1 + RowCnt, 1).Value
If strAdd1 = "" Then Exit For
blnFlg = True
For i = 1 To Len(strAdd1)
Select Case Mid(strAdd1, i, 1)
Case "0" To "9"
strAdd2 = Mid(strAdd1, 1, i)
blnFlg = False
Case "-"
strAdd2 = Mid(strAdd1, 1, i)
blnFlg = False
Case Else
If blnFlg = True Then
strAdd2 = Mid(strAdd1, 1, i)
Else
strAdd2 = Mid(strAdd1, 1, i - 1)
strAdd3 = Right(strAdd1, Len(strAdd1) - Len(strAdd2))
Cells(1 + RowCnt, 2).Value = strAdd2
Cells(1 + RowCnt, 3).Value = strAdd3
Exit For
End If
End Select
Next i
Next RowCnt
End Sub
***ここまでコピー
元データが別の列、行にある場合は補足でお知らせ下さい。
No.3
- 回答日時:
#1です。
先ほどの式は半角スペースが無い(住所1しか無い)場合エラーが出てしまいますので、もし使われることになった場合は
B1を「=IF(ISERROR(FIND(" ",A1))=TRUE,A1,LEFT(A1,FIND(" ",A1)-1))」
C1を「=IF(ISERROR(FIND(" ",A1))=TRUE,"",RIGHT(A1,LEN(A1)-FIND(" ",A1)))」
としてください。
なお今後は#2さんのおっしゃるように分けて書いた方が融通がきくので、変換後、範囲をコピーして「形式を選択して貼り付け」で値のみ貼り付けで文字列にされて、今後は分けて書くというようにされた方が良いかもしれないですね。
しかし1000件は大変ですね。もっと簡単な方法がないかなぁ・・・。もし思いついたら書き込みしますね。
No.2
- 回答日時:
単に住所欄を設定する場合、最低で住所1.住所2のセルが必要で、業務で使用なら最低でも住所3が必要です。
一つのセルにおっしゃるような書き込みをされている場合、件数にもよりますが、手直しでするより方法が無いと思います。
通常は、Ctrl+X,C,Vなどのキーでコピペでします。
住所録は、後々の利用を考えて最初から慎重な設計が求められるものです。
Excel Access Lotus ともに同じです。
有難うございました。
#1の方にも書いたのですが、件数は約1000件ほどです。
ご指摘の通り最初のデータ入力方法が大切だったのですが…。
皆さんのお知恵を拝借すれば何か手がかりが得られるかと思いまして。
次回からは慎重にデータを作っていきたいと思います。
No.1
- 回答日時:
間に何も入っていなくて、分ける前後の文章にも規則性が無いとなると、それを判別させるのは難しいような気がします。
もし分けたい部分を半角スペースで区切るというのであれば、
A1に「**山田町1-1-1 山田アパート**」
B1に「=LEFT(A1,FIND(" ",A1)-1)」
C1に「=RIGHT(A1,LEN(A1)-FIND(" ",A1))」
で対処できますが・・・。
件数が多いと大変かも知れませんが、しばらく回答を待たれて有効な回答が得られなかった場合は、とりあえず一つ一つスペースを入れていかれたらいかがでしょうか。
回答有難うございます。
何人もの方がデータを書き足ししていったもので1000件近くもあります。
教えていただいた通り、しばらく回答を待ってみてだめなときはスペースを入れていきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Excel(エクセル) Excelの1つのセルにそれぞれ文字+数字が入力されていて、 数字のみ抽出して合計したいです。(合計 4 2023/03/16 23:44
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Excel(エクセル) エクセルで 例えばA1のセルに1+1 と入力すると B1のセルに2 と答えが出る関数があったと思いま 8 2022/12/16 20:57
- その他(IT・Webサービス) メニューについて 3 2022/07/12 16:06
- Excel(エクセル) 【Excel】住所に郵便番号を付記する方法 3 2022/05/07 17:15
- 関東 「緑が丘」「緑ヶ丘」という地名は 3 2022/08/06 20:22
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
Excelのオートフィル
-
エクセルで特定の文字が入って...
-
WEEKDAY 空白も7になってしまう
-
桁の違う数値での並び替え
-
ある列のセルに特定の文字が入...
-
セル内文章から、英数字のみ取...
-
Excel 頭に「0」がついている...
-
Excel 指定行までコピーをおこ...
-
Excel2013 カラースケールを別...
-
Excel強制終了
-
エクセルのまとめてカッコをつ...
-
セルを結合する場合に・・・
-
空白への0入力 二次元配列(VBA)
-
Excelで中央揃えが出来ない?
-
エクセルで、数字列の中にハイ...
-
Excelの結合でA列とB列の内容...
-
INDIRECTの列を可変にしたい
-
数値の列から偶数のみを抽出す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
ある列のセルに特定の文字が入...
-
Excelで中央揃えが出来ない?
-
エクセルで特定の文字が入って...
-
セル内文章から、英数字のみ取...
-
Excel 頭に「0」がついている...
-
エクセルのまとめてカッコをつ...
-
桁の違う数値での並び替え
-
エクセルに入力した文字列に句...
-
Excel強制終了
-
Excel 指定行までコピーをおこ...
-
Excelの結合でA列とB列の内容...
-
excelで、1つのセルに入ってい...
-
エクセルで、数字列の中にハイ...
-
連続データを1行おきに貼り付け...
-
エクセルの関数
-
【エクセル】2行に一行のように...
-
WEEKDAY 空白も7になってしまう
-
VLOOKUPのあいまい検索(スペー...
おすすめ情報