【UiPath】全国の市外局番に立ち向かえ！ 電話番号フォーマット完全攻略

## 🔰 はじめに
日本で電話番号を扱う際に、以下の点がネックになります。
- **ハイフンの有無がバラバラ**（`09012345678` / `090-1234-5678` / `090 1234 5678`）
- **市外局番の長さが違う**（`03-1234-5678` / `022-123-4567` / `09969-1-234`）
- **無効な番号が混ざっている**
- **データを統一したいが手作業では大変**
- **ハイフンなしだと、エクセルやCSVで編集して開くと先頭のゼロが消えて面倒**

解決方法はさまざまりますが、プログラミングベースで解決することも多く、難解のため、
改めて電話番号をハイフン入りのフォーマットにするワークフローを考えてみました。

## 📌 この記事で学べること
- **日本の電話番号のルール**
- **市外局番のリストを使ったフォーマット処理**
- **UiPathのアクティビティを使った実装**
---

## 📞 日本の電話番号のルール
日本の固定電話番号は、市外局番の桁数によって異なります。

| 電話の種類 | 市外局番 | 例 | ハイフン付き形式 |
|------------|----------|------------|-----------------|
| 固定電話（東京、大阪） | `03` / `06`（2桁） | `0312345678` | `03-1234-5678` |
| 固定電話（その他大都市） | `022` / `019` など（3桁） | `0221234567` | `022-123-4567` |
| 固定電話（地方都市） | `0493` / `0771` など（4桁） | `0493123456` | `0493-12-3456` |
| 固定電話（特定地域） | `09969` など（5桁） | `099691234` | `09969-1-234` |
| 携帯電話 | `070` / `080` / `090` | `09012345678` | `090-1234-5678` |
| IP電話 | `050` | `05012345678` | `050-1234-5678` |

💡 **市外局番は地域によって異なるため、適切に処理する必要があります！**

---

## 🔧 使用するUiPathアクティビティ
| アクティビティ名 | 説明 |
|----------------|------------------|
| `代入 (Assign)` | 文字列を整形する |
| `条件分岐 (If)` | 市外局番に応じた処理をする |
| `文字列操作 (Substring, Insert)` | ハイフンを挿入 |

---

## 🏗 実装手順（UiPathワークフロー）
### **1️⃣ データの取得**
まず、データテーブルから電話番号を取得します。

```vb
CSV電話番号 = CurrentRow("電話番号").toString
```
 
## 🏗 条件分岐の設定（UiPath）

以下のコードを条件分岐（If）に設定し、携帯番号・固定電話（市外局番5桁・4桁・3桁・2桁） に分類します。
### 実装イメージ
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654526/4ca4033a-bf56-9e37-a928-29070716768d.png)
---
# 各条件の詳細
### 📞 携帯番号の条件
携帯番号（070・080・090）およびIP電話（050）は、11桁 であるため以下の条件を使用します。
```vb
(CSV電話番号.Length = 11) And
(Not CSV電話番号.Contains("-")) And
(CSV電話番号.StartsWith("070") Or
CSV電話番号.StartsWith("080") Or
CSV電話番号.StartsWith("090") Or
CSV電話番号.StartsWith("050") )
```
#### ➡ 変換処理
```vb
CSV電話番号 = CSV電話番号.Substring(0,3) + "-" + CSV電話番号.Substring(3,4) + "-" +  CSV電話番号.Substring(7,4)
```
🔹 例: 09012345678 → 090-1234-5678


