EXCEL의 VBA에서 2D 배열의 특정 열 또는 행을 1D 배열로 변환하는 방법
9314 단어 VBAExcelWorkSheetFunction
샘플
아래의 코드로 2차원 배열을 간단히 1차원 배열로 변환할 수 있습니다.
Public Sub Sample()
Dim 二次元配列 As Variant
Dim 一次元配列 As Variant
二次元配列 = Range("A1:B6")
'3行目を一次元配列化する
一次元配列 = WorksheetFunction.Index(二次元配列, 3)
Debug.Print "3行目= " & Join(一次元配列, ",")
'1列目を一次元配列化する
'一次元配列 = WorksheetFunction.Index(二次元配列, , 1) 'Index関数のHELP的にはできそうですがエラーになります
'Transpose()関数を使って行と列を入替えます
一次元配列 = WorksheetFunction.Index(WorksheetFunction.Transpose(二次元配列), 1)
Debug.Print "1列目= " & Join(一次元配列, ",")
End Sub
위의 함수를 이러한 셀의 상태로 실행하면
결과는 다음과 같습니다.3行目= 鈴木,28
1列目= 名前,佐藤,鈴木,高橋,田中,山田
WorksheetFunction.Index() 함수를 사용하는 것으로 2차원 배열에서 1차원 배열로의 변환을 실현하고 있습니다.
2021/1/9 추가
데이터가 대량인 경우一次元配列 = WorksheetFunction.Index(WorksheetFunction.Transpose(二次元配列), 1)
의 부분은一次元配列 = WorksheetFunction.Transpose(WorksheetFunction.Index(二次元配列, 0, 1))
그렇다면 더 빠릅니다.WorksheetFunction.Index(二次元配列, 0, 1)
의 결과는 1열의 2차원 배열이 반환되지만 WorksheetFunction.Transpose() 함수에 1열의 2차원 배열을 전달하면 1차원 배열을 반환하는 것 같습니다.
다음과 같이 사용자 정의 2 차원 배열도 가능합니다.
Public Sub Sample2()
Dim 二次元配列(1 To 5, 1 To 5) As String
Dim 一次元配列 As Variant
Dim i, j
For i = 1 To 5
For j = 1 To 5
二次元配列(i, j) = Chr(Asc("A") - 1 + j) & i
Next
Next
'3行目を一次元配列化する
一次元配列 = WorksheetFunction.Index(二次元配列, 3)
Debug.Print "3行目= " & Join(一次元配列, ",")
'1列目を一次元配列化する
一次元配列 = WorksheetFunction.Index(WorksheetFunction.Transpose(二次元配列), 1)
Debug.Print "1列目= " & Join(一次元配列, ",")
End Sub
결과는 다음과 같습니다.3行目= A3,B3,C3,D3,E3
1列目= A1,A2,A3,A4,A5
이 방법을 사용하면 샘플 코드와 같이 1차원 배열을 인수로 취하는 함수를 실행하는 코드를 매우 간결하게 기술할 수 있게 됩니다.
응용 예
여기에서는 필자의 상상입니다만(필자의 환경에서는 스필을 사용할 수 없기 때문에)
새롭게 도입된 Spill 함수의 하나인 SortBy() 함수로 이하와 같은 사용법을 할 수 있는 것이 아닐까 상상하고 있습니다.
Public Sub Sample3()
Dim ソート前テーブル(1 To 5, 1 To 5)
Dim ソート後テーブル As Variant
Dim 一列目 As Variant
Dim 二列目 As Variant
Dim i, j
For i = 1 To 5
For j = 1 To 5
テーブル(i, j) = いろいろ設定
Next
Next
'1列目と2列目でソートする
一列目 = WorksheetFunction.Index(WorksheetFunction.Transpose(ソート前テーブル), 1)
二列目 = WorksheetFunction.Index(WorksheetFunction.Transpose(ソート前テーブル), 2)
ソート後テーブル = WorksheetFunction.SortBy(ソート前テーブル, 一列目, , 二列目)
End Sub
이것이 가능하면 내부 테이블의 정렬이 매우 간단해집니다. .
Spill을 사용할 수 있는 분 누군가 보고 부탁합니다.
Reference
이 문제에 관하여(EXCEL의 VBA에서 2D 배열의 특정 열 또는 행을 1D 배열로 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takahasinaoki/items/1295c3df5ddfb13bdf8e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Public Sub Sample()
Dim 二次元配列 As Variant
Dim 一次元配列 As Variant
二次元配列 = Range("A1:B6")
'3行目を一次元配列化する
一次元配列 = WorksheetFunction.Index(二次元配列, 3)
Debug.Print "3行目= " & Join(一次元配列, ",")
'1列目を一次元配列化する
'一次元配列 = WorksheetFunction.Index(二次元配列, , 1) 'Index関数のHELP的にはできそうですがエラーになります
'Transpose()関数を使って行と列を入替えます
一次元配列 = WorksheetFunction.Index(WorksheetFunction.Transpose(二次元配列), 1)
Debug.Print "1列目= " & Join(一次元配列, ",")
End Sub
Public Sub Sample2()
Dim 二次元配列(1 To 5, 1 To 5) As String
Dim 一次元配列 As Variant
Dim i, j
For i = 1 To 5
For j = 1 To 5
二次元配列(i, j) = Chr(Asc("A") - 1 + j) & i
Next
Next
'3行目を一次元配列化する
一次元配列 = WorksheetFunction.Index(二次元配列, 3)
Debug.Print "3行目= " & Join(一次元配列, ",")
'1列目を一次元配列化する
一次元配列 = WorksheetFunction.Index(WorksheetFunction.Transpose(二次元配列), 1)
Debug.Print "1列目= " & Join(一次元配列, ",")
End Sub
여기에서는 필자의 상상입니다만(필자의 환경에서는 스필을 사용할 수 없기 때문에)
새롭게 도입된 Spill 함수의 하나인 SortBy() 함수로 이하와 같은 사용법을 할 수 있는 것이 아닐까 상상하고 있습니다.
Public Sub Sample3()
Dim ソート前テーブル(1 To 5, 1 To 5)
Dim ソート後テーブル As Variant
Dim 一列目 As Variant
Dim 二列目 As Variant
Dim i, j
For i = 1 To 5
For j = 1 To 5
テーブル(i, j) = いろいろ設定
Next
Next
'1列目と2列目でソートする
一列目 = WorksheetFunction.Index(WorksheetFunction.Transpose(ソート前テーブル), 1)
二列目 = WorksheetFunction.Index(WorksheetFunction.Transpose(ソート前テーブル), 2)
ソート後テーブル = WorksheetFunction.SortBy(ソート前テーブル, 一列目, , 二列目)
End Sub
이것이 가능하면 내부 테이블의 정렬이 매우 간단해집니다. .
Spill을 사용할 수 있는 분 누군가 보고 부탁합니다.
Reference
이 문제에 관하여(EXCEL의 VBA에서 2D 배열의 특정 열 또는 행을 1D 배열로 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takahasinaoki/items/1295c3df5ddfb13bdf8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)