はじめに
文字列の中から、文字と数値を切り分けたり、数値のみを切り分ける方法を考えてみましょう。
ます、Mid関数を使って、先頭から順番に1文字ずつ取り出して、IsNumelic関数で数値かどうかを判断します。
数値に小数点がある場合も考慮してドット(.)も考慮する必要があるでしょう。
数値が始まった、数値が終わった位置を把握するためブーリアン型の変数をフラグとして使います。
数値と文字列を切り出す
まずは、以下のように数値と文字列を切り分けるコードです。

'文字列から数値と文字列を取り出す
Function splitStringNum(str As String) As Variant
Dim i As Long
Dim b As Boolean
Dim temp As String, str2 As String
Dim delimiter As String
Dim arr
delimiter = "," ' 区切り文字
For i = 1 To Len(str)
temp = Mid(str, i, 1)
If IsNumeric(temp) Or temp = "." Or temp = "." Then
If b Then
str2 = str2 & temp
Else
If str2 = "" Then
str2 = temp
Else
str2 = str2 & delimiter & temp
End If
b = True
End If
Else
If b Then
str2 = str2 & delimiter & temp
b = False
Else
str2 = str2 & temp
End If
End If
Next i
splitStringNum = Split(str2, delimiter)
End Function
'実行コード///////////////
Sub testCode()
Dim str As String
Dim arr
Dim i As Long, j As Long
For i = 2 To 6
arr = splitStringNum(Cells(i, "B"))
For j = LBound(arr) To UBound(arr)
Cells(i, j + 3) = arr(j)
Next j
Next i
End Sub
ここでは、splitStringNum関数に文字列を入れると、切り分けた配列を返すようにしています。
この関数では、数値を見つけると区切り文字の変数 delimiter を付加します。ここでは区切り文字をカンマ(,)にしていますが、 文字列にカンマがあると上手く機能しません。その場合は、文字列に出現しない文字を区切り文字に指定してください。
testCode から splitStringNum関数を呼び出しています。
文字列から数値のみ取り出す
上記のコードを利用して、文字列内にある数値のみを取り出すように改造してみます。

'文字列から数値のみ取り出す
Function splitNum(str As String) As Variant
Dim i As Long
Dim b As Boolean
Dim temp As String, str2 As String
Dim delimiter As String
Dim arr
delimiter = "," ' 区切り文字
For i = 1 To Len(str)
temp = Mid(str, i, 1)
If IsNumeric(temp) Or temp = "." Or temp = "." Then
If b Then
str2 = str2 & temp
Else
If str2 = "" Then
str2 = temp
Else
str2 = str2 & delimiter & temp
End If
b = True
End If
Else
If b Then
b = False
End If
End If
Next i
splitNum = Split(str2, delimiter)
End Function
'実行コード//////////////////
Sub testcode2()
Dim str As String
Dim arr
Dim i As Long, j As Long
For i = 2 To 6
arr = splitNum(Cells(i, "B"))
For j = LBound(arr) To UBound(arr)
Cells(i, j + 3) = arr(j)
Next j
Next i
End Sub
文字列を取り出す部分を省略するだけです。
文字列中の数値部分を隠す
今度は文字列中の数値部分を xxx のように変更してみましょう。
'文字列中の数値部分を隠す
Function NumToxxx(str As String) As String
Dim i As Long
Dim b As Boolean
Dim temp As String, str2 As String
Dim delimiter As String
delimiter = "," ' 区切り文字
For i = 1 To Len(str)
temp = Mid(str, i, 1)
If IsNumeric(temp) Or temp = "." Or temp = "." Then
str2 = str2 & "x"
Else
str2 = str2 & temp
If b Then
b = False
End If
End If
Next i
NumToxxx = str2
End Function
'実行コード////////////////////
Sub testcode3()
Dim str As String
Dim arr
Dim i As Long
For i = 2 To 6
Cells(i, "C") = NumToxxx(Cells(i, "B"))
Next i
End Sub
こちらは、配列でなく文字列を出力する形になります。
まとめ
今回は、文字列から文字部分と数値部分を切り分けるプログラムを考えてみましたが、ちょっとした工夫で、数値のみを取り出したり、数値部分を別の文字に切り替えたりできるプログラムが書けます。
何かのお役に立てれば幸いです。
コメント