2012-07-05 3 views
0

문자열을 통해 숫자 값의 일부 값을 제공하는 함수를 만들려고했습니다. 내가 시도한 여러 버전은 계획대로 잘 작동하지 않았으며 http://www.utteraccess.com/forum/Find-number-string-Ins-t1746052.html에 코드 스 니펫을 발견했습니다. 내가 좋아하는 모습에서 값을 끌어하려고특정 상황에서 VBA 함수가 후행 0을 추가합니다.

문자열 :
문자열이 있었다 몇 가지 특수한 경우가 있었다 A11, A21A23, A25, A23A21, etc.
:
A23 D0, A23 D1, A23A21 D0, etc.

을는 D를 포함 된 경우에 어떤 이유는 코드는 0을 추가합니다. A23 D023을 반환합니다. 따라서 A23 D1230을 반환해야합니다. A23 D323000을 반환합니다.

저는 VBA를 처음 접했을 때 문자 D가 D를 대체하는 다른 문자에 동일한 효과가없는 후미 0을 추가하게하는 원인을 파악할 수 없습니다. 이 같은

Public Function GetNumFromStringFloating(strText As String, Optional intPos As Integer = 1) As String 
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG") = 12 
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",3) = 12 
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",14) = 18871890 
'? GetNumFromStringFloating("12*TLG AUTVTG18871890AAUG",-1) = 18871890 (Reverse Search) 
Dim X As Integer 
If intPos > 0 Then 
    For X = intPos To Len(strText) 
     If IsNumeric(Mid(strText, X, 1)) Then 
      GetNumFromStringFloating = val(Mid(strText, X) & "") 
      Exit For 
     End If 
    Next X 
Else 
    For X = Len(strText) To Abs(intPos) Step -1 
     If IsNumeric(Mid(strText, X, 1)) Then 
      GetNumFromStringFloating = val(Mid(strText, X) & "") 
     Else 
      If GetNumFromStringFloating <> "" Then Exit For 
     End If 
    Next X 
End If 
End Function 
+1

다음과 같이

VBA를 스크립트입니다? 입력은 무엇이며 원하는 결과는 무엇입니까? – NoChance

+0

Val의 오해가 어느 정도 있습니다 (http://office.microsoft.com/en-us/access-help/val-function-HA001228931.aspx) – Fionnuala

답변

1

뭔가에 맞게 수 :

가 정확히 비즈니스 규칙 무엇
Function getnum(sText) 
''A11, A21A23, A25, A23A21 
Dim sNum As String 

''Skip the first letter 
For i = 2 To Len(sText) 
    If IsNumeric(Mid(sText, i, 1)) Then 
     sNum = sNum & Mid(sText, i, 1) 
    Else 
     Exit For 
    End If 
Next 

getnum = sNum 
End Function 
관련 문제