• ベストアンサー

エクセルのセル内の文字列から不定の文字を抜く連続作業の簡単な方法

EXCEL2002で、セルから特定の文字を抜く連続作業の簡単な方法を教えて下さい。 状況は、セル内に[3枚]という文字があり、また、別のセルには[5個]や[6缶/ケース],[3本/P],[100枚]等の情報が大量に有ったとします。ここから、「数字以外の文字」の部分を抜き出して数字だけのセルにする作業をしたいのです。 文字列の長さが不統一なので、困っています。簡単な方法はあるでしょうか? 当方は、マクロやVISUAL BASICなどの知識は或る程度は持っていますが、出来たら関数を使用して出来ないでしょうか? なお、この質問は以下の質問を参考に致しました。nkndisk 様、お許し下さい。 http://okweb.jp/kotaeru.php3?q=541611

noname#9808
noname#9808

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

  • ベストアンサー
  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.1

下記ページに書かれていますが、 数字が常に先頭に来る場合は、 =LEFT(A1,LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},)))) 先頭に文字列が入る可能性がある場合は、=MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},)))) で抜き出すことができます。 【数字+文字列から数字のみを取り出す】 http://www2.odn.ne.jp/excel/waza/function.html#SEC74 ただし、上記式はいずれも半角数字にしか対応していませんので、数字に半角全角が混じっている場合は、ASC関数を使って、半角に統一してやる必要があります。 =LEFT(ASC(A1),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},)))) または =MID(ASC(A1),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},)))) なお、上記で出力される数字は文字列になりますので、計算結果を他の計算に使用したい場合は、さらにVALUE関数を使って文字列を数値に変換して下さい。 =VALUE(LEFT(ASC(A1),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},))))) または =VALUE(MID(ASC(A1),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&1234567890)),LEN(A1)*10-SUM(LEN(SUBSTITUTE(ASC(A1),{0,1,2,3,4,5,6,7,8,9},)))))

参考URL:
http://www2.odn.ne.jp/excel/waza/function.html#SEC74
noname#9808
質問者

お礼

これですこれです。これを探していました。物凄く助かりました。ありがとうございました。

noname#9808
質問者

補足

すみません。 上の数式をそのままコピー&ペーストで貼り付けると、大丈夫なんですが、自分のシートに合うように改良しようとすると、エラーが出てしまいます。 在庫管理をするシートを作っており、C4に単位あたりの価格、E4に単位、F4に現在の在庫数を打ち込むと在庫品の価格が出るようにしたいのです。 たとえば、”6缶/ケース”で”900”円の缶ビールが”10”本有る時の値段を出したいのです。 とりあえず今は、下記の式を使っていますが.... =IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)-1))*$F4) これと先ほどの式を組み合わせるとエラーになってしまいます。 よろしくお願いします。

その他の回答 (3)

  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.4

#1です。 補足に書かれている式 >=IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)-1))*$F4) を拝見しましたが、 >LEFT(ASC($E4),LEN($E4)-1) の部分は、E4に入力されている文字列の、左から「LEN($E4)-1」の長さ分を取り出してしまいます。(例えば、”6缶/ケース”であれば、6文字のうちの5文字を取り出して”6缶/ケー”(「ケー」は半角)となります) もし左から1文字を取り出すのであれば、 LEFT(ASC($E4),1) とすべきでしょう。 ただ、 >これと先ほどの式を組み合わせるとエラーになってしまいます。 ということですが、#1の式を今回のケースに当てはめるのであれば、 =IF($E4="",$C4*$F4,$C4/[参照セルを変更した#1の式]*$F4) でいいはずで、上記の部分は関係が無いと思われます。 具体的には、 =IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))*$F4) または、 =IF($E4="",$C4*$F4,$C4/VALUE(MID(ASC($E4),MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC($E4)&1234567890)),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))*$F4) でいいはずです。 上記の式で万が一予想と違う結果となった場合、「これと先ほどの式を組み合わせ」されたその数式と、エラーの種類(「#VALUE」など)を補足してもらうと、何らかのアドバイスはできると思います。

