• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのデーターを複数の規則にしたがって-で区切りたい。)

エクセルのデータを規則にしたがって区切りたい方法

このQ&Aのポイント
  • エクセルのデータを複数の規則に従って区切りたい場合、ソートやREPLACE文を使って5種類の計算式を作成する方法がありますが、1種類の計算式で変換させることが希望です。
  • 名簿などのデータを電話番号のようにハイフンで区切りたい場合、5種類のパターンがあります。
  • A列に5,000件のデータがあり、ソートして5種類で並び替えをして5分割することができます。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

文字が半角でも全角でもかまいません。B1セルに次の式を入力して下方にオートフィルドラッグしてみてください。 =IF(A1="","",IF(ISERROR(FIND("-",ASC(A1))),IF(LEFT(ASC(A1),1)<>"7",MID(A1,1,3)&"-"&MID(A1,4,5)&"-"&MID(A1,9,2)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2),IF(LEFT(ASC(A1),2)="7A",MID(A1,1,3)&"-"&MID(A1,4,11),IF(LEFT(ASC(A1),1)="7",MID(A1,1,5)&"-"&MID(A1,6,5)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2),""))),IF(FIND("-",ASC(A1))=6,A1,MID(A1,1,3)&"-"&MID(A1,4,11))))

gx9wx
質問者

お礼

B1以外でも、F1でもG1でも完璧に変換できました。 なおA1がA2とかA3から開始の場合、 この式を全部選択してメモ帳に貼り付けて、 置き換えで「A1」→「A2」とか「A3」にすべて置き換え後に全文コピーして 対象セルに貼り付けるとA列の開始行がどこでも完璧変換対応できました。  ※他に回答していただいた式でも変換はできましたが上記のような開始行がずれた場合で   式内の文字を置き換えをした場合、おかしくなりました。   (A1の文字以外も変更が必要なのかな?と思いました。私の操作ミスかも。) それにB列以外でも使えてフレキシブルでした。 ありがとうございました。

gx9wx
質問者

補足

私の説明が不足でした。 パターン(2)と(3)で パターン(2)は5-5とだけ説明でしたが頭が7と7Aがきた場合パターン(4)(5)と 条件が一部一致してしまいました。 パターン(3)は8-5で説明しましたが同じく頭に7と7Aが来た場合パターン(4)(5)の条件と 一部が一致してしまいました。申し訳ありません。 ですが教えていただいた式で全部完璧に変換できました。 全部で10,000行あり、パターン(1)~パタン(5) 「(2)は3種、(3)も3種」が混在していますが全部完璧に変換できました。 ありがとうございました。 (1)   12S1234R123456    → 12S-1234R-12-34-56 → ○ (2)   G1234-56789 → G1234-56789 → ○ (2)-2   7W123-45678 → 7W123-45678 → ○ (2)-3   7A123-45678  → 7A123-45678     → ○ (3)-2   71234567-12345 → 712-34567-12345 → ○ (3)-3   7A123456-12345 → 7A1-23456-12345 → ○ (3)   12345678-12345 → 123-45678-12345 → ○ (4)   7123456Q123456 → 71234-56Q12-34-56 → ○ (5)   7A123456ABC123 → 7A1-23456ABC123 → ○

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

その他の回答 (6)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

文字列が半角で入力されているなら、あなたが使用された数式を以下のようにIF関数で条件分岐すればご希望の表示に変更できます。 =IF(LEN(A1)=12,A1,IF(LEFT(A1,2)="7A",REPLACE(A1,4,0,"-"),IF(LEFT(A1,1)="7",REPLACE(REPLACE(REPLACE(A1,6,0,"-"),12,0,"-"),15,0,"-"),IF(ISNUMBER(FIND("-",A1)),REPLACE(A1,4,0,"-"),REPLACE(REPLACE(REPLACE(REPLACE(A1,4,0,"-"),10,0,"-"),13,0,"-"),16,0,"-")))))

gx9wx
質問者

お礼

すいません。たぶん私が悪いのですが 2.○○○○○-○○○○○ → ○○○○○-○○○○○ だけおかしく変換されてしまいます。 ありがとうございました。

gx9wx
質問者

補足

