セルから文字列だけを抽出
マクロ講座66回
文字と数値が混在している文字列中から文字列だけを取り出します。
ユーザー定義関数 Excel 2013 マクロ講座 66回
文字列から数値以外の文字を抽出
前回は、数値と文字が同一セルの中に混在して困っているケースでした。そこで数値を取り出すユーザー定義関数を作成しました。
今回は、逆のケースです。邪魔な数値を除外して文字列だけを取り出したいというわけで、文字列だけ取り出すユーザー定義関数を作りましょう。
(サンプルファイルは、こちらから マクロ66回サンプルデータ)
文字列だけ取り出すユーザー定義関数
以下のような文字列と数値が混在しているセルから文字列だけを抽出したいわけです。
ユーザー定義関数を作ると、指定したセルから文字列だけを取り出すことができます。
前回作った「数値だけを取り出すユーザー定義関数」をそのまま応用して文字列を取り出すユーザー定義関数に仕立てます。
下記のコードにおいて、もし数値ならば~しろの部分をもし文字ならば~しろと変更すればいいですね。
下記のコードにおいて、もし数値ならば~しろの部分をもし文字ならば~しろと変更すればいいですね。
Len関数で文字列の文字数を取得する
もちろん、プロシージャ名や、変数の数値は変更します。
下記は前回の解説付のコードです。
下記は前回の解説付のコードです。
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
IsNumeric 関数で数値でなければを条件にする
ExcelVBAでIsNumericがあるなら、IsStringなどがありそうですが、実際のところIsStringはありません。
じゃあ、どうすればいいかといえば、
じゃあ、どうすればいいかといえば、
If IsNumeric(Mid(範囲, i, 1)) Then '数値ならばを= Falseをコードに加えて
If IsNumeric(Mid(範囲, i, 1)) = False Then '文字ならばに変えましょう。
あとプロシージャ名Getcelltextに、変数として文字をString型で指定します。
Function Getcelltext(範囲 As String) As String Dim 文字 As String 'セルに含まれる文字をString型の変数に Dim i As Integer '文字列の1つ1つの順番 For i = 1 To Len(範囲) '文字数分繰り返す If IsNumeric(Mid(範囲, i, 1)) = False Then '文字ならば 文字 = 文字 & Mid(範囲, i, 1) '変数の文字に文字を追加する End If Next i Getcelltext = 文字 End Functionこのユーザー定義関数を使うと、 文字と数字が混在しているセルから文字だけを抽出できます。