VBA|文字列から数字を抽出マクロ

エクセルVBA VBAでセルの操作



数字と文字列が混ざったセルから数字だけを抽出するマクロを紹介します。

直観的に分かりやすいので、サラッと解説していきますね!

例えば下に示す一覧表のような文字列と数字が混ざった表があります。

マクロを使って、数字だけを抽出します。



VBAサンプルコード:文字列から数字を抽出するマクロ

Sub 数字抽出マクロ()
Dim start_cell As Variant
Dim end_cell As Variant
Dim i As Long
Dim result_ws As Worksheet
Dim this_ws As Worksheet
Dim file_name As String
Dim op_file As Workbook
Dim start_cell_sheet As Worksheet

On Error Resume Next

MsgBox "数字の抽出を行います。" & vbCrLf & "OKを押して数字を抽出するファイルを選択してください。"

file_name = Application.GetOpenFilename(filefilter:="Excelファイル,*.xls*,CSVファイル,*.csv", _
                                        Title:="数字を抽出するファイルを選択してください。")
If file_name <> "False" Then
    Workbooks.Open file_name
    Set op_file = ActiveWorkbook
Else
    MsgBox "キャンセルしました"
    Exit Sub
End If

Set start_cell = Application.InputBox(prompt:="マウスで開始セルを選択してください。", _
                               Title:="開始セルを選択", _
                               Type:=8)

If TypeName(start_cell) = "Empty" Then
     MsgBox ("キャンセルしました")
     Exit Sub
ElseIf TypeName(start_cell) = "Boolean" Then
     MsgBox ("キャンセルしました")
     Exit Sub
End If

start_cell.Worksheet.Activate
input_end_cell:
end_cell = Empty

Set end_cell = Application.InputBox(prompt:="マウスで終了セルを選択してください。", _
                               Title:="終了セルを選択", _
                               Type:=8)
If TypeName(end_cell) = "Empty" Then
     MsgBox ("キャンセルしました")
     Exit Sub
ElseIf TypeName(end_cell) = "Boolean" Then
     MsgBox ("キャンセルしました")
     Exit Sub
End If

If Not end_cell.Column = start_cell.Column Then
    MsgBox ("開始セルと同じ列を選択してください。")
    GoTo input_end_cell
End If

On Error GoTo 0

Set this_ws = start_cell.Worksheet

Set result_ws = Worksheets.Add(after:=this_ws)

With this_ws
For i = start_cell.Row To end_cell.Row
    myN = 0
    myNo = 0
    For j = 1 To Len(.Cells(i, start_cell.Column).Value)
        myStr = Mid(.Cells(i, start_cell.Column).Value, j, 1)
        If myStr Like "[0-90-9]" Then
            myN = myN & myStr
        End If
    Next j
    If IsNumeric(myN) Then
        myNo = myN * 1
        result_ws.Cells(i, start_cell.Column) = myNo
    Else
        myNo = ""
    End If

Next i

End With
End Sub

文字列から数字を抽出するマクロの動作

マクロを実行すると、ポップアップが立ち上がります。

OKをクリックすると、文字列から数字を抽出する対象のファイルの選択ダイアログが開きます。

対象のファイルを選択し、「開く」をクリックすると対象ファイルが開きます。

対象ファイルから文字列から数字を抽出したい表(セル)の開始セルを選択します。

開始セルを選択し、次は終了セルを選択してください。

すると、選択した表(セル)があるワークシートの次のシートに、文字列から数字を抽出した表が書き込まれたシートが挿入され表示されます。

なお、このマクロは数字は半角・全角どちらにも対応しています。

もちろん半角数字と全角数字が混在したセルにも対応しています。




VBAでセルの操作
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

タイトルとURLをコピーしました