
エクセルマクロ講座入門編21回
数値と文字が混在している文字列から文字列だけを取り出すマクロ、文字や記号や数値が混在する文字列から文字だけを取り出すにはどうするか。
【コンテンツ】
1.複雑な文字列から文字だけ取り出す
2.リメイク、どこを変更するか?
3.対象セルから、選択範囲から取り出す
4.ユーザー定義関数の活用、スマートな使い道
前回作成した 「B 3セルから数値だけを取り出す」というマクロのコードはこちらになります。

もし数値ならばのこのコードの部分、こちらを文字ならばというふうに解釈できるように変えます

Public Sub B3セルから文字だけ抽出()
Dim 文字 As String, i As Long
Dim Target As String
Target = Cells(3, 2).Value
For i = 1 To Len(Target) '文字数分繰り返す
If IsNumeric(Mid(Target, i, 1)) = False Then '数値でないならば
文字 = 文字 & Mid(Target, i, 1) '変数数値に文字を追加する
End If
Next i
Cells(3, 3).Value = 文字
End Sub
If IsNumeric(Mid(Target, i, 1)) = False
としたので、数値でないならば=文字ならばの意味になります。

また変数も数値 as string から文字 as string に変更して、数値の部分を文字という変数に置き換えます。

マクロを実行した状態です。

このコードを元に、 function プロシージャを作成します。

引数に範囲を指定して、次のように書き換えました。

Public Function GetCellString(範囲 As Range)
Dim 文字 As String, i As Long
Dim Target As String
Target = 範囲.Value
For i = 1 To Len(Target) '文字数分繰り返す
If IsNumeric(Mid(Target, i, 1)) = False Then '数値でないならば
文字 = 文字 & Mid(Target, i, 1) '変数文字に文字を追加する
End If
Next i
GetCellString = 文字
End Function
数値を取り出す関数は、このようなコードです。
Function Getcellfig(範囲 As String) As Long
Dim 数値 As Long 'セルに含まれる数値をLong型の変数に
Dim i As Integer '文字列の1つ1つの順番
For i = 1 To Len(範囲) '文字数分繰り返す
If IsNumeric(Mid(範囲, i, 1)) Then '数値ならば
数値 = 数値 & Mid(範囲, i, 1) '変数数値に数値を追加する
End If
Next i
Getcellfig = 数値
End Function