数字と文字列が混ざったセルから数字だけを抽出するマクロを紹介します。
直観的に分かりやすいので、サラッと解説していきますね!
例えば下に示す一覧表のような文字列と数字が混ざった表があります。
マクロを使って、数字だけを抽出します。
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をクリックすると、文字列から数字を抽出する対象のファイルの選択ダイアログが開きます。
対象のファイルを選択し、「開く」をクリックすると対象ファイルが開きます。
対象ファイルから文字列から数字を抽出したい表(セル)の開始セルを選択します。
開始セルを選択し、次は終了セルを選択してください。
すると、選択した表(セル)があるワークシートの次のシートに、文字列から数字を抽出した表が書き込まれたシートが挿入され表示されます。
なお、このマクロは数字は半角・全角どちらにも対応しています。
もちろん半角数字と全角数字が混在したセルにも対応しています。
コメント