どんなプログラムも先ずはググる!イチから作るのは最終手段!
今回表題の【Excel】文字列から数値を取り出すエクセルマクロサンプル は、
こちらのサイトからFunction myNo1(r As Range)をコピペして変更利用する。
Function myNo1(r As Range) をコピペ
このままだと、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
'---続く
※このように同じパターンで数値を取り出し格納していくので、利用頻度は高い。

編集後記
プログラム作成手順
プログラムを作る場合は、先人の知恵を拝借しよう~♡
間違っても一から作るなんてことをしない方が良い。先ずはググるんですよ!
この場合、自分で一から作るモノよりも確実にちゃんと動く。
たまに過去すぎて今のリビジョン、バージョンで動かない!ってこともあるが
それでも多少の修正で動作はするようになる。
既に筆者がテスト済みなモノを記事アップしているので、そりゃほぼ動くんだって🌞
その代わり自己責任での運用だから、あまりに知らない命令群ばかり!って時は
更に一つ一つ命令をググってある程度お動きを理解しながら動かすしかないけどねw
「よねさん」ありがとう~💗~私は、弱小ブロガーなんで届きはしないだろうが、書いておこう~♪
それでは、またね~😎