• ベストアンサー

文字列の分割

エクセルであるセルに入力された文字列を分割したいのですがうまくいきません。 下記のような感じで、文字+数字の入力になっており、文字の数及び数字の数は決まっておりません。 あいうえお123456 かきく98765 さしすせ2222 これをなんとか別々のセルに下記のように分割したいです。 あいうえお 123456 かきく    987654 さしすせ  2222 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。

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

  • ベストアンサー
noname#52504
noname#52504
回答No.4

「文字はすべて全角・数字はすべて半角」という前提でよければ、 LENの値とLENBの値を素朴に比較するだけでもOKです。 文字部分 =LEFT(A1,LENB(A1)-LEN(A1)) 数字部分 =RIGHT(A1,LEN(A1)*2-LENB(A1)) ※ 文字部分の文字数:LENB(A1)-LEN(A1) 数字部分の文字数:LEN(A1)-(LENB(A1)-LEN(A1)) = LEN(A1)*2-LENB(A1)

searching
質問者

お礼

deus_ex_machina様 ご回答ありがとうございます。 >「文字はすべて全角・数字はすべて半角」という前提でよければ、 >LENの値とLENBの値を素朴に比較するだけでもOKです。 質問に記載しておりませんでしたが、入力されているデータは「文字はすべて全角・数字はすべて半角」です。 説明不足でした。 早速試してみました。すばらしいです。見事実現できました。 シンプルで分かりやすくてとても良いです。 ありがとうございました。

その他の回答 (5)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.6

>早速試してみましたが、「あいう 012345」のように数字 >部分が「0」から始まる場合に「0」が文字を求めたセルに >表示されてしまいました こちらに訂正下さい。 =LOOKUP(10^10,RIGHT(A1,ROW($A$1:$A$10))*1,RIGHT(A1,ROW($A$1:$A$10))) 但し、数値ではなく文字となります >LOOKUP(10^10 ←この部分が何を意味しているのか 非常に大きい数 LOOKUP関数の検査範囲の値より大きな数値であれば何でもいいです (今回の回答は数字部分が10^10より小さいことが前提です)

searching
質問者

お礼

sige1701様 度々の回答ありがとうございます。 >=LOOKUP(10^10,RIGHT(A1,ROW($A$1:$A$10))*1,RIGHT(A1,ROW($A$1:$A$10))) 上記式で無事できました。ありがとうございます。 >>LOOKUP(10^10 ←この部分が何を意味しているのか >非常に大きい数 >LOOKUP関数の検査範囲の値より大きな数値であれば何でもいいです >(今回の回答は数字部分が10^10より小さいことが前提です) なるほど。 自分でもちょっと調べてみました。 「10^10」←10の10乗って事なんですね。 こんな事が出来るんですね。大変勉強になりました。 ありがとうございました。

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

#3です。 間違えました。すみません。頭ではRIGHT関数利用を思っていたのですが、今見ると間違ってました。 質問者がおっしゃるとおりです。全般に良くお分かりのようで安心しました。 >#3の「数字部分は、LEFT関数で左から、全体長さ-5+1 桁を取り出します。」 も 数字部分は、RIGHT関数で右から、全体長さ-5+1 桁を取り出します。 が正しい。 ーー >)&1234567890 の部分も、エクセルが文字列化してくれるので、"1234567890"でなくてもよいも、囲うかと思いましたが省略しました。 数字部分が無い場合があるケースの対応も、書いておけばよかったかと思いましたが、式が長くなるし、そういうケースがなさそうなので略しています。 数字位置が文字列長さ越える場合は数字部分の関数にIF関数を加える必要ガあると思いました。

searching
質問者

お礼

imogasi様 ご回答ありがとうございます。 いえいえとんでもないです。 詳しく説明を記載して頂いていたおかげでなんとかなりました。 本当にありがとうございました。

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

過去に時どき出る質問です。非常に技巧的な関数の利用(超難問)で解決できます。下記関数式は、どなたか関数に詳しい方が生み出し、伝わったものと思います。もちろん小生ではない。 式の意味の説明を工夫しました。 ーー A1にデータがあるとき =MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789")) を考えます。 この意味は 0から9までの各々の文字について、(10度になりますが)、その数字文字列が、A1に見つかるか検索するFind関数を実行し、結果である何桁目かという何番目(の数)をエクセルが覚えておいて、MIN関数を適用させて、そのうち一番少ない数を返します。「一番少ない」とは左から見て行って一番初めの数字文字の(桁)位置を示します。 あとA1に"0123456789"をくっつけているのは、0-9の数字の全部 でA1の文字列をチェックしますが、A1に無い数字でチェックしたとき、「見つからず」でFIND関数のエラーが出(てストップし)ないでスムーズに行くようにするためです。 半角・全角の両方をカバーするにはASC(A1)として、半角に変換して、上記をやる回答も有ります。 ーー 例 A1 asdf212 のとき 5 が返ります。 ーー 後はMID関数で最初から4桁を抜き出せば英字部分が取り出せます。 数字部分は、LEFT関数で左から、全体長さ-5+1 桁を取り出します。 文字部分 =MID(A1,1,MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789"))-1) 数字部分 '=LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1)

