2015-04-27 65 views
0

我被困在一個非常簡單的問題上。我有以下字符串:字符串操作VBA

Dim s as String 
s = "031, 603-604, 803-804, 617, 817, 619, 819, 621, 821, 627, 827, 629, 829, 831, 645-646, 845-846, 647-648, 847-848, 649-650, 849-850, 667-668, 867-868, 671-672, 871-872, 677-678, 675-676, 875-876, 679-680" 

現在我想代碼分離到一個數組,所以我有一個循環會通過炭炭(concatting了),如果字符可以是「」或‘ - ’ ,返回代碼並重置concatting。

For i = 1 To Len(s) 
    If Not ((Mid(s, i, 1) = ",") Or (Mid(s, i, 1) = " ") Or (Mid(s, i, 1) = "-")) Then 
     code = code & Mid(s, i, 1) 
    ElseIf (Mid(s, i, 1) = ",") Or (Mid(s, i, 1) = "-") Then 
     Debug.Print code 
     code = "" 
    End If 
Next i 

非但沒有031,603,604 ...我得到031,603-604 ...基本上循環忽略(Mid(s, i, 1) = "-")一部分,但接受(Mid(s, i, 1) = ","),以重置代碼值的條件。

回答

2

你可以把很多更容易,如果你使用了一些字符串處理函數,像這樣,

Dim s as String, tmpArr() As String 

s = "031, 603-604, 803-804, 617, 817, 619, 819, 621, 821, 627, 827, 629, 829, 831, " & _ 
    "645-646, 845-846, 647-648, 847-848, 649-650, 849-850, 667-668, 867-868, 671-672, " & _ 
    "871-872, 677-678, 675-676, 875-876, 679-680" 

s = Replace(Replace(s, "-", ","), " ", "") 

tmpArr = Split(s, ",") 

現在tmpArr包含字符串數組,將只有031,603,604 ...等驗證你可以使用

Dim iCtr As Long 
For iCtr = 0 To UBound(tmpArr) 
    Debug.Print tmpArr(iCtr) 
Next 
+0

非常感謝,這是有道理的。我將如何去爲這個特定任務創建一個函數(返回數組)?公共函數代碼(s as String)作爲字符串; s = Replace(替換(s,「 - 」,「,」),「」,「」); code = Split(s,「,」);結束功能;當我嘗試將它作爲tmpArr = code(s)運行時,它會返回一個Compile Error:Expected數組。我明白錯誤的意思,但我不知道該如何糾正。我認爲它與函數本身的聲明有關。 – emihir0

+0

什麼是代碼?你爲什麼使用代碼並將其分配給tmpArr?如果你可以打開一個**新線程**,那將是非常好的,因爲評論中的代碼非常混亂,並且不清楚你打算做什麼。 – PaulFrancis