適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

Excel VBAでセル内の数字だけを抽出する

Excel業務あるある

なぜかセルの中に数字と一緒に単位がはいっている・・・。

セルの中から数字項目だけを取り出したい。

そんな経験ありませんか?

今回のExcel業務あるあるは、「セルの内の数字だけを抽出する」です。

他の人が作ったExcelに多かった経験が。。。

手作業で取り出すのは、かなり面倒。

単位のように一発で置換できればいいのですが、場合によっては単純にはいかないことも。

今回紹介するのは、そんなあるあるのときに使えるかも知れない、数字だけを取り出す自作関数です。

GETNUMBER自作関数

GETNUMBERという関数にしてみました。

これならVBAの中でも使えますし、

ワークシートでも使えます。

f:id:shinmai_papa:20210217173818p:plain

単純に数字だけを取り出すのでは芸がないので、

・全角・半角の指定

・取り出し方向の指定

・区切り文字の指定

機能を付けてみました。

コード

実際のコードです。

 
'引数から数字だけを抽出する。
'GETNUMBER(対象を指定する, 全角を半角にするかどうか, 右から取り出すかどうか, 区切り文字を指定)
'Reverse=falseのとき a1b2⇒12
'Reverse=true のとき a1b2⇒21
'isNarrow = true のとき a1b2⇒12
'isNarrow = falseのとき a1b2⇒12
'Delimiter=","のとき a1b2=1,2

Function GETNUMBER(Target As Variant, Optional isNarrow As Boolean = True, Optional Reverse As Boolean = False, Optional Delimiter As String = "") As String
    '文字数
    Dim varLen As Long: varLen = Len(Target)
    '結果格納用の変数
    Dim returnNumber As String
    'カウント用変数
    Dim i As Long
    '文字を検査する文字
    Dim tmpChar As String
    '検査の開始位置
    Dim startPosition As Long
    '検査の終了位置
    Dim endPosition As Long
    '検査の方向
    Dim stepCount As Long
    'オプションのReverse変数の値により開始・終了位置・変数の増減をセットする
    If Reverse Then
        startPosition = varLen
        endPosition = 1
        stepCount = -1
    Else
        startPosition = 1
        endPosition = varLen
        stepCount = 1
    End If
    '1字ずつ検査する
    For i = startPosition To endPosition Step stepCount
        tmpChar = Mid$(Target, i, 1)
        '数値かどうかチェックする
        If IsNumeric(tmpChar) Then
            returnNumber = returnNumber & tmpChar & Delimiter
        End If
    Next i
    '数値が検出されなかった場合は空白を返して終了
    If returnNumber = Delimiter Then
        GETNUMBER = ""
        Exit Function
    End If
    '余分なDelimiterの削除
    returnNumber = Left$(returnNumber, Len(returnNumber) - 1)
    '半角のチェック
    If isNarrow Then
        returnNumber = StrConv(returnNumber, vbNarrow)
    End If
    GETNUMBER = returnNumber
End Function

なんだか長くなってしまいましたが・・・

順番に追ってみると、単純なことを素直にやっているだけです・・・。

終わりに

Excel業務あるあるで、セルから数字だけを取り出す関数の紹介でした。

これで数字だけを抽出するために、いちいち作業用のシートを用意して、置換して、また元のシートに貼り付け直して・・・などといった無駄な工程を省くことができそうですね!

ここまでお読みいただき、ありがとうございました。