noname#9808
質問者

お礼

たびたび申し訳有りません。 元々の数式は、単位が”1個”とか、”10本”しかないと想定して作ったのですが、例のような物が出てきたので困っていたものです。 エラーが出たのは、私の勘違いで、 =IF($B4="","",IF($E4="",$C4*$F4,$C4/”VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},)))))”*$F4)) 上記の””で囲まれた部分にもう一つ閉じ括弧が加わっており、 =IF($B4="","",IF($E4="",$C4*$F4,$C4/VALUE(LEFT(ASC($E4),LEN($E4)*10-SUM(LEN(SUBSTITUTE(ASC($E4),{0,1,2,3,4,5,6,7,8,9},))))))*$F4)) となってしまっておりました。今は正常に動いています。 ただ、SUBSTITUTE()関数を数式入力ウィザードで入れようとすると、『関数の引数が足りません』といった意味のメッセージが出るのですが、気にしなくて良いですよね。正常動作していますから....... 勉強になりました。ありがとうございます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

数字で始まる場合は、 以下の様なユーザ定義関数を使うのが簡単・簡明です。 public Function Nvalue(x) Nvalue = Val(x) End Function 全角で始まる場合は、ASC関数を使って半角数字にしてから関数を使います。

noname#182251
noname#182251
回答No.2

「その他(コンピューター [技術者向け]) 」に投稿されたことから「エクセル内部で」解決しなくても良いと理解しました。 このような「規則性はあるがバラツキがある」対象を扱うには「正規表現:regular expression」が適当であると悪寒がえます。御存知なければ http://www.mnet.ne.jp/~nakama/ に解説が。御存知であれば失礼しました(^^; で、エクセルをcsv形式で保存し、文字列として正規表現で処理する。 このような処理だと、古典的なものでは awk、良く使われるのは、Perl ruby などでしょうか。 この方針であれば、カテゴリーをかえて Perl で問合わせれば、山のようにレスがつくかと。

参考URL:
http://www.mnet.ne.jp/~nakama/
noname#9808
質問者

お礼

ありがとうございました。 正規表現、ツールによって微妙にルールに違いが有るようなのですが、次の機会に使うために勉強しておきます。

