アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記の条件の元 数字のみを抽出するマクロは分かったのですが、少数点を含めるとうまく抽出できません
小数点を含む数字を抽出する方法をご教授願えませんでしょうか

条件
B11-B15セルに下記のように記載がある

±3.0%
±1.5%
±8.0%
±4.5%
±4.0%

これをD11-D15セルに小数点を含む数字だけを抽出したい


数値抽出マクロ

Sub Sample1()
Dim i As Long, k As Long, myStr As String
For i = 11 To 15 '//←11行目~15行目まで//
For k = 1 To Len(Cells(i, "B"))
If Mid(StrConv(Cells(i, "B"), vbNarrow), k, 1) Like "[0-9]" Then
myStr = myStr & Mid(Cells(i, "B"), k, 1)
Else
Exit For
End If
Next k
Cells(i, "D") = myStr
myStr = ""
Next i
End Sub

質問者からの補足コメント

  • 数値による表示形式です

      補足日時:2017/10/11 09:17

A 回答 (4件)

あなたが提供されたマクロを修正するとかなり手をいれることになりましたので、作り直しました。


以下のマクロを標準モジュールに登録してください。
Option Explicit
Sub Sample1()
Dim row As Long
Dim i As Long
Dim str As String
Dim ostr As String
Dim RE As Object
Dim match
Dim ptn As String
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "\d+\.\d+"
For row = 11 To 15
str = Cells(row, "B").Text
Set match = RE.Execute(str)
If match.Count > 0 Then
Cells(row, "D").Value = match(0)
End If
Next
End Sub
「エクセル VBA 小数点を含む数字抽出に」の回答画像4
    • good
    • 0
この回答へのお礼

対応出来ました ありがとうございます

お礼日時:2017/10/11 12:13

こんにちは。



元のコードは、ここの回答者のものですね。
>数値による表示形式です
そうなのですか?±記号は、書式で入れているという意味になりますが。

修正点
「.」を0-9の後に入れる
If Mid(StrConv(Cells(i, "B"), vbNarrow), k, 1) Like "[0-9.]" Then

この2行を取る
Else
Exit For

それで当面、それでよいような気がします。
欲を言えば、Cells(i, "B") →Cells(i, "B").Text にした方が安心できそうです。
他のコードにも興味があれば、しばらく開けておいてください。
    • good
    • 1

> B11-B15セルに下記のように記載がある


そのデータは文字列ですか?
それとも数値に対して表示形式で表現しているのですか?
    • good
    • 0

そのマクロがどのようにして動いているのかを理解されていないという事ですか。


セルに入力されている文字の先頭から、0から9までの連続した文字を拾ってそれを「数値」としているのです。
小数点(ピリオド)は含まれていませんよね。

…ここまで説明すれば自身で手直しできると思います。
頑張ってください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A