4

そのため、私は、提供されるデータの種類をまったく制御できない、かなり不格好なデータベースからの入力を持つプロジェクトに取り組んでいます。基本的に、小数を含む数字を含む文字列が得られます。

「1 日 2 回、0.5 錠を口から服用してください。」

タブと表示されるたびに、タブの前の数値を取得して、ダブル形式に変換します。文字列「0.5」を取得したら、cdblを使用して変換する方法を知っていますが、InStrは左から右にしか検索しないため、その文字列を取得する方法は少し難しいです。InStr を使用して、「タブ」という単語の前にある数字の前のスペースを見つけようと考えていましたが、コーディング方法がわかりません。助言がありますか?

4

3 に答える 3

6

InStrRev右から左に検索します。または、StrReverse出力を使用して操作することもできますが、次を使用しVBScript.Regexpます。

Dim text As String
text = "take 0.5 Tab by mouth 2 times daily"

Dim regex As Object
Set regex = CreateObject("VBScript.Regexp")

regex.Global = True
regex.Pattern = "[\d\.]+(?=\sTab)"

Dim test As Object
Set test = regex.Execute(text)
MsgBox (test(0).Value)
于 2013-07-05T15:50:15.680 に答える
1

から取得するに"0.5""take 0.5 Tab by mouth 2 times daily."

Public Function TakeBeforeTab(r As Range) As String
Dim s As String

s = r.Value
s = Mid(s, 1, InStr(UCase(s), "TAB") - 2)
TakeBeforeTab = Mid(s, InStr(s, " ") + 1)

End Function
于 2013-07-05T16:34:59.173 に答える
1

タブを関連インジケーターとして使用して更新する

それが関連する指標であると仮定するとTab、次のことができます。

Sub ExtractElement()
    ' column 4 and row 6 contains the text "take 0.5 Tab by mouth 2 times daily"
    s = Cells(6, 4).Value
    ' split text into array for each space
    sAr = Split(s, " ")
    ' iterate over each element of array  
    For i = 0 To UBound(sAr) - 1
        ' if the array element "Tab" is reached 
        If  sAr(i) = "Tab" Then 
            ' write the previous array element into the next column
            Cells(6, 5).Value = sAr(i-1)
        End If        
    Next    
End Sub

各単語は実際には " " で区切られていることに注意してください。あなたのテキストをコピーしたところ、「Tab by」が区切られていないことに気付きました。

Sub ExtractCharCode()

    s = Cells(7, 4).Value
    For i = 1 To Len(s)
        Cells(i, 8).Value = Mid(s, i, 1)
        Cells(i, 9).Value = Asc(Mid(s, i, 1))
    Next
End Sub

ユーザーmatzoneからの回答のバリエーションを使用して更新します

matzone から関数に範囲を渡す代わりに、値のみを渡し、それにトリムを追加します

Public Function TakeBeforeTab2(s As String) As String
    s = Mid(s, 1, InStr(UCase(s), "TAB") - 1)
    TakeBeforeTab2 = Trim(Mid(s, InStr(s, " ") + 1))
End Function
于 2013-07-05T16:00:29.417 に答える