### 📞 市外局番5桁の条件
市外局番が5桁 の場合、以下のリストに該当するかチェックします。
```vb
(CSV電話番号.Length = 10) And
(Not CSV電話番号.Contains("-")) And
(
    CSV電話番号.StartsWith("01267") Or '北海道：新篠津村
    CSV電話番号.StartsWith("01372") Or '北海道：江差町
    CSV電話番号.StartsWith("01374") Or '北海道：奥尻町
    CSV電話番号.StartsWith("01377") Or '北海道：乙部町
    CSV電話番号.StartsWith("01392") Or '北海道：鹿部町
    CSV電話番号.StartsWith("01397") Or '北海道：長万部町
    CSV電話番号.StartsWith("01398") Or '北海道：八雲町
    CSV電話番号.StartsWith("01456") Or '北海道：浦河町
    CSV電話番号.StartsWith("01457") Or '北海道：様似町
    CSV電話番号.StartsWith("01466") Or '北海道：えりも町
    CSV電話番号.StartsWith("01547") Or '北海道：羅臼町
    CSV電話番号.StartsWith("01558") Or '北海道：標津町
    CSV電話番号.StartsWith("01564") Or '北海道：弟子屈町
    CSV電話番号.StartsWith("01586") Or '北海道：陸別町
    CSV電話番号.StartsWith("01587") Or '北海道：足寄町
    CSV電話番号.StartsWith("01632") Or '北海道：上富良野町
    CSV電話番号.StartsWith("01634") Or '北海道：美瑛町
    CSV電話番号.StartsWith("01635") Or '北海道：南富良野町
    CSV電話番号.StartsWith("01648") Or '北海道：沼田町
    CSV電話番号.StartsWith("01654") Or '北海道：名寄市
    CSV電話番号.StartsWith("01655") Or '北海道：美深町
    CSV電話番号.StartsWith("01656") Or '北海道：音威子府村
    CSV電話番号.StartsWith("01658") Or '北海道：枝幸町
    CSV電話番号.StartsWith("04992") Or '東京都：伊豆大島町
    CSV電話番号.StartsWith("04994") Or '東京都：新島村
    CSV電話番号.StartsWith("04996") Or '東京都：神津島村
    CSV電話番号.StartsWith("04998") Or '東京都：三宅村
    CSV電話番号.StartsWith("05769") Or '岐阜県：白川村
    CSV電話番号.StartsWith("05979") Or '三重県：紀北町
    CSV電話番号.StartsWith("07468") Or '奈良県：上北山村
    CSV電話番号.StartsWith("08387") Or '山口県：上関町
    CSV電話番号.StartsWith("08388") Or '山口県：田布施町
    CSV電話番号.StartsWith("08396") Or '山口県：阿武町
    CSV電話番号.StartsWith("08477") Or '広島県：大崎上島町
    CSV電話番号.StartsWith("08512") Or '島根県：津和野町
    CSV電話番号.StartsWith("08514") Or '島根県：吉賀町
    CSV電話番号.StartsWith("09496") Or '福岡県：大任町
    CSV電話番号.StartsWith("09802") Or '沖縄県：伊是名村
    CSV電話番号.StartsWith("09912") Or '鹿児島県：大和村
    CSV電話番号.StartsWith("09913") Or '鹿児島県：宇検村
    CSV電話番号.StartsWith("09969")    '鹿児島県：与論町
)
```
#### ➡ 変換処理
```vb
CSV電話番号 = CSV電話番号.Substring(0,5) + "-" + CSV電話番号.Substring(5,1) + "-" +  CSV電話番号.Substring(6,4)
```
🔹 例: 099691234 → 09969-1-2345

