Excel業務あるある
なぜかセルの中に数字と一緒に単位がはいっている・・・。
セルの中から数字項目だけを取り出したい。
そんな経験ありませんか?
今回のExcel業務あるあるは、「セルの内の数字だけを抽出する」です。
他の人が作ったExcelに多かった経験が。。。
手作業で取り出すのは、かなり面倒。
単位のように一発で置換できればいいのですが、場合によっては単純にはいかないことも。
今回紹介するのは、そんなあるあるのときに使えるかも知れない、数字だけを取り出す自作関数です。
GETNUMBER自作関数
GETNUMBERという関数にしてみました。
これならVBAの中でも使えますし、
ワークシートでも使えます。
例
単純に数字だけを取り出すのでは芸がないので、
・全角・半角の指定
・取り出し方向の指定
・区切り文字の指定
機能を付けてみました。
コード
実際のコードです。
'引数から数字だけを抽出する。 '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業務あるあるで、セルから数字だけを取り出す関数の紹介でした。
これで数字だけを抽出するために、いちいち作業用のシートを用意して、置換して、また元のシートに貼り付け直して・・・などといった無駄な工程を省くことができそうですね!
ここまでお読みいただき、ありがとうございました。