2

いくつかの数字やその他の無関係な文字を含むセルがたくさんあります。たとえば、セルは次のようになり65fます11,345asd

私の目標は、これらのセル内の数値以外をすべて削除することです。これにより、これらの数値をさらに計算に使用できるようになります。さまざまなサイトで同様の質問をたくさん見つけましたが、それらは非常に具体的であり、適切に行う方法がまだわかりません.

問題は、変更セルを使用する方法、または内容に応じてセルの範囲を使用する方法です。文字列関数Replaceを使用してそれを行う方法がいくつかあります。しかし、良さそうなものは何もありません。

ありがとう!

4

2 に答える 2

9

RegExp を使用する別の方法

参照の追加

Microsoft VBScript 正規表現 5.5への参照を追加します。下の画像を参照してください

ここに画像の説明を入力

コード:これをモジュールに貼り付けます

Option Explicit

Function GetNumbers(rng As Range) As Variant
    Dim StrSample As String
    Dim myRegExp As RegExp
    Dim myMatches As MatchCollection
    Dim myMatch As Match

    StrSample = rng.Value

    Set myRegExp = New RegExp

    With myRegExp
        .Pattern = "[^0-9]"
        .IgnoreCase = True
        .Global = True
    End With

    Set myMatches = myRegExp.Execute(StrSample)

    For Each myMatch In myMatches
      Debug.Print myMatch.Value
      StrSample = Replace(StrSample, myMatch.Value, "")
    Next
    GetNumbers = StrSample
End Function

スクリーンショット:

ここに画像の説明を入力

編集

これは、ループをまったく使用しない短いバージョンです。

Function GetNumbers(rng As Range) As Variant
    Dim myRegExp As RegExp
    Set myRegExp = New RegExp
    myRegExp.Pattern = "[^0-9]"
    myRegExp.Global = True
    GetNumbers = myRegExp.Replace(rng.Value, "")
End Function
于 2012-09-21T10:33:55.923 に答える
3

ちょっとした機能

public function TONUM(str As string) As string
dim i As long
for i = 1 To len(str)
    if not mid$(str, i, 1) Like "[0-9]" then mid$(str, i, 1) = "?"
next
TONUM = replace$(str, "?", "")
end function
于 2012-09-21T10:39:56.867 に答える