1

次の形状の文字列があります。

RRP 90 AVE DE GAULLE 92800 PUTEAUX 0109781431-0149012126

数字は、ハイフン以外の文字 (スペースなど) で区切られている場合があります。後で len() を使用してそれらを区別する方法を知っています。

len() でそれらを識別して使用できるように、数値のすべての文字列を個別に (たとえば、配列に) 格納する必要があります。

文字列から文字を取り除く 方法を見つけました: 文字列から数字を見つけるには?

しかし、それは私の問題に合わない...

そのために役立つ関数またはコードを教えていただけますか?

4

5 に答える 5

2

これは、ループよりもはるかに高速に実行されます

Public Function NumericOnly(s As String) As String
    Dim s2 As String
    Dim replace_hyphen As String
    replace_hyphen = " "
    Static re As RegExp
    If re Is Nothing Then Set re = New RegExp
    re.IgnoreCase = True
    re.Global = True
    re.Pattern = "[^0-9 -]" 'includes space, if you want to exclude space "[^0-9]"
    s2 = re.Replace(s, vbNullString)
    re.Pattern = "[^0-9 ]"
    NumericOnly = re.Replace(s2, replace_hyphen)
End Function
于 2013-03-12T19:48:54.553 に答える
1

以下のコードを試してください:

Function parseNum(strSearch As String) As String

   ' Dim strSearch As String
    'strSearch = "RRP 90 AVE DE GAULLE 92800 PUTEAUX 0109781431-0149012126"

    Dim i As Integer, tempVal As String
    For i = 1 To Len(strSearch)
        If IsNumeric(Mid(strSearch, i, 1)) Then
            tempVal = tempVal + Mid(strSearch, i, 1)
        End If
    Next

    parseNum = tempVal
End Function
于 2013-03-12T19:11:36.047 に答える
0

だから、これはずっと前のことだと思います...しかし、オンラインで同様のソリューションを探していました。

私のプログラミング スキルの以前の履歴 (原文のまま): 私は Python から始めました。Python には という便利なツールがありListます。VBA にはこれがないので、残っているのは、sample以下で呼び出した変数に入力できるもの、つまりsample = [1,4,5].

小さなコードに戻ります。holderあなたが指定した方法でグループ化する必要があるため、数字のグループのみを含むようにしました。

Dim count, count1 As Integer
Dim holder As String
Dim sample, smallSample As String


count = 0
count1 = 1
sample = "1ab33 efa 123 adfije-23423 123124-23423"
holder = ""
Do While count <> Len(sample)
    smallSample = Left(sample, 1)
    If smallSample = "0" Or smallSample = "1" Or smallSample = "2" Or smallSample = "3" Or smallSample = "4" Or smallSample = "5" Or smallSample = "6" Or smallSample = "7" Or smallSample = "8" Or smallSample = "9" Then
        holder = holder & smallSample
    Else
        If holder <> "" Then
            Cells(count1,1) = holder
            count1 = count1 + 1
        End If
        holder = ""
    End If
    sample = Right(sample, Len(sample) - 1)

Loop

私が得た出力は

1

33

123

23423

123124

コードを実行した後。

于 2014-07-24T23:34:57.027 に答える