ヘッダー
Visual Basic サンプル集
VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

文字列から数値を抜き出す

2021/11/7

→ C# のサンプルに切り替える

 

文字列から数値を抜き出す

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "747年に納税者とは17歳から65歳までの男性で、1郷につき330人と定められた。" & vbCrLf &
    "正倉院文書の戸籍の断簡を調べると17歳から65歳までの男子の割合は23.58%なので、" & vbCrLf &
    "1郷の人口はおおよそ1399人となる。『和名類聚抄』では全国の郷が4041郷となっているので、" & vbCrLf &
    "奈良時代当時の日本の人口は単純計算で1399人×4041郷で565万人となる。"

Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]+\.?[0-9]*") '"\d+\.?\d*" でもOK

For Each result As System.Text.RegularExpressions.Match In results
    Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

    '↓VB2013以前の場合
    'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:747 開始位置:0
ヒット:17 開始位置:10
ヒット:65 開始位置:15
ヒット:1 開始位置:25
ヒット:330 開始位置:30
ヒット:17 開始位置:59
ヒット:65 開始位置:64
ヒット:23.58 開始位置:76
ヒット:1 開始位置:88
ヒット:1399 開始位置:98
ヒット:4041 開始位置:121
ヒット:1399 開始位置:155
ヒット:4041 開始位置:161
ヒット:565 開始位置:167

メモ:この例では、『数字の連続』または『間に . を1つ含む数字の連続』を抜き出しています。+ - や カンマなどは数値とみなされません。

 

 

文字列から数字 + 次の1文字 を抜き出す

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "747年に納税者とは17歳から65歳までの男性で、1郷につき330人と定められた。" & vbCrLf &
    "正倉院文書の戸籍の断簡を調べると17歳から65歳までの男子の割合は23.58%なので、" & vbCrLf &
    "1郷の人口はおおよそ1399人となる。『和名類聚抄』では全国の郷が4041郷となっているので、" & vbCrLf &
    "奈良時代当時の日本の人口は単純計算で1399人×4041郷で565万人となる。"

Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]+\.?[0-9]*.") '"\d+\.?\d*." でもOK

For Each result As System.Text.RegularExpressions.Match In results
    Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

    '↓VB2013以前の場合
    'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:747年 開始位置:0
ヒット:17歳 開始位置:10
ヒット:65歳 開始位置:15
ヒット:1郷 開始位置:25
ヒット:330人 開始位置:30
ヒット:17歳 開始位置:59
ヒット:65歳 開始位置:64
ヒット:23.58% 開始位置:76
ヒット:1郷 開始位置:88
ヒット:1399人 開始位置:98
ヒット:4041郷 開始位置:121
ヒット:1399人 開始位置:155
ヒット:4041郷 開始位置:161
ヒット:565万 開始位置:167

メモ:この例では、『数字の連続+1文字』または『間に . を1つ含む数字の連続+1文字』を抜き出しています。+ - や カンマなどは数値とみなされません。

 

 

文字列から数字 + 「人」 を抜き出す

VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "747年に納税者とは17歳から65歳までの男性で、1郷につき330人と定められた。" & vbCrLf &
    "正倉院文書の戸籍の断簡を調べると17歳から65歳までの男子の割合は23.58%なので、" & vbCrLf &
    "1郷の人口はおおよそ1399人となる。『和名類聚抄』では全国の郷が4041郷となっているので、" & vbCrLf &
    "奈良時代当時の日本の人口は単純計算で1399人×4041郷で565万人となる。"

Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]+\.?[0-9]*人") '"\d+\.?\d*人" でもOK

For Each result As System.Text.RegularExpressions.Match In results
    Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

    '↓VB2013以前の場合
    'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:330人 開始位置:30
ヒット:1399人 開始位置:98
ヒット:1399人 開始位置:155

メモ:この例では、『数字の連続+人』または『間に . を1つ含む数字の連続+人』を抜き出しています。+ - や カンマなどは数値とみなされません。

 

 

「645年」や「2024年」など 4桁以内の数字 +「年」を抜き出す

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "富士山は864年の貞観大噴火や1707年の宝永大噴火など噴火を繰り返している。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]{1,4}年") '"\d{1,4}年" でもOK

For Each result As System.Text.RegularExpressions.Match In results
    Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

    '↓VB2013以前の場合
    'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:864年 開始位置:4
ヒット:1707年 開始位置:15

 

 

36以上の数値を抜き出す

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "国語80点,英語24点,数学33点,社会38点,理科100点。合計:275点。受験者2532人中1988位。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]+\.?[0-9]*") '"\d+\.?\d*" でもOK

For Each result As System.Text.RegularExpressions.Match In results

    If CDec(result.Value) >= 36 Then
        Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

        '↓VB2013以前の場合
        'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)

    End If
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:80 開始位置:2
ヒット:38 開始位置:20
ヒット:100 開始位置:26
ヒット:275 開始位置:34
ヒット:2532 開始位置:42
ヒット:1988 開始位置:48

メモ:あまりないと思いますが数字の桁数が28桁を超えるとエラーになる場合があります。途中で CDec を使って36以上か判断しているためです。

メモ:文章中に含まれている桁数が事前にわかっている場合は、正規表現だけでも抜き出せます。たとえば、3桁以内の数値しか含まれていないのであれば、"3[6-9]|[4-9][0-9]|[1-9][0-9][0-9]" で 36以上だけ抽出できます。

 

 

35以下の数値を抜き出す

VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

Dim value As String = "国語80点,英語24点,数学33点,社会38点,理科100点。合計:275点。受験者2532人中1988位。"
Dim results = System.Text.RegularExpressions.Regex.Matches(value, "[0-9]+\.?[0-9]*") '"\d+\.?\d*" でもOK

For Each result As System.Text.RegularExpressions.Match In results

    If CDec(result.Value) <= 35 Then
        Debug.WriteLine($"ヒット:{result.Value} 開始位置:{result.Index}")

        '↓VB2013以前の場合
        'Debug.WriteLine("ヒット:" & result.Value & " 開始位置:" & result.Index)

    End If
Next

Debug.WriteLineが表示される場所

これを実行すると次の通りに出力されます。

ヒット:24 開始位置:8
ヒット:33 開始位置:14

メモ:あまりないと思いますが数字の桁数が28桁を超えるとエラーになる場合があります。途中で CDec を使って36以上か判断しているためです。

 


VB6対応 VB6では InStr などを使用します。Microsoft VBScript Regular Expressionsに参照設定をすれば正規表現も使用可能です。