[[20221123111424]] 『住所ハイフン整理について』(もも) ページの最後に飛ぶ

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

 

『住所ハイフン整理について』(もも)

投稿
[[20200318135148]] 『住所ハイフン整理(検索&置換)』(サラリー) 
について...

 過去質で拝見したものを利用してExcel2016でも試してみましたが、Excel2016ではエラーとなりました。

 住所や建物名のハイフンがバラバラな問題は長いこと苦戦しています。

 建物名で「タワー」などの長音(ー)がハイフン(-)となっていたり、これが何万件とあると統一するにも時間がかかります。

 Excel2016でも使用できる計算式があると作業の時間短縮になるのですが、自分では計算式が上手くできずに困っています。どなたか教えていただけると助かります。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


こんにちは

[[20200318135148]] 『住所ハイフン整理(検索&置換)』(サラリー) 

 ↑上記の(2u) 2020/03/19(木) 20:02 さんが提案された
 関数でされたって事ですか?

 「SEQUENCE」は、Office 2021か、Microsoft 365で
 利用可能な新関数でなかったですかね?

 (もも)さんは、関数でされたいのですか?
 もしくは、VBAでの提案でも可なのでしょうか?

(あみな) 2022/11/23(水) 11:49:06


(あみな様)
 ご返答ありがとうございます。
 はい。2u様の関数で試してみましたがエラーとなりました。

 新関数だったのですね!
 であれば、当然私の環境では出てこないですよね(*´ `*)

 VBAでのご提案をいただけるのであれば、喜んでお聞きしたいです!

 関数よりも処理速度が早いと思うので!非常に助かります!
(もも) 2022/11/23(水) 17:09:49

 こんばんは

 質問しといて...なんですが、私は大量の文字の
 置換操作をした事がありません^^;

 まあ、やればなんとか出来る気がするだけでして...
 きっとここの大先輩に、得意な方がいると思うので
 提案をお待ちください。

(あみな) 2022/11/23(水) 19:12:26


(あみな)様

 お返事ありがとうございます(*´ `*)

 そうだったのですね!

 それでもコメントいただきありがとうございました。

 これまで困っても、アナログ的に色んな事をクリアさせてきましたが、
 この部分はどうにかしたい!と初めて質問させていただきました。

 大先輩のコメント待ってみます(*´ `*)ありがとうございました。
(もも) 2022/11/23(水) 19:21:05

 改めてルールといくつかの具体例を書いてもらえますか?
 前のスレッドを見なくても回答できるようにして欲しいです。

 基本的には前の物を使っていただいて結構ですが、あなたの責任で書いて欲しいです。
 つまり、質問があったら、あなたに回答してもらいたいのです。

 ・丸付き数字は文字化けしますので、使わないで下さい。
 ・また、引用スレッドの終わりにある質問二つにも、
   どうしたいのか明記してください。

 単なる書き換えではないように思いますので、お手数ですが対応お願いします。
  
(γ) 2022/11/23(水) 20:35:01

 コメントありがとうございます。
 今はスマホからのコメント返信となるため
 明日、実際の原稿を見ながらいくつかの例文を掲載させていただきます。
 よろしくお願いいたします。
(もも) 2022/11/23(水) 21:10:44

 とりあえずのたたき台として。

 仕様としては、
 "ー", "−", "−", "‐", "―", "-" の前の文字が半角数字なら"-"(半角ハイフン)に、
 そうでないなら"ー"(長音)に変換

 データは何万件ということなので配列に格納してから変換して、それをセルに代入という方法で高速化してます。

 アクティブシートのA列に対象データがあるとします。

 Public Sub sample()
    Dim rng As Range
    Set rng = Cells(1, 1).CurrentRegion.Columns(1)

    Dim ary() As Variant
    ary = rng.Value

    Dim i As Long
    For i = 1 To UBound(ary)
        ary(i, 1) = HyphenReplace(ary(i, 1))
    Next

    rng.Offset(, 1).Value = ary
 End Sub

 Public Function HyphenReplace(s) As String
    Dim i As Long
    For i = 2 To Len(s)
        Select Case Mid(s, i, 1)
        Case "ー", "−", "−", "‐", "―", "-"
            If Mid(s, i - 1, 1) Like "[0-9]" Then
                Mid(s, i, 1) = "-"
            Else
                Mid(s, i, 1) = "ー"
            End If
        End Select
    Next
    HyphenReplace = s
 End Function

 もし、例文で試してみて、ご希望と異なる部分があったら、HyphenReplace内のIf文の条件を変更するなどして対応することになるでしょう。
(hatena) 2022/11/23(水) 22:15:08

hatena様

 ありがとうございます!
 明日、早速試してみたいと思います。

  "ー", "−", "−", "‐", "―", "-" の前の文字が半角数字なら"-"(半角ハイフン)に、
  そうでないなら"ー"(長音)に変換

 おそらくこの考え方で処理をしただけでも
 これまでのアナログ的な作業よりも
 ある程度の希望に近づくと思います。

  気になるとすれば、
  ○○アパートA―203
  この場合ですと、A-203とはならない感じでしょうか?

 何万件ものハイフンが混在するデータなので、
 改めて現在どんな状況のものがあるか、どう自動化させたいかを
 まとめてみたいと思います。

 たたき台との事でしたが、とても有難いです!
(もも) 2022/11/23(水) 23:15:27

 > ○○アパートA―203
 > この場合ですと、A-203とはならない感じでしょうか?

 前の文字が半角数字なら"-"に変換という仕様のなのでなりませんね。

 どのようなルールにしたいのか分析できれば、それをコードに反映させればいいのです。
 まず、どのようなルールにすればいいのか、ご自身で分析てしみてください。

 例えば、前の文字が半角数字または半角アルファベットなら変換というようなルールとか。

(hatena) 2022/11/24(木) 08:40:25


(γ)様

おはようございます。

例文をつくってみました。
以下の変換前のものを変換後のようにしたいです。

(A)
変換前 ○○県○○市○○○○○12‐34 ○○ハイツ101号

変換後 ○○県○○市○○○○○12-34 ○○ハイツ101号

(B)
変換前 ○○県○○市○○○○○1―2 ○○住宅204

変換後 ○○県○○市○○○○○1-2 ○○住宅204

(C)
変換前 ○○県○○市○○○○○123-4 ○○アパ-ト5号

変換後 ○○県○○市○○○○○123-4 ○○アパート5号

(D)
変換前 ○○県○○市○○○○○1丁目2 ○○アパ-ト34-101

変換後 ○○県○○市○○○○○1丁目2 ○○アパート34-101

(E)
変換前 ○○県○○市○○○○○1丁目2―3―101号 ○○コ-ポ1

変換後 ○○県○○市○○○○○1丁目2-3-101号 ○○コーポ1

(F)
変換前 ○○県○○市○○○○○1丁目2ー3 ○○アパ-ト1号

変換後 ○○県○○市○○○○○1丁目2-3 ○○アパート1号

(G)
変換前 ○○県○○市○○○○○1丁目2ー2○○アパート?T 101

変換後 ○○県○○市○○○○○1丁目2-2○○アパート?T 101

(H)
変換前 ○○県○○市○○○○○123-4 市営住宅567―89

変換後 ○○県○○市○○○○○123-4 市営住宅567-89

(I)
変換前 ○○県○○市○○○○○123-4 市営住宅ー89

変換後 ○○県○○市○○○○○123-4 市営住宅-89

(J)
変換前 ○○県○○市○○○○○277-2AIUEO APART102

変換後 ○○県○○市○○○○○277-2AIUEO APART102

(K)
変換前 ○○県○○市○○○○○1丁目2ー3 ○○住宅Aー101

変換後 ○○県○○市○○○○○1丁目2ー3 ○○住宅A-101

(L)
変換前 ○○県○○市○○○○○12-3 コーポ○○Aー2

変換後 ○○県○○市○○○○○12-3 コーポ○○A-2

引用スレッドの終わりにある質問二つですが
1)○○○○B-3号棟 → このままでOK
2)フォレストタワー101号室 → フォレストタワー101号室
となるのが希望です。
ただし、2)に関しては全角に変換した時点でクリアできているので
問題ありません。

よろしくお願いします。

(もも) 2022/11/24(木) 08:56:47


(hatena)様
おはようございます。
早速、VBAをやってみました!
前の文字が半角数字のときのハイフン処理は完璧でした。

ルールとしては、
前の文字が半角数字または半角アルファベットまたは日本語ならハイフン「-」に変換
それ以外は長音「ー」
となりたいです。

(hatena)様から教えていただいたVBAを試してみたところ

(A)結果○
○○県○○市○○○○○12‐34 ○○ハイツ101号 → ○○県○○市○○○○○12-34 ○○ハイツ101号

(B)結果○
○○県○○市○○○○○1―2 ○○住宅204 → ○○県○○市○○○○○1-2 ○○住宅204

(C)結果○
○○県○○市○○○○○123-4 ○○アパ-ト5号 → ○○県○○市○○○○○123-4 ○○アパート5号

(D)結果○
○○県○○市○○○○○1丁目2 ○○アパ-ト34-101 → ○○県○○市○○○○○1丁目2 ○○アパート34-101

(E)結果○
○○県○○市○○○○○1丁目2―3―101号 ○○コ-ポ1 → ○○県○○市○○○○○1丁目2-3-101号 ○○コーポ1

(F)結果○
○○県○○市○○○○○1丁目2ー3 ○○アパ-ト1号 → ○○県○○市○○○○○1丁目2-3 ○○アパート1号

(G)結果○
○○県○○市○○○○○1丁目2ー2○○アパート?T 101 → ○○県○○市○○○○○1丁目2-2○○アパート?T 101

(H)結果○
○○県○○市○○○○○123-4 市営住宅567―89 → ○○県○○市○○○○○123-4 市営住宅567-89

(I)結果✕
○○県○○市○○○○○123-4 市営住宅ー89 → ○○県○○市○○○○○123-4 市営住宅ー89

(J)結果○…初めからOKの例文なのですが試してみました。
○○県○○市○○○○○277-2AIUEO APART102 → ○○県○○市○○○○○277-2AIUEO APART102

(K)結果✕
○○県○○市○○○○○1丁目2ー3 ○○住宅Aー101 → ○○県○○市○○○○○1丁目2-3 ○○住宅Aー101

(L)結果✕
○○県○○市○○○○○12-3 コーポ○○Aー2 → ○○県○○市○○○○○12-3 コーポ○○Aー2

となりました。

お忙しいところご対応いただきありがとうございます。
はじめからルールの説明ができれば良かったのですが、
不慣れでご迷惑おかけいたします。
(I)(K)(L)のハイフンが「-」に変換できると
とても助かります!

よろしくお願いいたします。

(もも) 2022/11/24(木) 09:27:53


 条件確認の質問です

 県市町名 の後に半角スペースが入り マンション名 が来てますが
 Gパターンだけ、ひっついてますが…それは間違いですか?

 つまり、マンション名がない場合は、住所に半角スペースはない
 と考えればよいですか?

 番地 及びマンション名等の数値は、最初から半角数値になってますが
 全角の数値は無いのですか?

(あみな) 2022/11/24(木) 10:01:34


(あみな)様
コメントありがとうございます。

Gパターンのように、住所番地のあとにスペースがなく建物名がくるものも
沢山あります。

住所と建物名でセルを分けるのも、
全てにスペースがあれば簡単に分けられるのですが逆に言えば
住所と建物名がくっついているもののほうが多いためセルを分ける作業も
多少苦労しています。

しかし、分ける方法は少々アナログではありますが
計算式等を利用してある程度のところまでは分けることができるので
今回は「ハイフン」の処理のみの質問をさせていただきました。

マンション名がない場合に半角スペースはないかと言われますと
それもあったりなかったりのパターンが存在しています。

数値は一括で半角数値に変換してしまうため、全角の数値はない状態で
スタートさせていきます。

よろしくお願いします。
(もも) 2022/11/24(木) 10:24:18


 > ルールとしては、
 > 前の文字が半角数字または半角アルファベットまたは日本語ならハイフン「-」に変換
 > それ以外は長音「ー」

 ルールとしては不完全ですね。
 「アパート」→「アパ-ト」になってしまいますが、これはご希望とは違いますよね。

 > ((I)結果✕
 > ○○県○○市○○○○○123-4 市営住宅ー89 → ○○県○○市○○○○○123-4 市営住宅ー89

 この長音をハイフンに変換するルールとしては、次の文字が半角数字なら変換というルールにすればいいかな。
 ただ、建物名の最後が長音の場合もありえますから、判断は難しいですね。
 とりあえず、下記でどうでしょう。

     For i = 2 To Len(s) - 1
        Select Case Mid(s, i, 1)
        Case "ー", "−", "−", "‐", "―", "-"
            If Mid(s, i - 1, 1) Like "[0-9A-Za-z]" Or Mid(s, i + 1, 1) Like "[0-9]" Then
                Mid(s, i, 1) = "-"
            Else
                Mid(s, i, 1) = "ー"
            End If
        End Select
    Next

(hatena) 2022/11/24(木) 10:54:22


 上記コードで 市営住宅ー89 は変換されますが、 
 フォレストタワー101号室 も変換されてしまいます。
 後者は変換されてはこまりますよね。

 さて、上記の2つを区別するルールはどうしたらいいでしょう?
 考えてください。

(hatena) 2022/11/24(木) 10:59:43


 単純に、前の文字がカタカナ・ひらがななら、長音に変換、
 それ以外は、ハイフンに変換でよさそうな気がしてきました。

 長音は、カタカナ・ひらがなにしかつかないはずですので。

 なんか例外があるかな?
(hatena) 2022/11/24(木) 11:14:01

 If文の部分を下記でどうでしょう。

            If Mid(s, i - 1, 1) Like "[ぁ-ヶ]" Then
                Mid(s, i, 1) = "ー"
            Else
                Mid(s, i, 1) = "-"
            End If

(hatena) 2022/11/24(木) 11:31:46


 小樽市オタモイ一丁目
               ↑
           漢数字の"一"を入力ミスしていた場合とか・・・
(´・ω・`) 2022/11/24(木) 11:34:10

(hatena) 様

 色々と考えて下さり、感謝しかないです(;;)!

 (´・ω・`) 様のような例外はあるものの、
 どの道、最後は確認作業をしますので、
 ここまで変換されていれば修正は少なくて済むと思います。

 かなり時短にはなると思います。

 すぐに試すことは環境上できないのですが、
 本日の就業終わりに試してみたいと思います。

 ありがとうございます!またコメントします。
(もも) 2022/11/24(木) 12:34:16

(hatena) 様

 単純に、前の文字がカタカナ・ひらがななら、長音に変換、
 それ以外は、ハイフンに変換

↑確かにそうかも!と思い、一段落したところで試してみました!

 こちらの希望する動作が

            If Mid(s, i - 1, 1) Like "[ぁ-ヶ]" Then
                Mid(s, i, 1) = "ー"
            Else
                Mid(s, i, 1) = "-"
            End If

 に変更したら出来ました(TT)なんと素晴らしい。。。

 一緒に仕事している後輩も驚き喜んでいました。
 本当にありがとうございます!

 いろんな方がいろんな入力方法で、いろんな住所が存在しているので
 一発で完璧になるとは思っていませんでしたが、
 ハイフンが整理されていることで、
 次の段階の住所を1と2に分けるのがだいぶ楽になります。

 計算式で分けるときにネックになるのが長音やダッシュでしたので。

 とはいえ、計算式だと何十万件もの処理は時間がかかります(笑)

 それは追々、効率化のためにまた挑戦していきたいと思います。

 本当にありがとうございました。
(もも) 2022/11/24(木) 17:04:31

コメント返信:

[ 一覧(最新更新順) ]


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