2015-04-27 3 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 вверх), если символ является либо «» или „-“ , верните код и сбросьте удержание.

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 как String) как String; s = Заменить (заменить (s, "-", ","), "", ""); code = Split (s, ","); Конечная функция; Это возвращает ошибку Compile Error: Ожидаемый массив, когда я пытаюсь запустить его как tmpArr = code (s). Я понимаю, что означает ошибка, но я не понимаю, как ее исправить. Я предполагаю, что это связано с объявлением самой функции. – emihir0

+0

Что такое код? Почему вы используете код (ы) и назначаете его tmpArr? Было бы здорово, если бы вы могли открыть ** новый поток **, поскольку код в комментарии очень сбивает с толку, и неясно, что вы намереваетесь сделать. – PaulFrancis