• 締切済み

数字だけを取り出す関数

仕事で使用するための関数を教えていただきたいのですが、メールなどで数字の報告を受けるときに、文章から数字だけを取り出す方法はありますか? メール本文には開始数()受注数()・・・という具合で()の中に数字が入力されて受信します。現状は、何文字目以降の文字を取り出すという関数で抽出していますが、開始数(マイナス5)など()の中に文字が入ってしまっている場合には数字だけ取り出すことができずに悩んでいます。 エクセルの関数BOOKなどを読んでみましたが、なかなか適した関数がみつかりませんでした。 アドバイスよろしくお願いします。

みんなの回答

  • arata
  • ベストアンサー率49% (139/279)
回答No.8

プロロシージャと関数の入ったブックをあげておきました。 参考にしてください。

参考URL:
http://www.onetwo.jp/GetNum.lzh
全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#6です。 エクセルのシートの1セル内に( )が1組しかないとき、()内の数字を取り出す関数 =VALUE(MID(A6,FIND("(",A6)+1,FIND(")",A6)-FIND("(",A6)-1)) これが役に立たないかやってみてください。 (例)A6セル 今月の実績は(-123)です 結果 -123

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

・関数とかエクセルの言葉が見えるので、エクセルの質問ですか。考えているソフトは明確にしないと答えが明確になりません。 ・エクセルだとして >メールなどで数字の報告を受けるときに これではどのセルにどのように値・文章が入っていますか。明確に伝わりません。 ・数字は()の中に必ず入っているなら、(から)までということで1セルあたり1つなら関数抜きき出せそうです。 1文に2つ以上あると、関数では、別の位置で繰り返しができないのでお手上げです。 ・1セル全体が数値かどうか(-も含め)なら、=ISNUMBER関数があります。 ・正面きってー、0-9で判別しようとすると 既回答のようにVBAのユーザー関数になります。 ・OSやソフトに[0-9]と表現して0から9まで のどれかに該当すれば・・という使い方ができるものもありますが数字の塊を抜き出すのは不可能では(自信なし) ・当面は少しの勉強で実現するのは、VBAのユーザー関数しかないように思います。それも考えている単位で1箇所抜き出しでしょう。 ・それ以上は、全文字を1字ずつ判別してゆき、0-9、-か判別し、かつ固まり(数字のつながり)を判別して行くプログラムになります。 1文字n判別も、文字コードによると1バイト2バイト文字があったりして、初心者には手ごわいように思います。

全文を見る
すると、全ての回答が全文表示されます。
  • arata
  • ベストアンサー率49% (139/279)
回答No.5

