2013-05-22 3 views
1

문자열 배열을 가져 와서 문자열의 숫자 문자 (오름차순) 만 기반으로 새 문자열 배열로 정렬하는 함수 작성에 도움이 필요합니까?단어 매크로에서 문자열 정렬

"abc53ddd", "2zzz2yyy", "14"

내가 14, 22 and 53. 내가로 문자열을 제거 할 수 있습니다 그들을 문자열에서 숫자 문자로

"14", "2zzz2yyy" and "abc53ddd"

로 표시해야합니다 내가 문자열의 다음과 같은 배열을 말한다 숫자 부분과 배열을 정렬하지만 나머지 문자를 올바른 순서로 나열하기 위해 복구 할 수는 없습니다 ...

+0

이미 시도한 것이 있습니까? –

답변

0

연결이 끊긴 레코드 집합에서 ADO를 사용하십시오. http://technet.microsoft.com/en-us/library/ee176578.aspx을 참조하십시오. 빠르고 강력합니다. IMHO, 최고입니다.

'recordset definition 
Dim rst As New ADODB.Recordset 'must be reference "Microsoft ActiveX Data Objects" 
'OR use automation (without reference) 
'Dim rst 
'Set rst = CreateObject("ADOR.Recordset") 

'fields definition - how many you want (name, type, lenght) 
rst.Fields.Append "field1", ADODB.DataTypeEnum.adVarChar, 255 
rst.Fields.Append "number", ADODB.DataTypeEnum.adInteger 

rst.Open 

'add values, for example: 
Dim rc As ADODB.Record 
rst.AddNew "field1", "abc53ddd" 
rst.AddNew "field1", "2zzz2yyy" 
rst.AddNew "field1", "14" 

'make numbers from string and store in field [number] 
Dim reg As New RegExp 
'OR 
'Set reg = CreateObject("vbscript.regexp") 
reg.Pattern = "\D" 'non-digit 
reg.Global = True 

rst.MoveFirst 
Do Until rst.EOF 
    rst!Number = Val(reg.Replace(rst!field1, "")) 'delete non-digit 
    rst.MoveNext 
Loop 

'sort! 
rst.Sort = "number ASC" 'sort by field1 ascending 

'show output 
rst.MoveFirst 
Do Until rst.EOF 
    Debug.Print rst!field1, rst!Number 
    rst.MoveNext 
Loop