### 📞 市外局番4桁の条件
市外局番が4桁 の場合、以下のリストに該当するかチェックします。
```vb
(CSV電話番号.Length = 10) And
(Not CSV電話番号.Contains("-")) And
(
    CSV電話番号.StartsWith("0133") Or '北海道 小樽市
    CSV電話番号.StartsWith("0134") Or '北海道 函館市
    CSV電話番号.StartsWith("0135") Or '北海道 倶知安町
    CSV電話番号.StartsWith("0136") Or '北海道 ニセコ町
    CSV電話番号.StartsWith("0137") Or '北海道 松前町
    CSV電話番号.StartsWith("0138") Or '北海道 函館市周辺
    CSV電話番号.StartsWith("0460") Or '神奈川県 箱根町
    CSV電話番号.StartsWith("0493") Or '埼玉県 東松山市
    CSV電話番号.StartsWith("0533") Or '愛知県 豊川市
    CSV電話番号.StartsWith("0561") Or '愛知県 瀬戸市
    CSV電話番号.StartsWith("0562") Or '愛知県 東海市
    CSV電話番号.StartsWith("0563") Or '愛知県 西尾市
    CSV電話番号.StartsWith("0564") Or '愛知県 岡崎市
    CSV電話番号.StartsWith("0565") Or '愛知県 豊田市
    CSV電話番号.StartsWith("0566") Or '愛知県 刈谷市
    CSV電話番号.StartsWith("0567") Or '愛知県 津島市
    CSV電話番号.StartsWith("0594") Or '三重県 桑名市
    CSV電話番号.StartsWith("0770") Or '福井県 小浜市
    CSV電話番号.StartsWith("0771") Or '京都府 亀岡市
    CSV電話番号.StartsWith("0772") Or '京都府 宮津市
    CSV電話番号.StartsWith("0773") Or '京都府 福知山市
    CSV電話番号.StartsWith("0774") Or '京都府 宇治市
    CSV電話番号.StartsWith("0776") Or '福井県 福井市
    CSV電話番号.StartsWith("0790") Or '兵庫県 たつの市
    CSV電話番号.StartsWith("0796") Or '兵庫県 豊岡市
    CSV電話番号.StartsWith("0820") Or '山口県 柳井市
    CSV電話番号.StartsWith("0836") Or '山口県 宇部市
    CSV電話番号.StartsWith("0848") Or '広島県 三原市
    CSV電話番号.StartsWith("0852") Or '島根県 松江市
    CSV電話番号.StartsWith("0853") Or '島根県 出雲市
    CSV電話番号.StartsWith("0854") Or '島根県 雲南市
    CSV電話番号.StartsWith("0855") Or '島根県 浜田市
    CSV電話番号.StartsWith("0857") Or '鳥取県 鳥取市
    CSV電話番号.StartsWith("0863") Or '岡山県 玉野市
    CSV電話番号.StartsWith("0894") Or '愛媛県 八幡浜市
    CSV電話番号.StartsWith("0993") Or '鹿児島県 指宿市
    CSV電話番号.StartsWith("0995")    '鹿児島県 姶良市
)
```
#### ➡ 変換処理
```vb
CSV電話番号 = CSV電話番号.Substring(0,4) + "-" + CSV電話番号.Substring(4,2) + "-" +  CSV電話番号.Substring(6,4)
```
🔹 例: 0133123456 → 0133-12-3456

