"文字列 数値 分割 vba" でググると、似たような回答が得られるかと存じますが、面白そうですので、ユーザー定義関数 を書いてみました(ただし、Excel 2003 です)。
A1:
=VALUE(cutoutnum($E1,COLUMN(A1)))
と入力し、これを B1:C1 に オートフィル します。
[標準モジュール]
Function cutoutnum(myStr As String, myIdx As Double) As String
Dim myStart As Long
Dim myMidStr As String
Dim myResStr As String
For myStart = 1 To Len(myStr)
myMidStr = Mid(myStr, myStart, 1)
If Not IsNumeric(myMidStr) Then
myMidStr = " "
End If
myResStr = myResStr & myMidStr
Next
cutoutnum = Application.WorksheetFunction.Trim(myResStr)
cutoutnum = Split(" " & cutoutnum)(myIdx)
End Function
>12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして・・・
この場合は、
For myStart = 1 To Len(myStr)
の前に
myStr = Replace(myStr, ",", "")
を挿入してください。
同様に小数点が付いているような場合もあろうかと存じますが、その場合は、
If Not IsNumeric(myMidStr) Then
を
If myMidStr <> "." And Not IsNumeric(myMidStr) Then
に置き換え、更に、
cutoutnum = Application.WorksheetFunction.Trim(myResStr)
の前に、下記2行を挿入してください。
myResStr = Replace(myResStr, " .", "")
myResStr = Replace(myResStr, ". ", "")
以上により、「カンマ」及び「小数点」の2つの問題を両方とも回避する場合は、下記のようなことになります。
Function cutoutnum(myStr As String, myIdx As Double) As String
Dim myStart As Long
Dim myMidStr As String
Dim myResStr As String
myStr = Replace(myStr, ",", "")
For myStart = 1 To Len(myStr)
myMidStr = Mid(myStr, myStart, 1)
If myMidStr <> "." And Not IsNumeric(myMidStr) Then
myMidStr = " "
End If
myResStr = myResStr & myMidStr
Next
myResStr = Replace(myResStr, " .", "")
myResStr = Replace(myResStr, ". ", "")
cutoutnum = Application.WorksheetFunction.Trim(myResStr)
cutoutnum = Split(" " & cutoutnum)(myIdx)
End Function
お礼
早速意見ありがとうございます。 早速こちらのほうで検証してみます!
補足
すみません今入力してみたのですが、 12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして同じく A1に12345と表示させたいのですが、 ご教授お願い出来ませんでしょうか? お手数ではありますが、よろしくお願い致します。