実際にやって見ました。私の説明不測です。 すいません。 (1) 12S1234R123456 → 12S-1234R-12-34-56 → ○ (2) G1234-56789  → G12-34-56789   → × (2) 7W123-45678  → 7W123--4567-8 -  → × (2) 7A123-45678 →  7A1-23-45678  → × (3) 71234567-12345 →  71234-567-1-23-45  → × (3) 7A123456-12345 →  7A1-23456-12345  → ○ (3) 12345678-12345 →  123-45678-12345  → ○ (4) 7123456Q123456 →  71234-56Q12-34-56  → ○ (5) 7A123456ABC123 →  7A1-23456ABC123  → ○

すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

ANo2 merlionXXです。 > 申し訳ありません。すべて半角の英数字です。 回答に書いたとおり、全角でも半角でもOKにしたと思いますが、試してみましたか? もし、働かないなら他の理由があるはずなのでお聞かせいただきたかったのですが。 回答の式を半角のみ対応にするならASC関数を除くだけです。

gx9wx
質問者

お礼

すいません。 全角か半角か不明とのメッセージでしたので 補足をしました。 最初に教えていただいた式で完璧に変換できました。 ありがとうございました。

gx9wx
質問者

補足

私の説明が不足でした。 パターン(2)と(3)で正しく変換できない時がありました。 パターン(2)は5-5とだけ説明でしたが頭が7と7Aがきた場合パターン(4)(5)と 条件が一部一致してしまいましたので変換が正しく行われません。 パターン(3)は8-5で説明しましたが同じく頭に7が来た場合パターン(4)の条件と 一部が一致してしまい正しく変換ができませんでした。 申し訳ありません。 (1) 12S1234R123456 →   12S-1234R-12-34-56 → ○ (2) G1234-56789   →   G1234-56789 → ○ (2) 7W123-45678   →   7W123--4567-8 -   → × (2) 7A123-45678   →   7A1-7A123-45678   → × (3) 71234567-12345 →   71234-567-1-23-45   → × (3) 7A123456-12345 →   7A1-23456-12345   → ○ (3) 12345678-12345 →   123-45678-12345   → ○ (4) 7123456Q123456 →   71234-56Q12-34-56   → ○ (5) 7A123456ABC123 →   7A1-23456ABC123   → ○

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

関数式では5つの場合をIF関数などで判別し、また文字の切り出しの関数式を2から5個並べなければならず、書く気がしない。 VBAで場合分けしたいが、質問者は経験無いのかな。 >ですが1種類の計算式でこの5種類を変換させるのが希望です。 >IF 文などを使ってもうまくできません IF関数のネストをすればできるはず。既に回答が出ている。ただ質問者の希望が、不可能でないが、常識的には、5000行のデータに対して式が長すぎて無理ではないかと言うこと。 自分が独力で出来ないときは、ソートして5種類で並びかえをして5分割してでも、そのそれぞれにでも式を分けて入れる、のが世の当たり前で、なんでも思ったことが出来るはずだというのはおかしいし、人にいつも回答を頼れないはず。(本件は1回限りの作業ではないのか。) ユーザー関数を作れば少しは式が簡単になりそう。 ユーザー関数の例 Function hiph(a) p = InStr(a, "-") s2 = Mid(a, 1, 2) s1 = Mid(a, 1, 1) Select Case s2 Case "7A" hiph = "7A" & Mid(a, 3, 1) & "-" & Mid(a, 4, 3) Case Else Select Case s1 Case "7" hiph = "7" & Mid(a, 2, 4) & "-" & Mid(a, 6, 5) & "-" & Mid(a, 9, 2) & "-" & Mid(a, 11, 2) Case Else Select Case p Case 0 hiph = Mid(a, 1, 3) & "-" & Mid(a, 4, 5) & "-" & Mid(a, 9, 2) & "-" & Mid(a, 11, 2) & "-" & Mid(a, 13, 1) Case 6 hiph = a Case 9 hiph = Left(a, 3) & "-" & Mid(a, 4, Len(a) - 3) End Select End Select End Select End Function 使い方は A1に質問の例があるとして G1とかに=hiph(A1) と入れて下方向に式を複写。 結果 ○○○-○○○○○-○○-○○-○ ○○○○○-○○○○○ ○○○-○○○○○-○○○○○ 7○○○○-○○○○○-○○-○○ 7A○-○○○ ただし文字は全角半角か、-の全角半角か、7A○-○○○...の...は何かなど質問では、あいまいで、上記コードを修正が必要だろう。

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

