• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:値の抽出)

Excelでマクロを使って値の抽出をする方法

このQ&Aのポイント
  • Excelでマクロを使って値の抽出をしたい場合、B列の数字部分を抜き出して表示する方法について教えてください。
  • 具体的な手順として、B列の数字部分をC列、D列、E列にそれぞれ表示させる方法をお伺いしたいです。
  • どうかご回答をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.1

こんにちは。 マクロの一例を考えてみました。 的外れだった場合はすみません。 ■前提条件 1)取り出す対象の「数字文字列」は、全て、半角の「数字文字」("0"~"9")と、  半角の"."(ピリオド=小数点)からなる文字列のみとする。 2)数字が連続した部分文字列(小数点も含む)を、1つの「数字文字列」とする。   ご提示の例にある以下の文字列、     ゴウハン 13*20.0X 56X807 U   の場合、「数字文字列」は、     1番目 = 13     2番目 = 20.0     3番目 = 56     4番目 = 807   となります。 ■マクロの概要&使用方法 1)マクロは、引数と戻り値がある、以下のような「ユーザー関数」とし、   セルの数式として利用できるものとします。  <ユーザー関数の仕様>   【関数名】 : GetNumber   【機 能】  : セル上の文字列より指定番目の数値を取得   【引 数】     ByrRef rgCell As Range   : セルのRangeオブジェクト     ByVal nNumPos As Integer : 文字列内の数値の位置   【戻り値】     Variant : 指定位置の数値 2)セルの設定   B列 : 数値を取り出す対象の文字列   C列 : B列の文字列内の、2番目の数値         ・「数式」を設定(今回のユーザー関数を使用します)         ・表示形式 : 数値(小数点以下の桁数 = 1)   D列 : B列の文字列内の、3番目の数値         ・「数式」を設定(今回のユーザー関数を使用します)         ・表示形式 : 標準   E列 : B列の文字列内の、4番目の数値         ・「数式」を設定(今回のユーザー関数を使用します)         ・表示形式 : 標準   <数式の例>    C2 =GetNumber($B2,2)    D2 =GetNumber($B2,3)    E2 =GetNumber($B2,4)    ※C列~E列の3行目以降のセル範囲には、C2~E2のセル範囲をコピーし、     その「数式」をコピーします。 ■マクロ(ユーザー関数) ※下記のマクロは、「標準モジュール」に実装して下さい。 注)インデント等のため全角スペースを入れています。 ========================= Option Explicit ' '===================================================== ' GetNumber:セル上の文字列より指定番目の数値を取得 '【引数】 ' ByrRef rgCell As Range  :セルのRangeオブジェクト ' ByVal nNumPos As Integer :文字列内の数値の位置 '【戻り値】 ' Variant :指定位置の数値 '===================================================== Function GetNumber(ByRef rgCell As Range, _           ByVal nNumPos As Integer) As Variant   'セルが複数だった場合は戻る   If rgCell.Count <> 1 Then     GetNumber = ""     Exit Function   End If   Dim i As Integer    'ループ変数   Dim nStrLen As Integer 'セル上の文字列の文字数   Dim nNumCnt As Integer '数字文字列の位置(順番)   Dim s1 As String    '文字列ワーク(1)   Dim s2 As String    '文字列ワーク(2)   Dim s3 As String    '文字列ワーク(3)   s1 = rgCell.Text 'セル上の文字列取得   s2 = ""      '文字列ワーク(1文字取得用)をクリア   s3 = ""      '文字列ワーク(数字文字列用)をクリア   nStrLen = Len(s1) '文字列の文字数取得   nNumCnt = 0    '数字文字列の位置を初期化   '文字列から数字文字列を取り出す(文字数分ループ)   For i = 1 To nStrLen     s2 = Mid(s1, i, 1)   '1文字ずつ取り出し     If s2 Like "[0123456789.]" Then '数字or小数点?       If Len(s3) < 1 Then         nNumCnt = nNumCnt + 1  '数字文字列の位置を+1       End If       s3 = s3 & s2  '数字文字列に数字文字を追加     ElseIf Len(s3) > 0 Then     '数字文字列あり?       If nNumCnt = nNumPos Then         Exit For  '指定位置の数字文字列ならループを抜ける       End If       s3 = ""   '数字文字列をクリア     End If   Next i   '指定位置の数字文字列があれば戻り値として返す   If nNumCnt = nNumPos And IsNumeric(s3) = True Then     GetNumber = Val(s3)   Else     GetNumber = ""   End If End Function ========================= 添付画像は、上記マクロ実装後のExcelシート画面の例です。 以上です。参考になれば幸いです。

08517502
質問者

お礼

わぁ!出来ました。 ご丁寧な説明に画像まで付けて頂き、とても分かりやすかったです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう