プロが教えるわが家の防犯対策術!

住所編集のマクロを組んでいます。ハイフンをいれたいです。
データ住所にはハイフンが入っておらずかわりに半角スペースが入っています。
本来ハイフンがないであろう場所にも半角スペース入っている場合も有り。

データ例※●○◎は文字です。数字は伏せていません。

●●●市●●区●●● 3丁目 8 9 ●●マンション
○○市 ○○○区○○5丁目15 20
◎◎◎市 ◎◎◎◎ 6丁目 45 ◎◎◎◎マンション

スペースをハイフンにする置換をマクロで記録しました。

●●●市●●区●●●-3丁目-8-9-●●マンション
○○市-○○○区○○5丁目15-20
◎◎◎市-◎◎◎◎-6丁目-45-◎◎◎◎マンション

当然ですが、文字列と文字列の間や
数字と文字列の間にもハイフンが入ってしまいます。
そこで皆様よりお力添えをお願いしたいのですが、
数字と数字の間のみハイフンをいれることは可能でしょうか?
住所件数は不定期です。

上記例はA列に3行
1行目は項目なので合計で4行あると過程します。

勝手申し上げますが納期が迫っておりお返事急いでおります。
どなたかお力をお貸しください!
よろしくお願いします。

A 回答 (4件)

マクロというのは、手作業を記録して実行するということでしょうか?



VBAでスクリプトを書いてもいいのでしょうか?

簡単に処理の流れとしては、

ハイフンに置き換えた後に、

各セルの住所で

ハイフンの前後の文字について

前が数字でないとき、
そのハイフンを半角スペースに

後が数字でないときで、最後の文字でないとき
そのハイフンを半角スペースに

と変えればできると思いますよ。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
返事が遅れてすみません。
私が初心者なばかりに理屈を理解してもどうしたらいいのかよくわかりませんでした。
でも処理の流れがつかめました。
次に質問するまでには解説を頂けたらVBAが組めるくらいまで成長します。
この度はご回答頂き本当にありがとうございます!

お礼日時:2013/03/28 21:14

データ住所が一列なんですね?


半角スペースを「区切り記号」として、データを区切って
並べ替えして目で見ながらから編集したほうが結果が早く確実な気がします。

・複数列への分解
・データの並べ替え
・連結記号(半角スペースor-)の判断
・再連結
が必要ですが。

注意点は
・データ型を文字列にしておくこと(日付と解釈されちゃう、半角数字に変換される)
・行を元に戻すために連番付与しておくこと
    • good
    • 0
この回答へのお礼

並び変えの方法を本当に丁寧に教えて下さって感動しております。
今回マクロをくめという指令があったので、
使うことができなかったのですが大変勉強になりました。
本当にありがとうございます。
今度使うことがあればぜひ使わせていただきます。
ありがとうございました!!

お礼日時:2013/03/28 21:12

こんにちは。

お邪魔します。

Excel VBA ?の話でしたらば、ベタな方法ですが

Sub testJ()
' ' 参照設定:Microsoft VBScript Regular Exprssions 5.5 ←注目※
  Dim oRegExp As RegExp
  Dim r As Range
  Dim s As String
  Set oRegExp = New RegExp
  With oRegExp
    .Global = True
    .Pattern = "([\d0-9])[\s ]+([\d0-9])"
    For Each r In Range("A2:A4")
      s = r.Value
      s = .Replace(s, "$1-$2")
      r.Value = s
    Next
  End With
  Set oRegExp = Nothing
End Sub


マクロを仕上げたいのではなく、住所編集作業を早く終わらせたい場合で、
住所を含んだ範囲を一カ所に纏めることが可能なら
ExcelからWordにコピペして以下の手順で一発置換。

Excelではなく、Word VBAでしたらば、
[マクロの記録]で以下の手順を実行すれば不足ないものは出来ます。

1)Ctrl*Aで全文選択
2)[置換]ダイアログを表示
3)[オプション]を表示
4)[検索オプション]の「ワイルドカードを使用する」にチェック
5)[検索する文字列]に
([0-90-9])[  ]@([0-90-9])
6)[置換後の文字列]に
\1-\2
7)[すべて置換]を押す

お急ぎということなので、とりあえず以上です。
解らないことは後からでも確認するようにしてくださいね。
    • good
    • 0

#3です。


すみません、提示したコード、ミスってましたので直しました。
それと、混乱するといけないので参照設定しないで済む書き方に替えました。

Sub Re8013103j()
' ' 正規表現を使って
' ' 「数字」「スペース」「数字」を
' ' 「数字」「-ハイフン」「数字」に置換
' ' 該当するセルだけを置換(改)
' ' 「○○2 3 4」のような場合は2度置換(改)
  Dim oRegExp As Object
  Dim r As Range
  Dim s As String
  Set oRegExp = CreateObject("VBScript.RegExp")
  With oRegExp
    .Global = True
    .Pattern = "([\d0-9])[\s ]+([\d0-9])"
    For Each r In Range("A2:A6") ' セル範囲は適宜指定
      s = r.Value
      If .test(s) Then
        s = .Replace(s, "$1-$2")
        If .test(s) Then
          s = .Replace(s, "$1-$2")
        End If
        r.Value = s
      End If
    Next
  End With
  Set oRegExp = Nothing
End Sub


Wordの方も一発置換ではなかったですね。
7)[すべて置換]を2度押す
でした。失礼しました。
    • good
    • 0
この回答へのお礼

わかりやすい解説しかも混乱しないようにお気づかいまで頂きありがとうございます!!
とっても役に立ち無事マクロがすべて完成しました。
本当に早速の回答ありがとうございます。

お礼日時:2013/03/28 21:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!