>A列でソートして5種類で並びかえをして5分割し、REPLACE文を5種類作成したらできました。 提示していただければ、半角全角の判断が付き、正確な回答をしやすくなります =IF(LEN(A1)=11,A1, IF(OR(LEFT(A1,2)="7A",MID(A1,9,1)="-"),REPLACE(A1,4,,"-"), IF(LEFT(A1,1)="7",REPLACE(LEFT(A1,10),6,,"-"), REPLACE(REPLACE(LEFT(A1,10),4,,"-"),10,,"-")) &"-"&REPLACE(RIGHT(A1,4),3,,"-"))) 1. 文字数による判断 2. 「7A~」と9文字目の「-」の場合 3. 「7~」の場合(2.の場合を含んでいない) 左10文字の処理 4. 「7~」ではない場合の左10文字の処理 5. 3.4.における右4文字の処理

gx9wx
質問者

お礼

すいません。たぶん私が悪いのですが 2.○○○○○-○○○○○ → ○○○○○-○○○○○ だけおかしく変換されてしまいます。 ありがとうございました。

gx9wx
質問者

補足

申し訳有りません。半角です。 私の行った方法です。 セルA2に1.○○○○○○○○○○○○○○ セルA3に2.○○○○○-○○○○○ セルA4に3.○○○○○○○○-○○○○○ セルA5に4.7○○○○○○○○○○○○○ セルA6に5.7A○○○○○○○○○○○○ があるとして作成したREPLACEは以下のとうりです。 セルB2に=REPLACE(REPLACE(REPLACE(REPLACE(A2,4,0,"-"),10,0,"-"),13,0,"-"),16,0,"-") セルB3に=A3 セルB4に=REPLACE(A4,4,0,"-") セルB5に=REPLACE(REPLACE(REPLACE(A5,6,0,"-"),12,0,"-"),15,0,"-") セルB6に=REPLACE(A6,4,0,"-") という感じです。

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

ご提示の例が全角なのか半角なのか判然としないので、どちらでもよいように作りました。 半角と決まっているならもっと簡単にできるのですが。 B1セルに =IF(LEFT(ASC(A1),2)="7A",ASC(LEFT(A1,3)&"-"&RIGHT(A1,11)),IF(LEFT(ASC(A1),1)="7",ASC(LEFT(A1,5)&"-"&MID(A1,6,5)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2)),IF(MID(ASC(A1),9,1)="-",ASC(LEFT(A1,3)&"-"&MID(A1,4,5)&RIGHT(A1,6)),IF(MID(ASC(A1),6,1)="-",ASC(A1),IF(LEN(A1)=14,ASC(LEFT(A1,3)&"-"&MID(A1,4,5)&"-"&MID(A1,9,2)&"-"&MID(A1,11,2)&"-"&RIGHT(A1,2)),""))))) これでオートフィルで最後までコピーしてください。

gx9wx
質問者

お礼

ありがとうございました。 完璧に変換できました。

gx9wx
質問者

補足

申し訳ありません。すべて半角の英数字です。

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

数値になっていなくて文字列だと想定しての式です。 セルB1に下記の式を入れて、下へコピーして下さい。 とりあえず法則を全て埋め込んでみました。 =IF(LEN(A1)=11,A1,IF(ISERROR(FIND("-",A1,1))=FALSE,LEFT(A1,3)&"-"&MID(A1,4,5)&"-"&RIGHT(A1,5),IF(LEFT(A1,1)="7",IF(LEFT(A1,2)="7A",LEFT(A1,3)&"-"&RIGHT(A1,11),LEFT(A1,5)&"-"&MID(A1,6,5)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2)),LEFT(A1,3)&"-"&MID(A1,4,5)&"-"&MID(A1,9,2)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2))))

gx9wx
質問者

お礼

私が悪いと思うのですが 2.○○○○○-○○○○○ → ○○○○○-○○○○○ だけおかしく変換されてしまいました。 ありがとうございました。

gx9wx
質問者

補足

申し訳ありません。 コンピューターから吐き出した場合 セルは「標準」になっています。

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

関連するQ&A