Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12869 / 13644 ツリー ←次へ | 前へ→

【8229】データの加工方法について 03/10/5(日) 0:43 質問
【8230】Re:データの加工方法について Hirofumi 03/10/5(日) 2:11 回答
【8231】Re:データの加工方法について Hirofumi 03/10/5(日) 7:56 回答
【8232】Re:データの加工方法について 03/10/5(日) 8:51 お礼

【8229】データの加工方法について
質問    - 03/10/5(日) 0:43 -

引用なし
パスワード
   いつも皆様にお世話になり、感謝しております。
さて、次のようなデータを取得して、
数字に変換するにはどのようにしたらいいのでしょうか。
 "1,234,567株"
数字の桁数は不明です。
本、ヘルプを調べても分かりませんでした。
よろしく御願いします。

【8230】Re:データの加工方法について
回答  Hirofumi E-MAIL  - 03/10/5(日) 2:11 -

引用なし
パスワード
   Functionの形で書くとこんなかな?
ユーザー定義関数で使っても善いし、マクロの中で使っても善いと思いますが?

Public Function NumericalValue(ByVal vntValue As Variant) As Variant

  Dim i As Long
  Dim lngPos As Long
  
  NumericalValue = ""
  
  If vntValue = "" Then
    Exit Function
  End If
  
  vntValue = Left(vntValue, Len(vntValue) - 1)
  lngPos = InStr(1, vntValue, ",", vbBinaryCompare)
  Do Until lngPos = 0
    vntValue = Left(vntValue, lngPos - 1) _
            & Mid(vntValue, lngPos + 1)
    lngPos = InStr(1, vntValue, ",", vbBinaryCompare)
  Loop
  If IsNumeric(vntValue) Then
    NumericalValue = Val(vntValue)
  End If
  
End Function

【8231】Re:データの加工方法について
回答  Hirofumi E-MAIL  - 03/10/5(日) 7:56 -

引用なし
パスワード
   Excel2000以上で、Replaceが使えるなら

Public Function NumericalValue2(ByVal vntValue As Variant) As Variant

  '前のコードも以下4行に直した方が善いかも?
  NumericalValue2 = vntValue
  If vntValue = "" Or IsNumeric(vntValue) Then
    Exit Function
  End If
  
  vntValue = Replace(Left(vntValue, Len(vntValue) - 1), ",", "")
  
  If IsNumeric(vntValue) Then
    NumericalValue2 = Val(vntValue)
  End If
  
End Function

【8232】Re:データの加工方法について
お礼    - 03/10/5(日) 8:51 -

引用なし
パスワード
   ▼Hirofumi さん:
>Functionの形で書くとこんなかな?
>ユーザー定義関数で使っても善いし、マクロの中で使っても善いと思いますが?
>
>Public Function NumericalValue(ByVal vntValue As Variant) As Variant
>
>  Dim i As Long
>  Dim lngPos As Long
>  
>  NumericalValue = ""
>  
>  If vntValue = "" Then
>    Exit Function
>  End If
>  
>  vntValue = Left(vntValue, Len(vntValue) - 1)
>  lngPos = InStr(1, vntValue, ",", vbBinaryCompare)
>  Do Until lngPos = 0
>    vntValue = Left(vntValue, lngPos - 1) _
>            & Mid(vntValue, lngPos + 1)
>    lngPos = InStr(1, vntValue, ",", vbBinaryCompare)
>  Loop
>  If IsNumeric(vntValue) Then
>    NumericalValue = Val(vntValue)
>  End If
>  
>End Function

早速の、深夜の回答ありがとうございます。
うまくいきました。
本当に有志の方々に感謝しております。
今後とも、よろしく御願いいたします。

12869 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free