このままだと、Excelシート関数としての利用になるのでVBA内で操作するには(r As Range) を(r As String)に変更し、引き数(r.Value)を(r)に変更すると、そのままVBAモジュールとして使える。myNO1をこのままシート関数として使うとなら、名前を変えて登録する。私の場合はシート関数ではほぼ使用しないので、このまま myNO1 を変更して使っているが、今回はブログの説明上ややこしくなるので、モジュール名を変えて登録する。
Function myNo1(r As Range)
Dim myStr As String
Dim myN As String
Dim i As Long
For i = 1 To Len(r.Value)
myStr = Mid(r.Value, i, 1)
If myStr Like "[0-9]" Then
myN = myN & myStr
End If
Next i
If IsNumeric(myN) Then
myNo1 = myN * 1
Else
myNo1 = ""
End If
End Function
「myNo1」を変更しExcelVBAモジュールで利用可能にする
Function Numabs(r As String)
Dim myStr As String
Dim myN As String
Dim i As Integer
For i = 1 To Len(r)
myStr = Mid(r, i, 1)
If myStr Like "[0-9]" Then
myN = myN & myStr
End If
Next i
If IsNumeric(myN) Then
Numabs = myN * 1
Else
Numabs = ""
End If
End Function
(r.Value)のままではエラーで動かないので3点を変更する
Function myNo1(r As Range)→Function Numabs(r As String)
Len(r.Value)→Len(r)
Mid(r.Value, i, 1) → Mid(r, i, 1)
テスト表示SUBモジュールを作る
Sub test_numabs()
MsgBox Numabs("20191228阪神test1")
End Sub
表示結果は”201912281”となる。
実際の使用例(一部抜粋のため、このままでは動きません)
'出走頭数
wk_nm1 = Sheets("HEAD").Cells(RET, 6)
'Sheets("表RH").Cells(i + 1, 11) = trim(wk_nm1)
If Len(wk_nm1) > 0 Then
wk_nm2 = Numabs(wk_nm1)
Sheets("表RH").Cells(i + 1, 11) = wk_nm2
End If
'WIN5
wk_nm1 = Sheets("HEAD").Cells(RET, 8)
'Sheets("表RH").Cells(i + 1, 12) = trim(wk_nm1)
If Len(wk_nm1) > 0 Then
wk_nm2 = Numabs(wk_nm1)
Sheets("表RH").Cells(i + 1, 12) = wk_nm2
End If
'---続く