昨日眠かったので。。。
数字と小数点を抜き出すマクロ(アドイン)を作った
エラー処理は一つもしていないので、なんとかしたい。
インプットボックスからセルの範囲を取得できるなら
そのほうがわかりやすい気がする。かも。
'__________ ■ ThisWorkbook.clsの内容 __________ Option Explicit '***** アドインのインストール時 Private Sub Workbook_AddinInstall() '***** アドイン用コマンドバーを追加 Dim Menubar As CommandBar Set Menubar = Application.CommandBars.Add(Name:="数値抽出アドイン") '***** コマンドボタンを設定 With Menubar.Controls.Add(Type:=msoControlButton) .FaceId = 59 .Style = msoButtonIconAndCaption .Caption = "数値抽出" .TooltipText = "選択範囲の数値を抽出します" .OnAction = "mcr_NumPickOut" End With Menubar.Visible = True End Sub Option Explicit '__________ ■ もじゅーる1の内容 __________ Sub mcr_NumPickOut() '***** マクロ処理を画面表示しない Application.ScreenUpdating = False '__________ 変数設定 __________ '***** 現在開いているシート Dim wActive As Worksheet Set wActive = ActiveWorkbook.ActiveSheet '***** 選択範囲 '***** (左) Dim cSelect_Left As Long cSelect_Left = Selection.Column '***** (右) Dim cSelect_Right As Long cSelect_Right = Selection.Column + Selection.Columns.Count - 1 '***** (上) Dim cSelect_Top As Long cSelect_Top = Selection.Row '***** (下) Dim cSelect_Under As Long cSelect_Under = Selection.Row + Selection.Rows.Count - 1 '__________ 処理(新規シート作成) __________ '***** 「変換後」シートを作成 Sheets.Add.Name = "変換後" '__________ 処理(数字抽出) __________ '***** 処理シート Dim wWork As Worksheet Set wWork = ActiveWorkbook.Worksheets("変換後") '***** ループ用 '***** (列)選択範囲の左端 Dim i_Col As Long i_Col = cSelect_Left '***** (行)選択範囲の上端 Dim i_Row As Long i_Row = cSelect_Top '***** (セル)文字数 Dim i_Len As Long i_Len = 1 '***** 処理セル '***** 参照元のセル Dim cActive As String cActive = wActive.Cells(i_Row, i_Col) '***** 変換後のセル Dim cWork As String cWork = wWork.Cells(i_Row, i_Col) '***** 列ループ For i_Col = cSelect_Left To cSelect_Right '***** 行ループ For i_Row = cSelect_Top To cSelect_Under '***** 次のセルへ移るため変数の初期化 cActive = wActive.Cells(i_Row, i_Col) cWork = wWork.Cells(i_Row, i_Col) '***** 文字ループ For i_Len = 1 To Len(cActive) '***** 条件:0〜9の数字 If Mid(cActive, i_Len, 1) Like "[0-9]" Then '***** 一致でセルへ入力 cWork = cWork & Mid(cActive, i_Len, 1) wWork.Cells(i_Row, i_Col) = cWork Else '***** 条件:小数点 If Mid(cActive, i_Len, 1) = "." Then cWork = cWork & Mid(cActive, i_Len, 1) wWork.Cells(i_Row, i_Col) = cWork End If End If Next i_Len Next i_Row Next i_Col '__________ 処理(終了処理) __________ '***** 変換後のシートを選択 With wWork .Activate .Cells(1, 1).Select '***** シート名が被らないように名前変更 .Name = "変換後_" & Second(Now) End With '***** 完了のメッセージ表示 Call MsgBox("数値の抽出をしました", vbInformation, "処理完了") '***** 画面表示を戻す Application.ScreenUpdating = True End Sub