Excel 용 userform에 콤보 박스가 있습니다. 알파벳 순으로 정렬하는 가장 쉬운 방법은 무엇입니까? 그것의 값은 vba에 하드 코딩되어 새로운 것들은 아무런 순서없이 이미 바닥에 추가됩니다.콤보 상자 값을 알파벳 순으로 정렬하십시오.
우리의 사용자가 우리 데이터베이스의 데이터를 Excel로 가져올 수 있도록 userform이 현재 사용되고 있습니다. 콤보 박스가 있으므로 가져올 클라이언트 데이터를 지정할 수 있습니다.
Excel 용 userform에 콤보 박스가 있습니다. 알파벳 순으로 정렬하는 가장 쉬운 방법은 무엇입니까? 그것의 값은 vba에 하드 코딩되어 새로운 것들은 아무런 순서없이 이미 바닥에 추가됩니다.콤보 상자 값을 알파벳 순으로 정렬하십시오.
우리의 사용자가 우리 데이터베이스의 데이터를 Excel로 가져올 수 있도록 userform이 현재 사용되고 있습니다. 콤보 박스가 있으므로 가져올 클라이언트 데이터를 지정할 수 있습니다.
VBA에는 이러한 것들을위한 내장 정렬 기능이 없습니다. 운수 나쁘게. 자신이 COM을 통해 .NET 프레임 워크의 ArrayList
클래스를 사용하는 것입니다 인기 정렬 알고리즘 중 하나를 사용하여/구현 포함되지 않습니다
싸게 방법 :
Sub test()
Dim l As Object
Set l = CreateObject("System.Collections.ArrayList")
''# these would be the items from your combobox, obviously
''# ... add them with a for loop
l.Add "d"
l.Add "c"
l.Add "b"
l.Add "a"
l.Sort
''# now clear your combobox
Dim k As Variant
For Each k In l
''# add the sorted items back to your combobox instead
Debug.Print k
Next k
End Sub
이 UserForm_Initialize
의 일상적인 부분을 확인합니다. 프레임 워크가 설치되지 않은 경우 물론 실패합니다.
답변 주셔서 감사합니다. 그러나이 기능은 다른 사람들의 컴퓨터에서 엑셀 추가 기능으로 구현됩니다. 닷넷 프레임 워크를 사용하기는하지만 그들이 가지고있는 것을 확신 할 수있는 방법은 없습니다. –
예. 이 경우 VBA에서 사용할 수있는 많은 정렬 솔루션 중 하나를 사용해야합니다. 다음은 Heapsort를 사용하여 Google을 통해 발견 한 무작위입니다. http://www.source-code.biz/snippets/vbasic/1.htm – Tomalak
아마도 최소한의 거품 덩어리로도 성능이 저하 될 수 있지만, 콤보 상자 항목 중. 코드가 적습니다. – Tomalak
이것은 Excel이 설치된 대부분의 컴퓨터에서 사용할 수있는 ADO 라이브러리를 사용합니다.
Sub SortSomeData()
Dim rstData As New ADODB.Recordset
rstData.Fields.Append "Name", adVarChar, 40
rstData.Fields.Append "Age", adInteger
rstData.Open
rstData.AddNew
rstData.Fields("Name") = "Kalpesh"
rstData.Fields("Age") = 30
rstData.Update
rstData.AddNew
rstData.Fields("Name") = "Jon"
rstData.Fields("Age") = 29
rstData.Update
rstData.AddNew
rstData.Fields("Name") = "praxeo"
rstData.Fields("Age") = 1
rstData.Update
MsgBox rstData.RecordCount
Call printData(rstData)
Debug.Print vbCrLf & "Name DESC"
rstData.Sort = "Name DESC"
Call printData(rstData)
Debug.Print vbCrLf & "Name ASC"
rstData.Sort = "Name ASC"
Call printData(rstData)
Debug.Print vbCrLf & "Age ASC"
rstData.Sort = "Age ASC"
Call printData(rstData)
Debug.Print vbCrLf & "Age DESC"
rstData.Sort = "Age DESC"
Call printData(rstData)
End Sub
Sub printData(ByVal data As Recordset)
Debug.Print data.GetString
End Sub
희망 사항은 시작하기에 충분한 배경을 제공합니다.
FYI - 이것은 연결이 끊긴 레코드 세트입니다 (메모리 테이블에 대한 .net 데이터 세트의 간단한 버전).
정렬 할 배열을 만드는 것은 생각만큼 어렵지 않습니다. Sorting Mulicolumn Listbox을 참조하십시오. List 속성을 Variant 형식에 넣고 배열로 정렬 한 다음 Variant Array를 List 속성으로 다시 덤프 할 수 있습니다. 그래도 대단한 것은 아니지만 VBA가 최고입니다.
추가 할 때 이미 콤보 상자에있는 값과 비교하십시오. 귀하가 만난 품목보다 적 으면 품목을 교체하십시오. 이보다 작지 않은 경우 항목이 적을 때까지 계속 이동하십시오. 항목을 찾을 수없는 경우 끝에 추가하십시오.
For X = 0 To COMBOBOX.ListCount - 1
COMBOBOX.ListIndex = X
If NEWVALUE < COMBOBOX.Value Then
COMBOBOX.AddItem (NEWVALUE), X
GoTo SKIPHERE
End If
Next X
COMBOBOX.AddItem (NEWVALUE)
SKIPHERE:
다음과 같이 쉽게 될 수있다 :이 템플릿에 사용했다
Sub fill_combobox()
Dim LastRow, a, b As Long, c As Variant
ComboBox1.Clear
LastRow = Sheets("S1").Cells(Rows.Count, 2).End(xlUp).Row
For x = 2 To LastRow
ComboBox1.AddItem Cells(x, 2).Value
Next
For a = 0 To ComboBox1.ListCount - 1
For b = a To ComboBox1.ListCount - 1
If ComboBox1.List(b) < ComboBox1.List(a) Then
c = ComboBox1.List(a)
ComboBox1.List(a) = ComboBox1.List(b)
ComboBox1.List(b) = c
End If
Next
Next
End Sub
: 은 알파벳 순서로 정의 폼 콤보 상자 속으로 항목을 추가 enter image description here
이이 분야의 목록입니다 및/또는 테이블? 데이터베이스의 스키마를 사용하여 하드 코드 된 목록이 아닌 목록 상자를 채우는 것을 고려 했습니까? – Fionnuala
목록은 아마도 어떤 식 으로든 나에게 올 것이므로 좋은 지적이다. 내가 볼 수있는 유일한 문제는 보안 및 성능 문제입니다. 제안 해 주셔서 감사합니다. –