아래에는 범위에서 배열을 형성하고 ActiveX Listbox에 게시하는 매크로가 있습니다.
코드는 작동하지만 스프레드 시트에 지속적으로 게시하는 속도가 느립니다. 전체 배열을 목록 상자에 더 효율적으로 게시하는 방법이 있습니까?
아래 코드를 참조하십시오.
'' '
Sub Test()
'Lets format and populate the Listbox102
Dim p as integer, i as integer, j as integer, FinalCombinedArray as variant
FinalCombinedArray=ThisWorkbook.Sheets("Worksheet").Range("A1:D300")
'Keep track of where the scrollbar is currently
p = ThisWorkbook.Sheets("Worksheet").ListBox102.TopIndex
ThisWorkbook.Sheets("Worksheet").ListBox102.Clear
'Inset array element by element
For i = 1 To UBound(FinalCombinedArray, 2)
For j = 1 To UBound(FinalCombinedArray, 1)
If i = 1 Then
ThisWorkbook.Sheets("Worksheet").ListBox102.AddItem
End If
'Format array numbers
If ((j + 1) Mod 14) = 0 Then
ThisWorkbook.Sheets("Worksheet").ListBox102.List(j - 1, i - 1) = Format(FinalCombinedArray(j, i), "#,##0.0000")
Else
ThisWorkbook.Sheets("Worksheet").ListBox102.List(j - 1, i - 1) = Format(FinalCombinedArray(j, i), "#,##0.00")
End If
Next j
Next i
ThisWorkbook.Sheets("Worksheet").ListBox102.AddItem
'If possible, bring scrollbar back to where it was
If ThisWorkbook.Sheets("Worksheet").ListBox102.ListCount - 1 > p Then
ThisWorkbook.Sheets("Worksheet").ListBox102.TopIndex = p
End If
End Sub
- 답변 # 1
- 답변 # 2
항목 별 대신 전체 배열을 할당하여 목록 상자를 한 번에 채울 수 있습니다.
매우 기본적인 예 : 선택한 범위를 사용하여 목록 상자 채우기
Dim rng As Range, arr Set rng = Selection arr = rng.Value 'optionally run over arr and format values if required Me.ListBox1.ColumnCount = rng.Columns.Count Me.ListBox1.List = arr
관련 자료
- Excel 또는 Google 스프레드 시트에서 배열 크기 처리
- Excel의 2 차원 데이터 배열에있는 모든 열에서 하나의 열 빼기
- EXCEL VBA - 엑셀 vba - 배열을 다시 실행하는 기능
- php - PHPSpreadsheet를 사용할 때 서식을 미리 지정하면서 Excel 파일을 배열로 변환
- vba - Excel의 Listbox에 데이터를 추가하는 경우 For Each Loop 느림
- google apps script - forEach는 1d 배열 자바 스크립트의 마지막 항목 만 게시
- python - Excel에서 2D numpy 배열로 가져 오는 방법은 무엇입니까?
- Excel에서 값 배열 만들기
범위 참조 사용
이미 사용중인 경우
ActiveX ListBox
데이터가 범위에 있습니다. ListFillRange 속성을 사용하지 않는 이유는 무엇입니까?이 방법을 사용하면
<시간 /> List 속성 사용ListBox
모든 값을 포함하고 일반 형식도 유지합니다.두 번째 눈에 귀하의 예는 여러 열의 데이터를 사용하는 것입니다. 이 경우 단일 열을 원하면
ListBox
, 그런 다음 ListBox.List 속성을 사용하고 단일 차원 배열에서 값을로드 할 수 있습니다.ThisWorkbook.Sheets("Worksheet").Range("A1:D300").value
2 차원 배열을 반환하므로 단일 차원 배열로 변환해야합니다. 다음은이를 수행하는 두 가지 도우미 함수입니다.포맷팅은 이것들에서 보존되지 않을 것입니다. 그래서 원한다면 함수의 수정 된 버전을 생성하거나 배열을 매핑하고 포맷 할 수 있습니다.
항목 목록이 있으면 다음과 같이 간단합니다.
.List = yourArray
. 아래는 예제의 단순화 된 버전입니다.