Excel VBA質問箱 IV

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

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


31758 / 76734 ←次へ | 前へ→

【50221】Re:結果は#VALUE!
発言  ichinose  - 07/7/14(土) 17:00 -

引用なし
パスワード
   ▼泉 道男 さん:
こんにちは。

>下の数字がA1からA70まで並んでいます。実はA2からA1を引き結果は-19になります。それを繰り返すと次は1となり、更に-5、6、17となるはずですが文字列に1をかけても数値に変わらないので困っています。尚、マクロのことも知らない初心者です。よろしくお願いいたします。

>
> 1,200 
> 1,181  -19
> 1,182   1
> 1,177   -5
> 1,183   6
> 1,200   17
> 1,220 
> 1,208 
> 1,215 
> 1,211 
> 1,227 
> 1,244 
> 1,239 
> 1,238 
> 1,268 
> 1,248 
> 1,227 
> 1,243 
> 1,225 
> 1,226 
このデータがアクティブなシートのセルA1から入力されていたとすると・・、

標準モジュールに
'===========================================================
Sub main()
  Dim rng As Range
  Dim crng As Range
  Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
  For Each crng In rng
    crng.Offset(0, 1).Value = get_num(crng.Value)
    Next
End Sub
'===========================================================
Function get_num(mystr As Variant) As Variant
  With CreateObject("VBScript.RegExp")
    .Pattern = "[0123456789,\.]+"
    .IgnoreCase = True
    .Global = True
   Set Matches = .Execute(mystr)
   get_num = False
   If Matches.Count > 0 Then
     On Error Resume Next
     get_num = CDbl(Replace(Matches(0).Value, ",", ""))
     If Err.Number <> 0 Then
      get_num = False
      End If
     End If
   End With
End Function


として、mainを実行してみてください。


対応するB列に数字のみを抜粋します。


A1           B1
&nbsp;1,200&nbsp;    1200

関数get_numは、ちょっとチェックが甘いけど、まあよいでしょう!!

試して見てください
2 hits

【50219】結果は#VALUE! 泉 道男 07/7/14(土) 11:24 お礼
【50220】Re:結果は#VALUE! かみちゃん 07/7/14(土) 12:10 発言
【50221】Re:結果は#VALUE! ichinose 07/7/14(土) 17:00 発言

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