### 📞 市外局番3桁の条件
市外局番が3桁 の場合、以下のリストに該当するかチェックします。
```vb
(CSV電話番号.Length = 10) And
(Not CSV電話番号.Contains("-")) And
(
    CSV電話番号.StartsWith("011") Or '札幌
    CSV電話番号.StartsWith("019") Or '盛岡（岩手県）
    CSV電話番号.StartsWith("022") Or '仙台
    CSV電話番号.StartsWith("023") Or '山形
    CSV電話番号.StartsWith("024") Or '福島
    CSV電話番号.StartsWith("025") Or '新潟
    CSV電話番号.StartsWith("026") Or '長野
    CSV電話番号.StartsWith("027") Or '前橋
    CSV電話番号.StartsWith("028") Or '宇都宮
    CSV電話番号.StartsWith("029") Or '水戸
    CSV電話番号.StartsWith("042") Or '多摩地域
    CSV電話番号.StartsWith("043") Or '千葉
    CSV電話番号.StartsWith("044") Or '川崎
    CSV電話番号.StartsWith("045") Or '横浜
    CSV電話番号.StartsWith("046") Or '神奈川西部
    CSV電話番号.StartsWith("047") Or '千葉県北西部
    CSV電話番号.StartsWith("048") Or '埼玉
    CSV電話番号.StartsWith("049") Or '埼玉県西部
    CSV電話番号.StartsWith("052") Or '名古屋
    CSV電話番号.StartsWith("053") Or '浜松
    CSV電話番号.StartsWith("054") Or '静岡
    CSV電話番号.StartsWith("055") Or '山梨・伊豆
    CSV電話番号.StartsWith("056") Or '愛知県西部
    CSV電話番号.StartsWith("057") Or '岐阜県北部
    CSV電話番号.StartsWith("058") Or '岐阜
    CSV電話番号.StartsWith("059") Or '三重
    CSV電話番号.StartsWith("072") Or '堺
    CSV電話番号.StartsWith("073") Or '和歌山
    CSV電話番号.StartsWith("074") Or '奈良
    CSV電話番号.StartsWith("075") Or '京都
    CSV電話番号.StartsWith("076") Or '金沢・富山
    CSV電話番号.StartsWith("077") Or '滋賀・福井
    CSV電話番号.StartsWith("078") Or '神戸
    CSV電話番号.StartsWith("079") Or '兵庫県西部
    CSV電話番号.StartsWith("082") Or '広島
    CSV電話番号.StartsWith("083") Or '山口
    CSV電話番号.StartsWith("084") Or '福山
    CSV電話番号.StartsWith("085") Or '島根・鳥取
    CSV電話番号.StartsWith("086") Or '岡山
    CSV電話番号.StartsWith("087") Or '香川
    CSV電話番号.StartsWith("088") Or '徳島・高知
    CSV電話番号.StartsWith("089") Or '愛媛
    CSV電話番号.StartsWith("092") Or '福岡
    CSV電話番号.StartsWith("093") Or '北九州
    CSV電話番号.StartsWith("094") Or '佐賀・福岡県南部
    CSV電話番号.StartsWith("095") Or '長崎・佐賀
    CSV電話番号.StartsWith("096") Or '熊本
    CSV電話番号.StartsWith("097") Or '大分
    CSV電話番号.StartsWith("098")    '沖縄
)
```
#### ➡ 変換処理
```vb
CSV電話番号 = CSV電話番号.Substring(0,3) + "-" + CSV電話番号.Substring(3,3) + "-" +  CSV電話番号.Substring(6,4)
```
🔹 例: 0221234567 → 022-123-4567

### 📞 市外局番2桁の条件
市外局番が2桁（東京・大阪） の場合、以下のリストに該当するかチェックします。
```vb
(CSV電話番号.Length = 10) And
(Not CSV電話番号.Contains("-")) And
(CSV電話番号.StartsWith("03") Or
 CSV電話番号.StartsWith("06"))
```
#### ➡ 変換処理
```vb
CSV電話番号 = CSV電話番号.Substring(0,2) + "-" + CSV電話番号.Substring(3,4) + "-" +  CSV電話番号.Substring(6,4)
```
🔹 例: 0312345678 → 03-1234-5678

## 💬 感想
上記のコードとロジックをプロジェクトに書いていけば電話番号のフォーマットができるかと思います。
正規表現で簡単に分けることもできますが、市外局番が5桁を前提でわけるのか、4桁を前提にわけるのか・・・などの判定が必要、かつ、昔は市外局番のリストを調査してから実装するなど、手間暇がかかっていましたが、  
今は**生成AIのおかげで、市外局番を調査しながらコードまで書いてくれる**ので、とても楽になりました。
今後もAIを活用しながら、効率的に業務を自動化していきたいです。（この記事の大半も生成AIで土台を作ってます。）
※市外局番には漏れがある可能性もありますのでご容赦ください。←（完全攻略とは）


### 🎯 まとめ
✅ **UiPathで電話番号のフォーマットを自動処理**  
✅ **携帯・固定電話（2桁/3桁/4桁/5桁の市外局番）を適切に分類**  
✅ **条件分岐を活用して、柔軟な処理を実装**  
✅ **エラー処理も組み込むことで、運用に強いワークフローに！**  

📌 **もし追加したい機能や改善点があれば、ぜひコメントください！** 😊