そうです。マクロですね。 作り方ですが、私が使っているのがOffice2000なので、若干違うかもしれませんが、その辺はご勘弁ください。 1.新規で、ブックを作成してください。  (新規じゃなくてもいいですけどね) 2.メニューの[ツール]-[マクロ]-[Visual Basic Editor]を選択 (シート下部のタブ(シート名があるところ)の上で右クリックして、[コードの表示]を選択でもよい 3.メニューの[挿入]-[標準モジュール]を選択 4.開いたコードウインドウに、紹介したVBAの関数コードを貼り付けてください。 貼り付ける範囲は、 Function GetNum1(p_Range As Variant, p_Str As String) As Variant から End Function までです。 ANo.2の方もやってみたければ、 Sub 数字取り出し() から End Sub まで貼り付けてください。 以上を行ったら、Visual Basic Editorを閉じてOKです。 あとは、エクセルのブックで試してみてください。 ANo.4の方は、 -------------------------- A5に”開始数(20)受注数(マイナス200)"が入っている場合 セルに =GetNum1(A5,"開始数") =GetNum1(A5,"受注数") を設定すると(どこのセルでもよい) それぞれ20、-200が返却されます。 -------------------------- のようにすると動作しますが、ANo.2の方は操作が必要です。 1.ブックの一番左のシート(名前を変えてなければSheet1ですね。)のA1に抽出元の文字列を貼り付けます。 2.メニューの[ツール]-[マクロ]-[マクロ...]を選択 3.マクロ名の一覧に”数字取り出し”がありますので、これを選択して実行ボタンを押下 A1に”開始数(20)受注数(マイナス200)"を入れた場合は、A2に開始数、B2に20、A3に受注数、B3に-200が入るはずです。

全文を見る
すると、全ての回答が全文表示されます。
  • arata
  • ベストアンサー率49% (139/279)
回答No.4

もうひとつおまけ これもVBAですが、関数タイプです。 指定したセルに入っている文字中から指定した文字列の直後の数字を返します。 例えば、A5に”開始数(20)受注数(マイナス200)"が入っている場合 =GetNum1(A5,"開始数") =GetNum1(A5,"受注数") とすると、それぞれ20、-200が返却されます。 Function GetNum1(p_Range As Variant, p_Str As String) As Variant Dim strText As String Dim i As Integer '処理対象の文字列をstrTextに設定 strText = p_Range 'マイナスを-に置き換え strText = Replace(strText, "マイナス", "-") '全角()を半角に strText = Replace(strText, "(", "(") strText = Replace(strText, ")", ")") 'スペースを削除 strText = Replace(strText, " ", "") strText = Replace(strText, " ", "") i = InStr(strText & "(", p_Str) If i > 0 Then GetNum1 = Val(Mid(strText, i + Len(p_Str) + 1)) Else GetNum1 = "" End If End Function VBAの設定の仕方がわからない場合は、また聞いてください。

a-ranranran
質問者

補足

回答ありがとうございます。 あまり詳しくないので更に質問を重ねてしまうようで申し訳ないのですが、VBAとはどのようなものなのでしょうか? 少し自分なりに調べてみましたが、マクロなどのようなものでしょうか? セルA1に"開始数(20)受注数(マイナス200)"を入力してマクロに下記を登録してみましたがうまく動きませんでした。 Dim rng As Range Dim strText As String Dim txtSplit As Variant Dim i As Integer Dim posMinus As Integer Set rng = ThisWorkbook.Worksheets(1).Range("A1") 私の設定方法が間違っているのかもしれませんよね。。。

全文を見る
すると、全ての回答が全文表示されます。
  • bob_n
  • ベストアンサー率35% (610/1732)
回答No.3

一文字ずつ読んでいき 0~9が出てきたらその位置以降を取り出すようにするればいいと思います。

a-ranranran
質問者

お礼

アドバイスありがとうございます。 この作業は、実にメールが100件/日以上にも上るため、メールを1通ずつ読む作業は不可能なのです。。。

全文を見る
すると、全ての回答が全文表示されます。
  • arata
  • ベストアンサー率49% (139/279)
回答No.2

関数じゃないとダメですか? A1に対象文字で、A2から下に取り出した文字を出力します。 Sub 数字取り出し() Dim rng As Range Dim strText As String Dim txtSplit As Variant Dim i As Integer Dim posMinus As Integer Set rng = ThisWorkbook.Worksheets(1).Range("A1") 'A1の文字列をstrTextに設定 strText = rng.Value 'マイナスを-に置き換え strText = Replace(strText, "マイナス", "-") '全角()を半角に strText = Replace(strText, "(", "(") strText = Replace(strText, ")", ")") '文字列を)で分割 txtSplit = Split(strText, ")") If UBound(txtSplit) = -1 Then Exit Sub End If For i = 0 To UBound(txtSplit) '(の位置を取り出し posMinus = InStr(txtSplit(i), "(") '(より左の文字列を設定 If posMinus > 1 Then rng.Offset(i + 1, 0).Value = Left(txtSplit(i), posMinus - 1) End If '(より右の文字列を取り出して設定 If posMinus > 0 And posMinus < Len(txtSplit(i)) Then rng.Offset(i + 1, 1).Value = Val(Mid(txtSplit(i), posMinus + 1)) End If Next End Sub

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

例として Excel を挙げられていますので、VBA だとすると・・・ 最近の Excel は正規表現を扱えるようなので、これを使って数値部分だけを抜き出すのが一番スマートかと思います。 参考 URL をどうぞ。

参考URL:
http://www.officetanaka.net/excel/vba/tips/tips38.htm
a-ranranran
質問者

補足

回答ありがとうございます。 VBAというものを知らないため、もう少し勉強しなければなりません。

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

関連するQ&A

  • 関数編。一番高い数字を取る方法です。

    こんばんわ。 あるデータを抽出しました。 抽出結果 $count には数字が入ってます。 5とか1とか10とかです。 その中の一番高い数字だけを抜くにはどのような関数を使いますか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • エクセルの文字列を抽出する関数を教えてください!

    テキストファイルから文字列をエクセルに貼りつけ、ある条件の単語のみを抽出する関数について教えてください。 (1)あらゆる文字・記号で構成されている文章のうち、” ”(二重引用符)で囲まれた中のその文字列だけを抽出するには、どのような関数があるのでしょうか。 (2)ある文章は、 (文字数はバラバラの文章).1-文章.doc、 (文字数はバラバラの文章).2-文章.doc、  ・・・ となっているテキストがあるのですが、そのテキストのうち、「数字ー」の形式は同じなのですが、その「(数字)‐」以降「.doc」までの文章のみ抽出するには、どのような関数になるのでしょうか。 マクロは組めませんので、関数で教えて頂ければ幸いです。 宜しくお願いします。

  • エクセル関数で指定した数字の中から

    エクセル関数で指定した数字の中から6個ランダムで抽出できる方法はありますか? 例えば 指定した数字 1,5,6,12,15,18,23,26,34,39,43… とあります この中から6個だけ抽出したいのですがダブり数字なしで。 何方か教えてください。 よろしくお願いします。

  • EXCEL関数 文字列の一部の数字文字を数値化して計算につかいたい

    EXCEL関数について質問です。 あるセルの文字列に記載されている一部の数字文字を 数値化して計算につかいたいと思っています。 <例>  あるセルの文字列(A1)⇒あいうえお12345番目の方  出力したい数字文字⇒12345 知る限りの関数を使って以下の関数式を作ってみました。 (1) MID関数を使う  最初の文字「あいうえお」は10バイトなので開始は「11」としました。 (2)後に登録されている「番目の方」を除きたいので  SEARCHB関数を使って、「番目」の開始バイトを見つけ  そこから最初の文字バイト「11」を引き、抽出するバイトを求める。 (3)抽出した文字列を数値に変換するVALUE関数を使う。 次の関数式を作ってみました。   =VALUE(MIDB(A1,11,SEARCHB("番目",A1,1)-11)) でも結果は「」となります。 何がいけないのかわかりません。エラーの原因がわかれば教えて下さい。 ほかによい方法があれば教えてください。 よろしくお願いします。  

  • PHPでのsubstr関数について

    PHPで、3問ほど質問です。 問1 PHPでプログラムを作成していて、思った結果が出てこないので、変数やら配列やらの 中身を表示させつつ、原因らしきものを突き止めました。 substr関数 です。 手元のプチリファレンスには、 substr(元の文字列,抽出開始位置,抽出する文字数) のようなことが書いてあるのですが、 抽出開始位置 ではなく、抽出を開始したい手前の位置 ではないのかと思いました。 というのも、 echo substr("abc",0,1); は、a が表示されますし、 echo substr("abc",3,1); は、何も表示されないからです。 というわけで、 substr(元の文字列,抽出を開始したい手前の位置,抽出する文字数) でいいのでしょうか? ○文字目から数えて、△文字分としたときにずれて表示されるので、ヘンだな~と 思っているのですが…。 問2 DOSプロンプト経由で、PEARをインストールしてみました。 (自分のパソコンです。XAMPPを使用しています) 最終的にinstall ok と表示されましたが、Warnning というメッセージがちらほらと。 大丈夫なんでしょうか? ただ、PEARの機能は使えましたが…。 問3 値を送る・返す関数ではなく、PHPで、サブルーチンというか、VBやVBAでいえば、Call文で 呼んでくるような、文の書き方を教えてください。 sub_keisan(); function sub_keisan(){ } のような引数なしの関数の書き方でいいのでしょうか?

    • ベストアンサー
    • PHP
  • Excel 関数

    文字と数字(例えば111aaa)から、数字だけを抽出する関数を作ろうとしたら上手くいかず、ネット上で調べたら次のようなものが出てきました。 =LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) となっていました。うまく作動はするのですがどうも意味がわからないところがあります。 Q, Column($1:$1)を単独で用いると1を返します。それをLEFTの文字数に表したところで1しか表さないと思うのですが、lookupまで用いると、lookupで探している値に近くなる数字を探し、Column($1:$1)が任意に動いているような挙動をしています。これはなぜなのでしょうか?

  • excel 文字列から数字だけ抜き出す関数を教えて

    [1点] (4文字)や 1点] (3文字)の中から数字だけ抜き出す関数を教えてください。 元のデータから後ろ4文字の書き出しをしたら上記のように3文字になっているものもあります。 もしかしたら空白が入っているかもしれません。 数字は全角なので、半角にする関数も併せて教えてください。 よろしくお願いいたします。

  • エクセル 関数 文字列を分ける

    23Ar23 28Ar05 3Ta16 8Ta07 11Ta53 14Ta21 …以下多数 のように文字列があって、アルファベット前の数字(1文字か2文字)、アルファベット(2文字)、アルファベット後の数字(2文字)の3つに分割したいのです。データ区切り位置の機能を使えれば簡単ですが、アルファベットの前の文字数が1字と2字のものがあるのでできません。RIGHT、LEFTの関数を使用すれば、アルファベット2文字とアルファベット後の数字2文字は抽出できますが、アルファベット前の数字(1文字か2文字)だけ取り出せません。 関数か何かの方法で文字数を分ける方法を教えてください。

  • エクセルのセル内から数字だけを抽出する方法を教えて下さい

    エクセルのセル内から数字だけを抽出する方法を教えて下さい あるデータの列(備考欄)には様々な文字が入っていて、 その中に●名(●は数字)が入っています その数字だけを取り出して 別の列に移す関数を教えて下さい ※この列には他の数字は入っていません、最大で2ケタです よろしくお願いします

  • 特定の文字や数字だけを抽出

    14H010 14S001 14005 14H001B 14H010B 14005 14S004 1)左から2つだけの数字だけを取り出す方法 2)もし左から二つの数字の隣の文字だけ(HやS)を取り出す方法(2文字の可能性もある) 3)真ん中の3つの数字を取り出す方法(010,001,005) 4)右の文字(B)だけを取り出す方法(2文字の可能性もある) それぞれの方法をIF関数とLEN, RIGHT, LEFT, MID関数の組み合わせを使って抽出できるようなのですが、何時間かけても抽出ができません、、、。 たくさんの質問になりますがお答えいただけると幸いです。