セルから文字列だけを抽出

マクロ講座66回 
セルから文字列だけを抽出

文字と数値が混在している文字列中から文字列だけを取り出します。

ユーザー定義関数 Excel 2013 マクロ講座 66回

文字列から数値以外の文字を抽出

前回は、数値と文字が同一セルの中に混在して困っているケースでした。そこで数値を取り出すユーザー定義関数を作成しました。

今回は、逆のケースです。邪魔な数値を除外して文字列だけを取り出したいというわけで、文字列だけ取り出すユーザー定義関数を作りましょう。
(サンプルファイルは、こちらから マクロ66回サンプルデータ

文字列だけ取り出すユーザー定義関数

以下のような文字列と数値が混在しているセルから文字列だけを抽出したいわけです。 セルから文字列だけを抽出マクロ1
ユーザー定義関数を作ると、指定したセルから文字列だけを取り出すことができます。
セルから文字列だけを抽出マクロ2
前回作った「数値だけを取り出すユーザー定義関数」をそのまま応用して文字列を取り出すユーザー定義関数に仕立てます。
下記のコードにおいて、もし数値ならば~しろの部分をもし文字ならば~しろと変更すればいいですね。

Len関数で文字列の文字数を取得する

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 関数で数値でなければを条件にする

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
    
このユーザー定義関数を使うと、 文字と数字が混在しているセルから文字だけを抽出できます。
セルから文字列だけを抽出マクロ3