- ベストアンサー
文字列操作 挿入
エクセルにおける文字列操作において 123X456X890 1234X2345X3456 のような、桁数がバラバラな状態で文字列データがあった際、 1.全てを14桁に揃える 2.文字「X」を5及び10桁目に持ってくる (つまりは14桁の文字数で、形式を揃える) 様な文字列操作を行うに、どの様な手法があるでしょうか? お分かりになる方、ご教授いただけますと助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
◆こういうことでしょうか ____A__________B 1__123X456X890____0123X0456X0890 2__1234X2345X3456__1234X2345X3456 3__12X34X56______0012X0034X0056 B1=TEXT(LEFT(A1,FIND("X",A1)-1)*10^8+MID(SUBSTITUTE(A1,"X",REPT(" ",9)),9,9)*10^4+REPLACE(A1,1,FIND("X",A1,FIND("X",A1)+1),),"0000X0000X0000") ★下にコピー
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
>14桁の文字数で、形式を揃える) 何桁・何桁・何桁の3つの桁数を質問に明記のこと。 ーー 質問者は、関数で出来ればというレベルだと思うが 以下すべて5+5+5で揃える例にした。14桁等なら”00000”を”0000”にする。 A1に1234x2345x3456 を入れて Xは2つしかないという前提で 最後のX以下を5桁(前に0を埋める)だけでも =TEXT(MID(A1,FIND("x",A1,FIND("x",A1)+1)+1,LEN(A1)-FIND("x",A1,FIND("x",A1)+1)+1),"00000") 14桁なら"0000" という長い式になる。 先頭部分は =TEXT(LEFT(A1,FIND("x",A1)-1),"00000") で 01234 中間部分は =TEXT(MID(A1,FIND("x",A1)+1,FIND("x",A1,FIND("x",A1)+1)-FIND("x",A1)-1),"00000") で 02345 これら3つを、&で結合したものになる。 恐ろしく長い式になる。 ーー だからVBAでユーザー関数がよかろう。 これはさまざまなタイプのプログラムがあるだろう。一例で プログラム行数を少なくした。 標準モジュールに下記をコピペ Function soroe(a) p1 = InStr(1, a, "x") p2 = InStr(p1, a, "x") x = "000000000000000" Mid(x, 1, 5) = Format(Left(a, p1 - 1), "00000") Mid(x, 6, 5) = Format(Mid(a, p1 + 1, p2 - 1), "00000") Mid(x, 11, 5) = Format(Right(a, Len(a) - p1 - p2), "00000") soroe = x End Function 使い方はセルに =soroe(A1) 結果 012340234503456 14桁(最後の部分が4桁なら) "000000000000000"を14個の0に Mid(x, 11, 5) = Format(Right(a, Len(a) - p1 - p2), "00000") の"00000"を"0000"に修正する。 ーー どちらにしても質問者には易しくは無いでしょう。
お礼
素人質問で申し訳ありませんでした。長くなりましたが、関数で対応が出来ました。今後、用途に応じて、VBAを使用してみます。ありがとうございました
- bin-chan
- ベストアンサー率33% (1403/4213)
VBAでの例です。例外時の考慮をしていません。 以下のFUNCTAION以下を、標準モジュールを追加して貼り付けしてください。 セルA1に 123X456X890 があるとして セルB1に 式[=henkan(A1)]と入れていただければ 0123X0456X0890 が得られます。 Function henkan(argString) As String Dim strArrey() As String Dim nArrey As Long Dim nLoop As Long strArrey() = Split(argString, "X") nArrey = UBound(strArrey()) For nLoop = 0 To nArrey strArrey(nLoop) = Format(strArrey(nLoop), "0000") Next nLoop henkan = Join(strArrey(), "X") End Function
お礼
VBAはほとんど使用しなかったのですが、場合によっては容易に出来るのですね。ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
1234X2345X3456 は14桁なのでよいのですが、 123X456X890 を14桁にしたときの状態を例示してください。
補足
14桁にした際の表示は、 0123X0456X0890 のように、頭に0をつけ、14桁表示にしたいです。
- koko88okok
- ベストアンサー率58% (3839/6543)
1) 文字「X」を「置換」機能を使って削除して、数字だけにして、 2) 5桁と10桁目に文字「X」を表示するために、「セルの書式設定」の「表示形式」で、ユーザー定義を「#0"X"0000"X"0000」などと設定します。
お礼
ありがとうございました。関数にて対応が出来ました。感謝いたします。