• ベストアンサー
※ 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/17068)
回答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

  • エクセルの式について

    エクセルの式について教えてください。 A列に種類(1、2、…など)B列に金額(数字)というデータがあって、おそらく100行目くらいまでいきます。 各種類ごとの合計について求めたい場合、どのような式にしたらいいのでしょうか? たとえば、言葉で言うと、「A列に1とあるB列の数字について全て足す」なのですが。 分かりにくくてすみませんがよろしくお願いします。 ちなみにデータの並べ替え等はできればしたくありません。

  • Excel のデーター入力規則が別列でソート

    Excelで A列に日付け B列に仕入れ先 C列にその仕入れ先の主な品名などをデーター入力規則で覚えさせていますが、 仕入れ日の都合及び仕入れ先伝票到着日の都合で最後の行に 追加記入、及び仕入れ先をサーチしてまとめて数件記入してから、A列の日付順にソートすると表面の書かれた文字はそのまま各行で並び替えされますが、 データー入力規則は記入した時の行に残ったままの様で次に仕入れ先のデーター入力規則をしようとすると違う表示になっています。 この場合日付をソートした場合その行の(隠れている入力規則)データーも一緒に移動できない物でしょうか? よろしくお願いいたします。

  • エクセルの複数項目をソートするには?

    すみませんが教えて頂けませんか 現在勤めている会社のデータなのですが、 セルのA列(顧客番号:数字のみ)と B列(顧客名:漢字仮名まじり)にあるデータを元として I列とJ列にある項目をA列とB列と全く同じ並びに ソートさせてそれに付随している売り上げの数字が 入力されているK列とL列とM列も I列とJ列に連動して一緒にソートする方法は無いでしょうか? どうぞ宜しくお願いします

  • 《エクセル2000》複数条件の合計(文字数字混在)

    こんにちは。 A・B列に1~3までの数字・C列に任意の数字が入っています。 A列及びB列に1が入っている行のみ、Cの数字を合計したいです。 仮に1~100行にデータがある場合、関数の式は =SUMPRODUCT((A1:A100=1)*(B1:B100=1)*(C1:C100)) …になると思うのですが、A1~C100のセルの中に、ランダムで全角文字が入っているせいか、計算結果が#VALUE!になってしまいます。 ISNUMBERを使えばいいのかとも思いますが、イマイチぴんときません… 詰めの甘い私に、どうかご教授をお願いします。

  • ms エクセル 2003で複数データーの抽出

    ms エクセル 2003で複数データーの抽出貼り付け (例)下のようにA1セル縦にランダムに数字が並んでいます。この縦に 並んでいる数字をB1~B6に任意の範囲に並べる式又は関数をおしえて   A        B               ください。 1 6 16 26 36    1~8までを横に並べる(1 3 5 6 8 )―――例 2 8 18 28 38 12~16までを横に並べる(     ) 3 2 12 22 32 42 11~23までを横に並べる(     ) 4 3 13 23 33 43 20~31までを横に並べる(     ) 5 5 15 25 35 33~39までを横に並べる(     ) 6 1 11 21 21 41 36~43までを横に並べる(     )

  • エクセルのデータ結合について

    エクセルのB列に1~1000までの数字がランダムに500個入っています。 エクセルのC列にも1~1000までの数字がランダムに500個入っています。 同様の列が10行あります。 (B列以降には入っている数字と入っていない数字があります) A列には、1~1000までの数字が順番どおりに全て並んでいます。 次のような感じです。 (並べ替え前の文字列) A  B  C  D・・・  1  3   2  6 2  1   4  5 3  5   5  1 4  6   3 5        6       これを、下の列のように、B列以降の列の数字を並べ変えたいのですが、エクセルはこのような各行の並べ替えはできますでしょうか? 方法がありましたらご教示頂ければ幸いです。 よろしくお願いいたします。 (並べ替え後の文字列) A  B  C  D・・・  1  1     1 2     2 3  3   3 4     4 5  5   5  5 6  6     6

  • 1列のデータを1行に変換し規則性のない文字列削除

    エクセル初心者です。 どなたか、助けてください。 下記のように、1列のひとつのセルに入っているデータを複数ファイルあり A :●● B :▲ C :■■ ●● ▲ ■■ といった 不要で規則性のないデータを削除して 必要な情報(これも規則性がないです) をひとつのファイルのひとつの特定のセルの中に1つづつ行に並べかえたいのです。 いろいろ調べてみて、2列のものなら、行列変換という形で、できるところまでわかって 1列 A :●● 、1 B :▲ 、1 C :■■、1 として、 A :●● ,B :▲ , C :■■ 1     、1    、1 に並べ替えられたのですが、 (1)複数のファイルをひとつにして (2)規則性のない不要なデータを削除して (3)特定のセルに入れたい のですが、 全く知識がないので、何か式を書いたり、プログラムも書いたことがないので 困っています。 どなたか、サルにでもわかるように、 ヒント、知識、お力を貸してください。 お願いします。

  • エクセル/データの入力規則/フィルターが効かない

    お世話になります。 社員の人事データに係る20列×200行のエクセルシートがあります。 ある列に「データの入力規則」にて「入力値の種類」をリストにし、「元の値」の箱の中に3個の選択肢(例えばA,B,C)をカンマで区切って入力し、その列の入力の際にその3個の選択肢をプルダウンで選択できるようにしてから、200行(200個のセル)にAまたはBまたはCの入力をしました。 その後、1列目の項目の行にフィルターをかけ、A(またはBまたはC)が入力されたデータのみ表示させたいのですが、上から150行目まではちゃんとフィルターが掛かるのですが(即ち、A(またはBまたはC)が入力されたデータのみが表示される)、151行目以降はフィルターがかからず、A、B、C全てのデータが表示されてしまいます。 また、この時、エクセル左端の行番号の数字の色が、150行目までは青色ですが、151行目以降は黒色となっており、151行目前後で何かが違っているようです。 但し、自分自身では何かを変えたつもりは全くなく、何故151行目以降でフィルターが効かないのかが全く分かりません。 また、上記と全く同じこと(「データの入力規則」設定後に入力+フィルター)を別のエクセルファイルで行いましたが、そこでは200行全てがちゃんとフィルターが掛かっています。 何故151行目以降でフィルターが効かないのでしょうか? また、解決策は何かあるでしょうか?

  • EXCEL 複数の入力規則について

    EXCELにて複数の入力規則の指定をしたいのですが出来ないので質問しました。 配送トラックの運行情報を入力する為のシートを作っています。 A列に業務が終わったときの距離メーターの数字 B列に業務開始時の距離メーターの数字を入れるようになってます。 業務開始時の距離か終了時の距離か、どちらから打つのか分かりません。 条件は・・・ 「6桁(999999)以上は禁止」 「業務終了時(A1)の距離より業務開始時(B1)の距離の方が小さい」 の2つです。 A1のセルに =IF(B1="",A1<=999999,AND(A1<=999999,B1<A1)) と入れたのですが、FALSEの場合は正確に動くんです。 業務開始時(B1)の距離が入力されていれば、A1にB1より小さい数字は入れられないようになり、999999以上の数字もエラーがちゃんと出ました。 しかし、B1が空で999999以上の数字を入れてもエラーにならないんです。 B1が空の状態でA1は999999以上の数字が入力できないようにしたいのですが分かりません。 だれかわかりましたらアドバイスお願いします。

  • エクセルでのデータの表示

    エクセルでのデータの表示 次のような表が在ります。 A列   B列   100    2   100    2      101    6   101    2   101    6   102    6   102    6   103    2   103    2   103    2    104    6   104    2  ・     ・  ・     ・  ・     ・   これを、次のように、C列に「◎」と「×」を表示させるようにするには、どのようにすれば可いですか? つまり、「A列のナンバーが重複していて、且つ、B列の数字が異なる二種類の場合は、C列に◎」、「A列のナンバーが重複していて、B列の数字は一種類の場合は、Cれつに×」と表示させたいのです。 A列  B列  C列 100    2  × 100    2  ×   101    6  ◎ 101    2  ◎ 101     6  ◎ 102    6  × 102    6  × 103    2  × 103    2  × 103    2  × 104    6  ◎ 104    2  ◎ ・      ・  ・ ・       ・  ・ 宜しくお願い致します。

専門家に質問してみよう