按字母顺序添加到string数组中

我正在寻找一种方法来添加string(从单元格)string数组的字母顺序。

例如:

string array = {"apple", "banana", "orange"} 

"cherry"

 string array = {"apple", "banana", "cherry", "orange"} 

因此,如果我做sheets(1).range("A1").value = new string array ,整个数组将在一个单元格中。

我在网上find了一个按字母顺序排列所选单元格的函数,但是不确定它是否有助于我的实例。

 Function Alphabetize(vStrings As Variant, separator As String) As String Dim v As Variant, vSorted As Variant Dim i As Long, j As Long, n As Long Dim bDone As Boolean For Each v In vStrings n = n + 1 Next ReDim vSorted(1 To n) ReDim pos(1 To n) For Each v In vStrings i = i + 1 vSorted(i) = v Next For j = 2 To n bDone = True For i = 2 To n If vSorted(i) < vSorted(i - 1) Then v = vSorted(i - 1) vSorted(i - 1) = vSorted(i) vSorted(i) = v bDone = False End If Next If bDone Then Exit For Next For i = 1 To n If vSorted(i) <> "" Then If i = 1 Then Alphabetize = separator & vSorted(i) Else If vSorted(i) <> vSorted(i - 1) Then Alphabetize = Alphabetize & separator & vSorted(i) End If End If Next Alphabetize = Mid$(Alphabetize, 2) End Function 

如果需要,可以使用.NET库中的System.Collections.SortedList类。 那么就不用担心sorting了。

 Dim objList As Object Set objList = CreateObject("System.Collections.SortedList") objList.Add "apple", "" objList.Add "banana", "" objList.Add "orange", "" objList.Add "cherry", "" Dim i As Long For i = 0 To objList.Count - 1 Debug.Print objList.GetKey(i) Next 

打印:

 apple banana cherry orange 

如果要将值合并到一个string中,只需在循环访问值时将它们连接起来即可,也可以传递给数组并使用Join创buildstring:

 ReDim a(objList.Count - 1) As String Dim i As Long For i = 0 To objList.Count - 1 a(i) = objList.GetKey(i) Next ' Combine strings into the format: {"string1", "string2", "stringN"} Sheet1.Range("A1").Value = "{""" & Join(a, """, """) & """}" 

目前尚不清楚vStrings'cherry '的声明或赋值在vStrings ,但是这里是一个调用附加数组的函数,并向Sheet1的A1返回一个分隔列表(单个文本值)。

 Sub main() Dim string_array As Variant, new_string As String string_array = Array("apple", "banana", "orange") new_string = "cherry" Sheets(1).Range("A1").Value = add_and_alphabetize(string_array, new_string, sDELIM:=Chr(44)) End Sub Function add_and_alphabetize(vSTR As Variant, sSTR As String, _ Optional sDELIM As String = ";", Optional bDESC As Boolean = False) Dim i As Long, j As Long, vTMP As Variant If CBool(Len(sSTR)) Then ReDim Preserve vSTR(LBound(vSTR) To UBound(vSTR) + 1) vSTR(UBound(vSTR)) = sSTR End If For i = LBound(vSTR) To UBound(vSTR) - 1 For j = i To UBound(vSTR) If (vSTR(i) < vSTR(j) And bDESC) Or (vSTR(i) > vSTR(j) And Not bDESC) Then vTMP = vSTR(j) vSTR(j) = vSTR(i) vSTR(i) = vTMP End If Next j Next i add_and_alphabetize = Join(vSTR, sDELIM) End Function 

我添加了选项来指定分隔符(默认为分号)并更改sorting的顺序。