Excel VBA質問箱 IV

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

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


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

【35349】数値と文字の分離 なが 06/3/1(水) 9:16 質問[未読]
【35350】Re:数値と文字の分離 Blue 06/3/1(水) 9:24 回答[未読]
【35352】Re:数値と文字の分離 Jaka 06/3/1(水) 9:34 回答[未読]
【35353】Re:数値と文字の分離 Blue 06/3/1(水) 9:45 発言[未読]
【35357】Re:数値と文字の分離 ちくたく 06/3/1(水) 14:53 回答[未読]
【35358】Re:数値と文字の分離 Blue 06/3/1(水) 16:20 発言[未読]

【35349】数値と文字の分離
質問  なが  - 06/3/1(水) 9:16 -

引用なし
パスワード
   初心者のながです。
”23.6V”や”11.29mV”の様に数値に単位のついた物の
数値のみを残したいのですが?
ちなみに数値や単位の文字数は決まっていません。
でも多くても10文字以下です。
皆さんの知恵をお貸しください。

【35350】Re:数値と文字の分離
回答  Blue  - 06/3/1(水) 9:24 -

引用なし
パスワード
   文字列を前から一つ一つ見てゆき、数字または小数点でない文字出ない位置を探し、Left関数を使って分割するのはどうでしょうか?

Dim s As String
Dim i As Long
Dim temp As String

s = "23.6V"

For i = 1 To Len(s)
  temp = Mid$(s, i, 1)
  ' (iの位置の文字が)数字でも小数点でもないときループを抜ける
  If Not IsNumeric(temp) And temp <> "." Then
    Exit For
  End If
Next

MsgBox Left$(s, i-1)

【35352】Re:数値と文字の分離
回答  Jaka  - 06/3/1(水) 9:34 -

引用なし
パスワード
   左側の数字だけを取り出せばいいのなら...。

aa = "23.6V"
bb = "11.29mV"

aa = Trim(aa) 'aa = " 23.6V"  こんな風になっていなければ
bb = Trim(bb) 'aa = " 23.6V " いらないけど、入れておいた方が良いかも。

MsgBox Val(aa)
MsgBox Val(bb)

因みに
これだと動かない時がある。(原因不明 by97)
MsgBox Val(Trim(aa))
MsgBox Val(Trim(bb))

【35353】Re:数値と文字の分離
発言  Blue  - 06/3/1(水) 9:45 -

引用なし
パスワード
   Val関数でよかったのかぁ、、、
これならば、"1.2.1A"みたいなのもはじけますね。
# 入力としてないと思いますけど。(そもそも".1A"は単位じゃねぇか)

ただ、"1.0V" や "123.40cm" をどのように扱うか微妙ですけど。

【35357】Re:数値と文字の分離
回答  ちくたく WEB  - 06/3/1(水) 14:53 -

引用なし
パスワード
   こんにちは。
正規表現使ってみたんですけど、いまいちかもしれません。
個人的には、わかりやすくて好きなんですけど。
それと、10.20Vとかは書式設定しないと、正規表現じゃだめですね。

  Dim myRE As Object
  Dim matchString As String
  Dim i As Integer
  Dim n As Integer, myStrings As String
  Dim testStrings As String, resultStrings As String
  
  matchString = "[0-9]|[.]"
  Set myRE = CreateObject("VBScript.RegExp") '正規表現用オブジェクト生成。
  myRE.Pattern = matchString
  
  For i = 1 To CInt(Range("A65536").End(xlUp).Row)
    myStrings = Range("A" & i).Value
    For n = 1 To Len(myStrings)
      testStrings = Mid(myStrings, n, 1)
      If myRE.test(testStrings) = True Then
        resultStrings = resultStrings & testStrings
      End If
    Next n
    Range("B" & i).Value = resultStrings
    resultStrings = ""
  Next i
  
  Set myRE = Nothing

【35358】Re:数値と文字の分離
発言  Blue  - 06/3/1(水) 16:20 -

引用なし
パスワード
   正規表現を使うならば、Replaceを使って

  Dim objRegExp As Object
  Dim strRet As String
  Dim strText As String

  Set objRegExp = CreateObject("VBScript.RegExp")
  strText = "10.20V"
  
  objRegExp.Pattern = "([0-9]+[.][0-9]+|[0-9]+|)(.*)"
  objRegExp.Global = True
  
  strRet = objRegExp.Replace(strText, "$1")
  test = strRet
  Set objRegExp = Nothing

てなかんじでしょうか?
Pattern文字列はあまり真剣に考えていないので、間違っているかもしれませんので、どんどん指摘やアドバイスをしてください。

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