searching
質問者

お礼

imogasi様 ご回答ありがとうございます。 早速試してみました。 >=MID(A1,1,MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789"))-1) 文字部分については、上記の方法で実現する事ができました。 =LEFT(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))-1) 数値部分については、上記の方法で実現できませんでした。文字部分が求められます。 そこで皆様からご教授していただきました方法を参考に下記のようにしてみたところ求めることができました。 =RIGHT(A1,LEN(A1)-MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890))+1)

  • sige1701
  • ベストアンサー率28% (74/260)
回答No.2

数字(数値として) =LOOKUP(10^10,RIGHT(A1,ROW($A$1:$A$10))*1) 文字 =LEFT(A1,LEN(A1)-LEN(C1)) 但しC1は上記数字を求めたセル

searching
質問者

お礼

sige1701様 ご回答ありがとうございます。 早速試してみましたが、「あいう 012345」のように数字部分が「0」から始まる場合に「0」が文字を求めたセルに表示されてしまいました。 後、LOOKUP(10^10 ←この部分が何を意味しているのか分かりません。よろしければ意味を教えていただけないでしょうか? よろしくお願いします。

  • daikaisan
  • ベストアンサー率33% (13/39)
回答No.1

これを可能にする単独の関数がExcelで用意されているかどうかは知りません。 Excel VBA をご存知ですか。 これでプログラムを組めばできますが、少し修練がいります。 どんなものかお知りになりたければ、とりあえず以下のページを参照 してください。 これをマスターすれば、Excelで相当なことが可能になります。 VBAをご存知ということでいえば、 SUB SUJIKUBETSU(DT) For X=1 to Len(DT) I=Asc(Mid(DT,X,1) if I>47 and I<58 then SUJI=SUJI & Mid(DT,X,1) else KANA=KANA & Mid(DT,X,1) end if Next X END SUB これで半角数字との選別が可能です。

参考URL:
http://excelvba.pc-users.net/index.html
searching
質問者

お礼

daikaisan様 ご回答ありがとうございます。 残念ながらVBAはあまり詳しくありません。 今の私のスキルでは難しいと思われますので、もう少し勉強してからチャレンジしたいと思います。

関連するQ&A

  • EXCEL2007での異なる列同士での文字の照合

    EXCELの操作について、以下のようなことをおこないたいと考えています。 例えば、A列には、下記のような4つの語句しか無いとして、 <A列> あいうえお かきくけこ さしすせそ ABC B列には、A列の4語句しか入力できないルールがあるとします。しかし、入力ミスもあって、4語句に完全一致しないものも含まれています。 <B列> かきくけこ かかくけこ ACC ABC ABC ABC BBC あいうえお ささしすそ A列の語句リストと完全一致しないものを見つけ出し、そのセルの色を変えるなど(もしくは何らかのフラグをたてる)ことをしたいのです。 実際の業務では、A列にあたる語句リストの数は数百あり、B列の入力語句の数も数千あります。 EXCELの機能もしくはマクロ等でできるかどうかなのですが。 EXCELでなくても、例えば何らかのフリーソフトを併用すれば可能、というのでも良いです。 ご教授お願いたします。

  • エクセルで数字とアルファベットと文字列を分割する方法

    こんばんは。 エクセルのセルで数字とアルファベットの文字列を分割する方法を教えて下さい。 100AB3.4C → "100" "AB" "3.4" "C" 間にスペースやカンマなど無く、文字数は異なります。 数字は小数点がある場合と無い場合があります。(上記の "100" "3.4" のように) 同じ列に同様のデータが数件~数千件あり、まとめて分割したいです。 関数もしくはマクロ(VBA)で可能であれば教えて下さい。 最近マクロの勉強を初めたのですが、方法が思いつきません。。。 宜しくお願いします。

  • エクセルVBAの文字列操作について

    エクセルVBAの文字列操作について 例えば、[1-10,12,15-20,22-38]と入っているセルがあるとします。 各数字は","で区切られています。このセルに数を足したり引いたりしたいのです。 例えば、このセルから”5”を引いて[1-4,6-10,12,15-20,22-38]と表示したり、 "21"を足して[1-10,12,15-38]と表示したいのですが どなたかご教授いただけないでしょうか?

  • VBAの文字列分割

    A1セルにAAA VVV EEE TTT YYYYY UUUUUU WW RRRR WW TTTT という文字列が入力されています。 VBAによって、B1セルから順序右へ空白ごとに分割した文字列を代入することができますか? できれば、空白の数に制限なくできるものを所望しています。 もし不可能であれば最低でも10個までのものだと助かります

  • エクセルで数字の文字列を計算させたくないのですが、うまく出来ません。良い方法はないでしょうか?

    エクセル2003で、下記のようにセルに入力したとします。    A   B   C 1  10   20 2  11  ’21 3  13   14 4 ※B2は「’」をつけて数字の文字列として認識させています。 B4のセルに、=SUM(B1:B3)とすると、うまく34となってくれますが、 C2のセルに、=A1+B2とすると、32となってしまいます。 当方としては、B2を文字と認識してほしいので、求めている答えは11です。 数字の文字列を文字列のまま処理して、計算させない方法はあるでしょうか? 皆様、ご教授願います。

  • EXCELの文字の変換

    EXCELのデータの文字の変換をしたいのですが 例えば A列に あ     い     う     い     う   あ とデータが入っています。 これを あ ならば さしす     い ならば かきく     う ならば はひふ に置き換えたいのですがこのようなことをVB6.0で出来ますでしょうか。 また B列   C列に あいう  えお かきく  けこ さしす せそ とあったら B列に あいうえお かきくけこ さしすせそ としたいのですが・・・。 方法などを教えていただければ幸いです。 よろしくお願いします。

  • EXCEL 文字列分割について

    EXCEL2003を使用しています。 1つのセルに文字列が入力されており、 それを決まったバイト数ずつ別のセルに分割したいと考えています。 例)A1の文字列を6バイトずつ分割したい A1:東京都文京区 ↓ B1:東京都 C1:文京区 これを実現する為に B1に「=LEFTB(A1,6)」 C1に「=MIDB(A1,7,6)」という数式を入力しました。 A1の文字列が全角のみ(または半角のみ)なら 上記の数式で問題ないと思うのですが、 分割対象の文字列は全角と半角が混ざっており、 例えばA1の値が 「a東京都文京区」 というようなものだった場合、 B1:a東京 C1:文京 となり、元の文字列にある「都」の文字が消えてしまいます。 元の文字列が上記の様な場合には B1:a東京 C1:都文京 というように値が返されるようにしたいのですが、 どのように実現したらよいでしょうか?

  • エクセルで、特定の文字列より前の文字列を抜き出す(文字数固定)

    こんにちわ。 「特定の文字列より前の文字列を抜き出す(文字数固定)」を質問させてください。 例) あいうS01234(Backup) かきS10233(Backup) さしすせそS0223(Backup) といったデータがあります。 隣のセルにSから始まる数字(Sを含む5文字分)を抜き出すことは可能でしょうか。 *文中に、どこからS****が入るかばらばら *抜き出したい文字列は半角で必ずSから始まり、数字4文字 *抜き出したい文字列(Sと数字をあわせ5文字)の後ろに必ず”(Backup)”がつく *Sから始まる数字の4文字は必ず0から始まるが、その後の数字3桁はユニーク どなたか、よろしくお願いします。

  • セル内で改行された文字列を1行ずつ他のセルに移す

    excelで、こんなことできますか? book1で、セル内に下のような改行した文字列があり、それを入力したら、 book2に、文字列を1行ずつ他のセルに取り出したいのですが…できますか? book1 (セルは折り返して全体を表示する) book2 (仕上げの画面) A         A あいうえお                    1 あいうえお 1 かきくけこ                    2 かきくけこ さしすせそ                    3 さしすせそ → 4 たちつてと 2 たちつてと                    5 なにぬねの なにぬねの                     6 はひふえほ 3 はひふへほ 教えていただけると助かります。(ただしマクロはよくわからないのですが…)

  • エクセルの文字列としての数値

    エクセルでは「’」を付けるか、セルを文字列とするかで、数字を文字列として認識させられるようですが、ここで文字列として認識された数値はASCIIにおける、文字列としての数認識コードとやはり同じなのでしょうか?それともエクセル独自のものと解釈した方がよいのでしょうか?

専門家に質問してみよう