• ベストアンサー

テキストデータの中の数字列を抽出したい

宜しくお願い致します。 テキストデータで漢字やひらがな かたかな 数字の混在している文章から 数字だけ 拾い出したいときに つかうVBAの関数のようなものは あるのでしょうか 例えば5桁の数字のみ 抽出したいなど 喩えば 文章中に 1145 123 11456 116699 14523 他漢字かな混じり文が あるとしまして 5桁の11456 と 14523のみ 見つけ出して 表示する方法は 御座いますか

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

  • ベストアンサー
  • szkatnr
  • ベストアンサー率75% (3/4)
回答No.4

#1です。 先に投稿した関数の補足ですが、 私には、質問文からは、Excel なのか Access なのか、または Word のVBAなのかとかは判断がつきませんでしたので、 単に、「文字列から指定桁の数値のみ抜き出して返す」関数です。 (質問文の「見つけ出して表示する」という表現ではよく分からないので、 とりあえず、見つけ出した数値をすべてカンマ区切りにした文字列を返すことにしました) なので、例えば検索文字列(第1引数)を「wtあ1234あい亜阿12345お6789」、桁数(第2引数)を「4」と指定した場合、「1234,6789」が返り、 桁数を「5」にすると「12345」が返るというだけのものです。 以上、補足でした。

sushidokei
質問者

お礼

ありがとうございます 当初の お聞きしたいことが すべて満たされて おります 質問の表現が 曖昧で ご迷惑お掛けしました

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

ちょっとインチキな関数 以下は文字列中にある全ての数字列を配列で返す関数です。 Function GetNumericArray(ByVal Text) Dim Script Dim RegExp Dim Temp As String '==Scriptオブジェクトを作成する Set Script = CreateObject("ScriptControl") Script.Language = "VBScript" '==正規表現オブジェクトを生成する Set RegExp = Script.Eval("new RegExp") '==前方と後方の非数字を除去する RegExp.Global = True '★全体にパターン検索することを指定 RegExp.Pattern = "^\D+|\D+$" '前方に連続する非数字 or 後方に連続する非数字 Temp = RegExp.Replace(Text, "") '空文字列に置き換える '==途中の非数字をカンマにする RegExp.Pattern = "\D+" '連続する非数字 Temp = RegExp.Replace(Temp, ",") '==カンマで区切って配列にする GetNumericArray = Split(Temp, ",") End Function '===使用例 Dim X, Y X = GetNumericArray("今日は2008年(平成20年)4月21日です") For Each Y In X   Debug.Print Y Next 戻り値は文字型データの配列になっています。この中から桁数や数値範囲などで、目的のものを見つけます。 話は変わりますが、正規表現をScriptControlを使わずに求める方法を知っている人がいたら、是非そのやり方を教えてほしいものです。

sushidokei
質問者

お礼

詳しいご解説 誠に 有り難うございました。 今後とも 宜しくお願い致します。

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

質問は#2のご回答のような内容ではないと思う。 質問の書き方が悪いからそういうことにもなる。 ーー 数字・漢字・かなの混じった文字列がセル(A列でよいのかな、複数列かな)にある。 数字だけ、数字の固まりだけ、抜き出すVBの関数はない。 1文字が数字かどうかの判別は出来ても、 (A)文字コードを判別 (B)IsNumeric関数利用 など 「数字の連なり(切れ目)」は自分で割り出すロジックを生みださないといけない。 >5桁の11456 と 14523のみ 見つけ出して  ここが紛らわしい表現だ。 5桁の数字のものを書き出したいではないの。 11456と例で修飾をつけるから、指定した数字列だけ出せばよいのと思っちゃう。 もしそれなら存在するセルの番地等が必要(求めるもの)になるでしょう。

sushidokei
質問者

お礼

ご指摘の通りで 御座います 質問の表現が 曖昧で 諸氏先生方には ご迷惑お掛けしました

noname#62128
noname#62128
回答No.2

instr が使えると思います。 ある文字列 (string1) の中から指定した文字列 (string2) を検索し、最初に見つかった文字位置 (先頭からその位置までの文字数) を返す文字列処理関数です。 例えばBunという文字列の中に14523が在るかどうか調べるには InStr(Bun, "14523") となります。もし、在ればその位置がこの関数の値になります。

sushidokei
質問者

お礼

ありがとうございます 質問の表現が 曖昧で すみません このたびの貴殿の 御回答も 学習させて 頂きます

  • szkatnr
  • ベストアンサー率75% (3/4)
回答No.1

