• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「-」を入れるExcelマクロ)

Excelマクロで電話番号を整形する方法

このQ&Aのポイント
  • Excelで電話番号の表があります。テキストで、電話番号が入力されています。 「xxx-xxxx-xxxx」と「xxxxxxxxxxx」が混在しているので、「xxx-xxxx-xxxx」に揃えたい。
  • 「xxx-xxxx-xxxx」は、全て正しい位置に、「-」が入っているので、修正する必要はありません。 「xxxxxxxxxxx」は、普通の電話の10ケタと、携帯の11ケタが混在しています。 052であれば、052-xxx-xxxx 0561であれば、0561-xx-xxxx に修正したい。しかし、市外局番は数個しかないため、条件分岐を作成する必要があります。
  • 関数で作成したマクロが複雑になってしまい、訳が分からなくなってしまっています。マクロであれば、よりスマートに処理することができるかもしれません。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1746/2622)
回答No.9

> .Offset(0, 1).Value = Left(c.Value, 3) & "-" & Mid(c.Value, 4, 3) & "-" & Right(c.Value, 4) > の記述がスキップされて処理されてしまっているように、自分には思えます。 まったくその通りでした。先のものを急いで修正して前のテストデータを消さず実行したために052yyyxxxxの部分だけ前のものが残ったままで書き込みされていないのに気が付きませんでした。以下のように修正してください。もともとですが、052以外でも4桁以外の市外局番であれば3桁として「-」が入ります。 Sub Test() Dim c As Range Dim k As Variant, i As Long Dim mFlg As Boolean k = Array("0561", "0562", "0563") For Each c In Range("A1:A10") If InStr(c.Value, "-") = 0 Then If Len(c.Value) = 11 Then c.Offset(0, 1).Value = Left(c.Value, 3) & "-" & Mid(c.Value, 4, 4) & "-" & Right(c.Value, 4) ElseIf Len(c.Value) = 10 Then mFlg = False For i = LBound(k) To UBound(k) If Left(c.Value, 4) = k(i) Then c.Offset(0, 1).Value = Left(c.Value, 4) & "-" & Mid(c.Value, 5, 2) & "-" & Right(c.Value, 4) mFlg = True End If Next If mFlg = False Then c.Offset(0, 1).Value = Left(c.Value, 3) & "-" & Mid(c.Value, 4, 3) & "-" & Right(c.Value, 4) End If End If Else c.Offset(0, 1).Value = c.Value End If Next End Sub

M_R_S
質問者

お礼

本当にありがとうございます。 No8様からご指摘いただいているような、055と0553のような問題は、私はなく、 0561や、ほか数個の市外局番だけの良いため、 kkkkkm様のマクロは、私のニーズを、完全に満たします。 これで、今まで、時間を掛けて手修正していたタスクが一瞬で終了するようになりました。

すると、全ての回答が全文表示されます。

その他の回答 (13)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>表があります エクセルのシートの表か? それも書いてないのは、質問の落第。 VBAをマクロという、たぐいの人は、エクセルVBAの初心者だろう。 マクロ(VBA)(ほかの言語経験でもあればよいが)ない人が、この課題を(質問コーナーの回答ぐらいで)やるのは無理だ。 (1)電話番号の区切りの仕組 (2)データベース言語の利用経験 (3)エクセルVBAや他言語でできる、処理ロジックを思いつけるかどうか (4)まず処理ロジック(手順)を文章でまとめられるか などのスキルが要ると思う。 ーーーー 市外ー市内ー電話番号で電話番号は、右(最後桁)から4桁は固定のようだ。 ここにーを入れるのは簡単。しかし ーー 市外局番は、全国で390ぐらいあるようだ(総務省の電話番号データで)が、2-5桁あり、プログラムでの該当検索がむつかしい。その表は桁数の少ないもの順になっている。 しかし処理は最大桁のものから探すか(最長一致)、何か工夫が要る。 市外+市内局番桁数を考えるといいルールが割り出せるかもしれないが。(小生知識不足) ーー また人間の書いたデータを収録したものは、ルールがないとか、ばらばらや、間違えていることがほとんど。こういう場合はコンピュターだけで100%完全化は無理です。 ーー データ数が100-200行以下なら、人間(社会経験を得た大人)の総合判断力で、1つ1つ当たって、正しいように正して、修正入力し直すほかないだろう。 例、プログラムで結果を出しても、人間のチェックは不可欠であろう。 今さらVBAなどの言語を勉強したりしても、人生これだけでないし、今後役に立つかどうか、人によるので、無駄だろう

M_R_S
質問者

お礼

楽しいコメント、ありがとうございます。 imogai様の、人となりが、よく判るコメントで、思わず、他に、どのようなコメントをしている方だろうかと他の回答を見てしまいました。 >エクセルのシートの表か? 「Excelで電話番号の表があります」と最初に明記するともに、質問のタイトルにも、Excelと明記してあります。 >市外局番は、全国で390ぐらいあるようだ そうですよね、該当検索などしだしたら、難しいですよね~。しかし、私の場合、市外局番の個数について制限されている旨、最初の質問に書いています。 今回、No4様、No5様のアドバイスにより、imogai様が無理だと言っていることが実現でき、私の今後の人生で役に立ちそうな知識を得ることが出来たので、私は本当に嬉しく思っています。

すると、全ての回答が全文表示されます。
  • chachaboxx
  • ベストアンサー率23% (412/1777)
回答No.2

左3文字が052なら052-と入替え 左8文字目から5文字を、右から4文字の先頭に"-"を加えた文字に置換する というif文を必要分ネストする 使う関数は IF,LEFT,REPLACE,RIGHTと文字連結の&です。 関数を複数行に分ければ解りやすいと思います。

M_R_S
質問者

お礼

回答ありがとうございます。 はい、マクロであれば、仰せの通りだと思います。 自分も、まず、そういった関数を組みました。 「-」が入ったり、入っていなかったりするので、そこに手間暇を掛けないようにしたいです。

すると、全ての回答が全文表示されます。
  • aokii
  • ベストアンサー率23% (5210/22063)
回答No.1

電話番号のハイフンの位置は番号によって異なるため、全自動では難しいため、ご指摘の通り、052の場合、0561の場合と言ったように、数個分の分岐を作るのが簡単でいいです。

M_R_S
質問者

お礼

回答ありがとうございます。 そうです、私の書いた通り、複数個の分岐が必要ですね。

すると、全ての回答が全文表示されます。

関連するQ&A