VBA에서 다차원 배열의 전체 행을 1차원 배열로 반환
VBA에서 다차원 배열의 전체 행 값을 1차원 배열로 되돌릴 수 있는 방법이 있습니까?
뭐 그런 거.arr_1dim = arr_2dim(3,:)
의 행 3을 할당하기 위한 matlab 식입니다.arr_2dim
에 대한 배열.arr_1dim
단번에
엑셀 VBA에 비슷한 덜 비싼 방법이 있나요?
2차원 배열의 열 또는 행을 얻는 간단한 방법이 있습니다.행을 가져오려면 열에 0을 할당하고 열을 가져오려면 행에 0을 할당합니다.
Application.WorksheetFunction.Index(array, 0, columnyouwant) /* or */
Application.WorksheetFunction.Index(array, rowyouwant, 0)
다음을 참조:Excel VBA에서 배열을 슬라이스하려면 어떻게 해야 합니까?
아니요. 행 또는 열을 가져올 수 있는 VBA 함수가 없습니다.직접 작성하거나 여기서 확인할 수 있습니다.
http://www.cpearson.com/excel/vbaarrays.htm
이것이 제가 다차원 배열의 1차원을 쉽게 출력하기 위해 하는 일입니다.
기본적으로, 저는 새로운 1D 배열을 정의하고 더 큰 배열의 값으로 채웁니다.
예(인쇄할 3D ~ 1D):
Sub PrintItOut()
ReDim big_array(10,5,n) as Variant, small_array(n) as Variant
'use multidimensional array
'place multi-dimensional values into the 1D array
For i = 0 to n
small_array(i) = big_array(0, 0, i)
Next
Range(Cells(1, 1), Cells(1, n + 1)) = small_array
End Sub
그게 제가 하는 방식입니다.그것을 읽고 있는 사람이라면 누구나 이해할 수 있기를 바랍니다.저는 그것이 매우 간단한 방법이라고 생각합니다.
Matlab은 매트릭스, 어레이, 벡터에 관한 한 매우 훌륭한 애플리케이션입니다.;) 하지만 엑셀은 그렇게 나쁘지 않아요, 그것도 매트릭스 기반이에요.
그래서 당신이 루프를 통과하고 싶지 않다고 가정합니다.당신은 간단히 당신의 것을 출력할 수 있습니다.multi-D array
를 사용하여 워크시트로Transpose
기능.
그럼 a를 당깁니다.Row
다음을 사용하여 원하는 범위 크기로 배열합니다.Transpose
.
Dim vArr as Variant
'--output multi-D array into worksheet
Sheets(2).Range("E2").Resize(UBound(multiDArray) + 1, _
UBound(Application.Transpose(multiDArray))) = multiDArray
'--pull back the row you need: we double transpose here to get 1D. Coz single transpose
'-- results in 2D array..
vArr = WorksheetFunctions.Transpose( _
WorksheetFunctions.Transpose(Sheets(1).Range("A2:G2").Value))
절대적으로 역동적이려면, 당신은resize
당신의.range A2:G2
다중 D를 사용한 동적 행 카운트array row upperbound
:)
최근에 혼자서 이 질문을 받았기 때문에, 저는 제 코드를 공유하고 싶습니다.열 또는 행을 추출할 것인지 선택할 수 있는 바로 사용 가능한 함수를 작성했습니다.
'*** Modul 1, define function ***
Function getOneLine(array2D As Variant, lineIndex As Integer, choice As String) As Variant
' returning one column or row of a 2D array
' array2D: 2 dimensional Array
' lineIndex: the index of column or row, starting at 0
' choice: "c" for column or "r" for row
Dim i, n As Integer
Dim oneLine As Variant
If choice = "c" Then
n = UBound(array2D, 2)
ReDim oneLine(n)
For i = 0 To n
oneLine(i) = array2D(lineIndex, i)
Next
getOneLine = oneLine
End If
If choice = "r" Then
n = UBound(array2D, 1)
ReDim oneLine(n)
For i = 0 To n
oneLine(i) = array2D(i, lineIndex)
Next
getOneLine = oneLine
End If
End Function
'*** Modul 2, call function ***
Sub SomeProcess()
' Creating a 3x2 Matrix
' (In VBA-arrays the column is indexed before the rows
' starting at 0. So 3x2 looks like 1x2)
Dim SomeArray(1, 2) As Variant
SomeArray(0, 0) = 1
SomeArray(0, 1) = 2
SomeArray(0, 2) = 3
SomeArray(1, 0) = 4
SomeArray(1, 1) = 5
SomeArray(1, 2) = 6
Dim oneLine As Variant
oneLine = getOneLine(SomeArray, 1, "c")
Debug.Print oneLine(2)
' prints 6
End Sub
가까운 일을 할 수 있는 방법:
ReDim TwoDim(10) As Variant
TwoDim(2) = Array("a", "b")
Debug.Print TwoDim(2)(1) 'Shows "a"
Debug.Print Join(TwoDim(2), "") 'Shows "ab"
언급URL : https://stackoverflow.com/questions/14173622/return-an-entire-row-of-a-multidimensional-array-in-vba-to-a-one-dimensional-arr
'programing' 카테고리의 다른 글
윈도우즈의 로컬 파일 시스템 전반에서 GIT 클론 repo (0) | 2023.05.10 |
---|---|
컴파일을 비교합니다.NET 어셈블리? (0) | 2023.05.10 |
선행 0 및 쉼표를 모두 포함하는 Excel용 CSV (0) | 2023.05.05 |
월 번호에서 월 이름 가져오기 (0) | 2023.05.05 |
Azure 함수 - appsettings.json 사용 (0) | 2023.05.05 |