- ベストアンサー
文字列から数値を抽出したいのですが・・。
文字列から数値(integer型)を抽出したいのですが、うまくいきません。 val関数だと文字の途中の数値が判別できないし、困っています。 よろしくお願いします。 ※以下、文字列と数値の関係です。 ・"文字列" → 抽出したい数値 "0k,abc,5k,abc3.0" → 0530 "abc()_3t" → 3
- shishsi
- お礼率36% (11/30)
- Visual Basic
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
「プロジェクト」-「参照の追加」-「COM」で Microsoft VBScript Regular Expressions 5.5 を選択してOK。 コマンドボタン3での実行できたコード。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim re As New VBScript_RegExp_55.RegExp Dim matchs As VBScript_RegExp_55.MatchCollection Dim matchstr As VBScript_RegExp_55.Match 'Dim submatch As VBScript_RegExp_55.SubMatches Dim v() As String, x() As String Dim i As Integer ReDim v(0 To 4), x(0 To 4) v(0) = "abc012()_001t" v(1) = "abc3()_2t" v(2) = "abc5()_3t" v(3) = "abc6()_4t" v(4) = "abc7()_5t" re.Pattern = "\D*(\d+)\D*" re.Global = True For i = 0 To UBound(v) If re.Test(v(i)) = True Then matchs = re.Execute(v(i)) For Each matchstr In matchs x(i) = x(i) & matchstr.SubMatches.Item(0) Next Debug.Print(v(i) & " " & x(i)) End If Next End Sub 初めの宣言方法も違うようですね。 > ReDim v(0 To 4), x(0 To 4) 配列は0からのようです。 (なんせ2005は初めたばかりで。ExcelVBAならよくやってますけど) ご参考になれば。
その他の回答 (4)
- n-jun
- ベストアンサー率33% (959/2873)
VB6.0で参考URLの参照設定を行なった後で、 コマンドボタンを押すとイミディエイトウィンドウに書き出してる サンプルです。 Private Sub Command1_Click() Dim re As New RegExp Dim matchs As MatchCollection Dim matchstr As Match Dim submatch As SubMatches Dim v() As String, x() As String Dim i As Integer ReDim v(1 To 5), x(1 To 5) v(1) = "abc012()_001t" v(2) = "abc3()_2t" v(3) = "abc5()_3t" v(4) = "abc6()_4t" v(5) = "abc7()_5t" re.Pattern = "\D*(\d+)\D*" re.Global = True For i = 1 To UBound(v) If re.Test(v(i)) = True Then Set matchs = re.Execute(v(i)) For Each matchstr In matchs Set submatch = matchstr.SubMatches x(i) = x(i) & submatch.Item(0) Next Debug.Print v(i), x(i) End If Next End Sub ご参考になれば。
補足
回答ありがとうございます。 しかし、実はVB2005を扱っているんです。 なので、いただいたプログラムが正しく動きませんでした。 VB2005で実行するとするとどうプログラムすればよいのでしょうか? 何度もすみません。。。
- n-jun
- ベストアンサー率33% (959/2873)
>しかし、実は僕はまだVB初心者なためか ところでVBとは、VB6.0?VB.NET(2002~2008)?或いはVBA? のどれでしょう?
- n-jun
- ベストアンサー率33% (959/2873)
ところで数値だとすると、 >"0k,abc,5k,abc3.0" → 0530 この場合は530になってしまいますが。 数字(文字列)の事ですか?
補足
数値だと、0530は530になってしまうんですね。誤算でした。 ご指摘ありがとうございます。 ちなみに僕が何でこんなことをしているのか簡単に説明しますと・・ 実は今ソートのプログラムを作っているのですが、2種類のソートの仕方を実行しないといけなくて、その前処理として抽出プログラムを作ろうとしているんです。 (1)単に数値で昇順に並び替える "abc()_3t" → 3 "abc()_5t" → 5 "abc()_2t" → 2 "abc()_1t" → 1 を、抽出した数値をもとに以下のように並び替える。 "abc()_1t" "abc()_2t" "abc()_3t" "abc()_5t" (2)0k..5k→5k..0k→0k..5k→5k..0k、のように連続する項の終わりの数値と最初の数値をくっつけるように並び替え。(abc3.0は無視するようにする。) "0k,abc,5k,abc3.0" → 05 "0k,abc,5k,abc3.0" → 05 "5k,abc,0k,abc3.0" → 50 "5k,abc,0k,abc3.0" → 50 を、抽出した”数?”をもとに以下のように並び替える。 "0k,abc,5k,abc3.0" "5k,abc,0k,abc3.0" "0k,abc,5k,abc3.0" "5k,abc,0k,abc3.0"
- n-jun
- ベストアンサー率33% (959/2873)
[VBA] 正規表現オブジェクトの使い方 http://arrow3.way-nifty.com/shige/2006/07/vba__fc44.html 等々 正規表現を使用されてみては如何でしょうか?
補足
回答、ありがとうございます。 しかし、実は僕はまだVB初心者なためか、参照ページを理解しきれませんでした。 お時間がありましたら、具体的に参考プログラム等、ヒントをいただけませんか?
関連するQ&A
- カンマの含まれる文字列の数値変換方法について
VB.NETでプログラミングしています。 String型の文字列を Double型の数値に変換するときに 一般的にはVal関数を使いますが、 カンマが含まれる文字列"111,111"を 数値変換したい場合には単純にVal関数を 使用しただけではうまくいかないようです。 上の例で数値変換すると"111"になってしまうようです。 そこで質問なのですが、 何か簡単にできるうまい方法はないでしょうか? 関数があればご教示ください。 以下、Val関数の説明の抜粋です。 解説 文字列中に数字以外の文字が見つかると、Val 関数は読み込みを中止します。円記号 (\) やカンマ (,) など、通常は数値の一部と見なされる記号や文字も、Val 関数は数値として解釈しません。
- ベストアンサー
- Visual Basic
- Excelで文字列を抽出したい。
Excelで文字列を抽出したい。 Excelで商品コード一覧を作成しました。 商品コード ABC230 DE120 ABC333 XU203 の様にアルファベット+数値で構成されています。 このアルファベットの部分のみを抜き出したいと考えています。 アルファベットの文字数はバラバラです。 何か便利な関数などありましたら、アドバイスよろしくお願いいたします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 2つの文字列にある数値(言葉)の共通項を抽出する関数はありますか?
2つの文字列にある数値(言葉)の共通項を抽出する関数はありますか? 例えば2つの住所録でダブる住所を抽出する、というような関数はありますか? あるとしたらどう使えばいいでしょうか?
- ベストアンサー
- Windows XP
- 文字列→数値変換関数
・数字文字列を数値化する関数AtoS()を制作する。 書式:short AtoS(char *pStr, int *pRetCode); 引数:char *pStr; 文字列の先頭アドレス int *pRetCode; 動作の正否を返す 戻り値:pStrを数値化した値 処理: pStrで与えられた文字列をshort型に変換する。 呼び出し側の書式は以下の通りです。 void main(void) { short val; int code; val = AtoS("1234", & code); printf("%d\n",val); val = AtoS("-789", & code); printf("%d\n", val); } です。専門学校の明日の朝までの課題なのでどうか、どなたか助けて下さい。
- ベストアンサー
- C・C++・C#
- C#で文字列を数値に変換する方法
Visual Stdio .NET 2003を使っています。 C#で文字列(数字)を数値に変換したいのですが、 VBでいうVal関数のような物はありますか?例えば、 double a; a = Val("3.14"); とすると、aに3.14が入るような関数を使いたいです。 検索したのですが、見つかりませんでした。宜しくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- EXCELで文字列の中から特定の数値を取り出したい
教えてください。EXCELの関数で例えばA列に "www.abc.jp/1/a/1.html" "www.abc.jp/11/a/23.html" "www.abc.jp/110/a/24.html" "www.abc.jp/121/a/122.html" という文字列が合った場合.htmlの直前の数値だけ取り出したい場合どのような関数を使いますか? (数値の桁数は固定ではありません。)
- ベストアンサー
- オフィス系ソフト
- EXCEL セル内の特定の数値のみを抽出したい (関数だけで)
セル内に数値・文字列を両方含む列があります。 数値(1) 文字列(1) 数値(2) 文字列(2) 【例】 11213234 AIUEO 21213 ABC 42321243 KAKIKUKEKO 32480 CBAAA 59343124 SA 85727 BBAC 数値(1)の桁数は同一 文字列(1)の文字数は変動 数値(2)の桁数は同一(だが、文字列(1)が変動のため、スタート位置はことなってくる) 文字列(2)の文字数も変動 ここから「数値(2)のみ」を関数で抽出したいのですが、どのようにすればよいのでしょうか? ご教授よろしくお願いいたします!!
- 締切済み
- オフィス系ソフト
- 文字列の数値変換(それだけなのですが・・・)
ファイルに角度とCOSとSINのデータが入っていて、 それぞれ360個あります。 この時、SINとCOSのデータを文字列でINPUTしてBASICの中で数値化(VAL関数で)したいのですが、全部0になってしまいます。倍精度(#)、単精度(!)共に試しましたが 駄目でした。 どなたか解決策を教えて下さい。(データは小数点以下6から7)
- ベストアンサー
- Visual Basic
- エクセルで同じ列の中から同じ数値を抽出
エクセルに一つの列にランダムに数値が入力されています。 その中には、同じ数値が入っている場合があります。 同じ数値というのは、何種類もあります。 その同じ数値だけを抽出したいのですが、抽出出来る関数か何かありますでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
お礼が遅れてすみません。 わざわざ、実行までして確かめてくれたんですね。。申し訳ないです。。 とても助かりました!ありがとうございます!!