関連するQ&A

  • エクセルのセルから特定の文字を抜く連続作業の簡単な方法

    OFFICE2000のEXCELで、セルから特定の文字を抜く連続作業の簡単な方法を教えてください。 状況は、セル内に[AA-1234]という文字があり、また、別のセルには[AA-3656]や[AA-8964],[AA-5733]などの情報が大量にあったとします。ここから、「AA-」の部分を抜き出して数字だけのセルにする作業をしたいのですが、簡単な方法はあるでしょうか?当方は、マクロやVISUAL BASICなどの知識に乏しく、せめて関数を使用してでの作業が限界です。 セル内の数字は、それぞれのセルごとに連続性が無い不規則な数値です。よろしくお願いします。ご教授下さい。

  • EXCELで、連続した文字列の配列

    EXCEL初心者がちょっとしたデータをEXCELで 扱おうとして、さっそく問題にぶちあたりました。 連続した文字列の配列に関してなんですが、 “1年後”、“2年後”、“3年後”。。。。 という感じで“~年後”を100年後くらいまで作りたいので オートフィル?利用としています。 参考にしてるページ(http://www.eurus.dti.ne.jp/~yoneyama/Excel/nyuryoku.htm) の下の方に 「文字列に数字が含まれるものも連続した値が入力できます。(登録の必要はない)」とあるので “1年後”と入力した後にそのセルの右下黒十字をドラッグすれば できるのかなと思いきやできませんでした。 どうやって連続した文字列を作ればいいでしょうか? 質問がわかりにくかったら申し訳ありません、 わかりにくい点を言ってただけたら補足したいと思います。 どうかよろしくお願いします。

  • EXCEL: セルの先頭に任意の文字列を入れる

    Excel2013 Excelのセルに入力された文字列の先頭に、任意の文字列を入れたいのですが、どのような方法があるでしょうか? マクロが必要でしたら記述をお願いします。マクロが不要な方法があれば、なお便利です。 文字列は1~3文字程度で任意なものを入れたいのですが、既存セルの先頭に入れるだけです。ただ適用セルが数千あるため、手作業を避けたいと考えています。

  • excelで3個ずつ連続データを入力するには

    excel2021を使っています。連続数字を各セルに1文字づつ、3個づつ入力したいのですが、どのように操作したらよいかご教示ください。 連続数字3個というのは以下の通りです。 1 1 1 2 2 2

  • エクセルで文字列が混入しているセルを検出するマクロ

    本来、数字しか入力しないことになっているエクセルのある範囲内に、文字列が混入していないかを検出するマクロを教えて下さい。文字列は手作業で修正するので、文字列が混入しているセルを赤色に変えて示してくれるようなマクロを探しています。宜しくお願いします。

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

    エクセルの文字列についていまさらながら素朴な疑問です。 たとえば0007を入力したいとき、 そのまま打ったら000が画面上に反映されません。 そこで000を反映させるために2つの方法 がありますよね。 1つは0の前に「'」をつける方法、 もうひとつはセルの書式設定で「文字列」に変える方法があると思いますが、この2つの違いはなんなのでしょうか?? といいますのも、複数の方にデータ入力の作業をしてもらっていて私がまとめ役なのですが、 こちらの説明不足で、 000が先頭にくる数字の入れ方を上記2つのどちらかで統一させなかったため、画面上はきれいに入っていますが、中身をみると(的確な表現が思いつきませんが)「’」がついていたりなかったりします。 どうせなら統一させるために「’」をとりたいのですが、これをとる方法が見つかりません。 (そもそも、何の影響もないからとる必要がないといわれたらそれまでですが・・) 恐れ入りますが、上記2点教えていただけると助かります。 よろしくお願いいたいます。

  • Excelでセル内の数字だけ取り出したい。

    1セル内に最大40文字程度の半角英数カナが混在しています。 例:1234abcdアイウ3456efghijk これが数千行あるのですが、集計のため数字にしたく、 しかも数字連続と次の数字連続の間にスペースを入れたいです。 例:1234 3456 かなり調べましたが、関数では数字を取り出すだけでも40文字は不可能のように思います。 マクロで置き換えを連続させて文字を消すのは思いつくのですが、 今少しスマートな方法はありますでしょうか?

  • エクセルでの列に入った文字について

    office2007のエクセルでCSVの作業をしているのですが、 すでにセルの中に文字を入れていて、後から記入した文字の後ろに「-130」と1列すべてに一括で入れたいのですが方法はありますでしょうか? あと、すでに記入した文字に半角小文字と半角大文字が混ざっていて 半角大文字で統一したいのですが簡単な方法はあるのでしょうか? 分からなくて困っていております。 その方法をご存知でいらっしゃる方、助けてくださいませ。

  • 文字列を含む連続データの入力

    住所1, 住所2, , , 住所1000のような(同一文字列+変化する数字)連続データを,ワークシートの列(例えば,A1からA1000)に入力する簡単な方法を教えて下さい。オートフィルでマウスを1000行引っ張るのは大変ですので,「連続データの入力」で行いたいと思っています。数字だけですと簡単にできるのですが,文字列が入っているときのやり方がわかりません。お教え下さいますよう,お願い申し上げます。使用ソフトはexcel 2013です。

  • Excel 2つの数字と文字列を含む連続データ

    1セル内に2つの数字と文字列を含む場合の連続データの作成方法を教えてください。 下記のような連続データを作成したいです。 関数は使用せずに、連続データの作成もしくはオートフィルを使用した場合作成可能でしょうか。 可能な場合方法を教えてください。 1名1室 1名2室 2名1室 2名2室 3名1室 3名2室 4名1室 4名2室 ・ ・ ・ Excel2010を使用しています。 以上、よろしくお願いします。