そのような組込関数はありませんので、自分で関数を作るしかありません。 一文字づつ見ていけばいいと思います。 以下、例です。 何を返せばいいのか不明(数値の配列?、文字列?)なので、文字列(数値をカンマ区切り)を返す関数を考えてみました。 Private Function searchExNum(strSearch As String, nNumLen As Integer) As String Dim nLen As Long Dim n As Long Dim i As Integer Dim sss As String Dim s As String Dim sRet As String searchExNum = "" If nNumLen < 0 Then Exit Function sss = strSearch & "a" nLen = Len(sss) i = 0 n = 1 Do While n <= nLen s = Mid(sss, n, 1) If IsNumeric(s) Then i = i + 1 Else If i = nNumLen Then If Len(sRet) > 0 Then sRet = sRet & "," 'カンマで区切ることに sRet = sRet & Mid(sss, n - nNumLen, nNumLen) End If i = 0 End If n = n + 1 Loop searchExNum = sRet End Function ※この関数の呼び出し例(第2引数の「5」は桁数の指定です) MsgBox searchExNum("erq23aefawefae333334df33345faf56789", 5)

sushidokei
質問者

お礼

詳細な ご回答 有り難うございました。 活用させて頂きます

関連するQ&A

  • エクセルでの漢字、カタカナ、ひらがななどの抽出について

    2万件の顧客データのデータクリーニングをしています。 1セルに漢字やカタカナ、ひらがなが混在する場合、それぞれの抽出、 もしくはあるかないかがわかる方法はありますか?教えてください。

  • ACCESS2010テキストボックス値を抽出条件に

    ACCESS2010にて、フォームに作ったテキストボックスの入力値(数字3桁)をクエリの抽出条件にしたいと考えています。 ただ、そのテキストボックスの数が30個の為、クエリデザイン画面の抽出条件欄にorを用いた条件式で設定することが出来ませんでした。(文字数上限超?) そこで、VBAを用いて抽出条件を設定しようと考えているのですが、初心者のため全く勝手が分かりません。VBAでの設定方法やVBA以外での抽出方法があれば教えて頂けないでしょうか。 尚、テキストボックスには商品コード(数字3桁)を入力し、売上データを集計したクエリにおいて、フォームのテキストボックスに入力された複数の商品コードを抽出条件に設定したいと考えております。 以上、どうかお願い致します。

  • エクセルの文字列を抽出する関数を教えてください!

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

  • エクセル VBA セル内の文字検索について

    XP microsoft visual basic 6.0 です A1からA10に書かれた文章(平仮名、カタカナ、漢字、数字、記号、含む)の中に 0から始まる半角8桁の数字があれば 取り出し B列に書き出す VBAを用いてこのようなことは可能でしょうか ※8桁の数字は文章内の何文字目にあるか決まっていない ※文章内に0から始まる8桁の数字が複数あることはない、が、0から始まり記号を含む8桁の文字列はある ご教授ください

  • 文字列から英数字のみを抽出する関数

    文字列から英数字のみを抽出する関数を教えていただきたいです。 セルの文字列にはひらがな、カタカナ、数字、アルファベット、記号等を含みます。 色々調べてはみたのですが、数字のみを抽出する関数の説明はたくさんありますが、 アルファベットも含むとなると見つかりませんでした。 数字0~9とアルファベット27個の計37個の文字なので、どうにか関数でできると思うのですが。 具体的には下記のようにしたいのです。 ●A列 今日iPhone5をauで購入 最新のNEWSを15時~PCで見る  Moonshotを生み出す「Google X」 ●B列にこう表示したいのです。 iPhone5au NEWS15PC MoonshotGoogleX スペースは残ったままでも結構です。 詳しい方、どうかよろしくお願いいたします。

  • まるで手書きで「くせ」情報の抽出が出来ない

    まるで手書きの設定で、「くせ」情報の抽出には、平仮名、カタカナ、漢字の総数が150文字以上必要になります。と表示されそこから先に動かない、この中のモデル文章を手書きしてスキャンしたのに何故だ、文中のひらがなを一部カタカナに変えてみたが同じ事で動かない・・欠陥商品だ

  • 数字の桁ごとに、各セルに抽出

    最大11桁の数字を各セルに抽出したい。 金額をF列に入力すると、 D列には下3桁が表示され、 C列には右から6桁~4桁、 B列には右から9桁~7桁、 A列には右から11桁~10桁と、 表示されるように、関数を組みたいです。

  • 数字の抽出

    エクセル初心者です。会社のデータ内から数字を抽出し、ひとつのコードを作成しなくてはいけません。 1つのセルに数字が1つ、それが横に5つあります。 一番左の数字を頭において、その後にゼロをいれ三桁のコードを作りたいのです。 (例)1 3 0 0 0  → 103    1 0 0 4 0  → 104    1 1 1 0 0  → 111    1 0 0 0 5  → 105 質問がわかりづらいかもしれませんが、お分かりになる方教えていただけないでしょうか?   

  • エクセルでセル内の数値の取得

    エクセル2010です。 A列に文字列と数字の混在データがあります。 たとえばA1~A3に 東京123 大阪22 つくば564 などのデータがあります。 これらの文字列のうち、漢字やかなではない数字を取得したいのです。 漢字やかなの文字数が一定ではないので困っています。 関数でもVBAでもOKです。 ご教示ください

  • アクセスのクエリでTXT形式の数字を数字としてクエリで抽出

    123 とテキスト形式のテーブルデータを クエリで 数字として抽出したい 関数及び クエリの作成方法を教えて下さい

専門家に質問してみよう