Excel을 사용하여 행렬을 단일 열로 변환하는 방법
엑셀에는 다음과 같은 행렬이 있습니다.
3열: A,B,C
1행: abc
2열: def
3열: ghi
제가 필요한 것은 이 모든 값을 가진 한 개의 열입니다.결과는 다음과 같습니다.
a
b
c
d
e
f
g
h
i
그 경우에는 트랜스포스 기능이 작동하지 않습니다.INDERICT 기능을 사용해 보았지만 해결책을 찾지 못했습니다.저는 makro보다는 표준 엑셀 공식으로 처리하고 싶습니다.
무슨 생각 있어요?
예를 들어 다음과 같습니다.
E1에 다음을 입력합니다.
=INDEX($A$1:$C$3,ROUNDUP(ROW()/3,0),IF(MOD(ROW(),3)=0,3,MOD(ROW(),3)))
복사하면 다음을 얻을 수 있습니다.
유사한 공식을 사용하여 2차원 표를 단일 행 또는 단일 열로 매핑할 수 있습니다.단일 열 또는 행을 테이블에 매핑하는 것도 마찬가지로 쉽습니다.
위의 답변은 꽤 좋으나, 칩 피어슨(http://www.cpearson.com/excel/TableToColumn.aspx), 에서 제공하는 솔루션인 IMHO는 즉시/자동으로 제공되므로 매우 우수합니다.
1) 행/콜 구분 값을 자체적으로 결정하고 직사각형에 대해 즉시 작동합니다. 예를 들어 위의 하나는 num Cols에 3을 명시적으로 입력하고 num Rows에 3을 입력해야 하며, 또한 어느 것이 어떤 것인지 파악해야 합니다.반면 Pearson의 솔루션은 이를 자동으로 수행합니다(예: rmf의 의견/위의 우려 사항).
2) Pearson은 Col-order와 Row-order 모두에 대한 변형을 제공합니다.
업무 수행을 위해 엑셀 unvivot 옵션을 확인하는 것을 추천합니다.
- 행렬 선택
- Data(데이터) 탭의 Get & Transform(겟 & 트랜스폼) 섹션을 거쳐 다음을 클릭합니다.
From Table/Range
- 새 Power Query Editor(전력 쿼리 편집기)에서 비활성화할 열을 선택합니다.
- 변환 탭의 임의 열 섹션을 통과한 후, 근처의 화살표를 클릭합니다.
Unpivot Columns
최적의 옵션을 선택합니다(3단계를 수행하면 클릭할 수 있음).Unpivot only selected columns
) - 닫기 & 로드
이 과정은 특히 복잡한 행렬에 유용합니다.
자세한 내용은 위 링크를 확인하십시오.
배열을 생성할 일반화된 접근 방식의 경우 다음을 사용할 수 있습니다.
=LET( Matrix, $A$1:$C$3,
rM, ROWS( Matrix ),
cM, COLUMNS( Matrix ),
cells, SEQUENCE( 1, rM * cM, 0 ),
INDEX( Matrix, INT( cells / cM ) + 1, MOD( cells, cM ) + 1 )
)
이것은 LET 기능을 활용하지만 가독성을 위해 사용됩니다.Excel365를 사용하지 않는 사람들에게는 LET 없이 이것을 하는 것이 가능하지만 읽는 것이 고통스러울 뿐입니다.
결과를 열로 전달해야 할 경우 SEENSE에서 인수 순서를 변경합니다.
= LET( Matrix, $A$1:$C$3,
rM, ROWS( Matrix ),
cM, COLUMNS( Matrix ),
cells, SEQUENCE( rM * cM, 1 , 0 ),
INDEX( Matrix, INT( cells / cM ) + 1, MOD( cells, cM ) + 1 )
) )
물론 A1:C3는 임의의 모양의 배열이 될 수 있습니다.
이것은 이미 일반적인 것으로부터 항목 2에서 다루었습니다.
Excel : 열 / 행 / 행렬 간의 데이터 변환 공식 :
범위의 셀 의 의 :$H$1
)이 포함되어야 합니다.
=INDEX($A$1:$C$3,INT((ROW()-ROW($H$1))/3)+1,MOD(ROW()-ROW($H$1),3)+1)
$A$1:$C$3
소스 데이터를 포함합니다.필요에 따라 공식을 아래쪽으로 복사합니다.
사용할 수도 있습니다.
=OFFSET($A$1,INT((ROW()-ROW($H$1))/3),MOD(ROW()-ROW($H$1),3))
전항에 언급된 바와 같이
변환할 셀에 커서를 놓습니다.수식 아래에 입력합니다.=TOCOL(A1:C3)
그게 전부입니다.
엑셀의 현재 버전으로 매트릭스 운영이 크게 개선되었다는 것을 깨달았습니다.행렬을 단일 열로 변환하려면 다음과 같은 방법으로 INDEX와 SEENSE 함수를 결합하는 것이 좋습니다.
Matriz_to_Column_공식:
=INDEX(matrix_range,
TRUNC((SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1))/COLUMNS(matrix_range)+1,0),
MOD(SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1),COLUMNS(matrix_range))+1)
빈 공간을 제거하려면:
=FILTER(Matriz_to_Column_Formula, Matriz_to_Column_Formula<>"")
다음은 간단한 설명입니다.
인덱스는 행렬 소스, 행, 열의 세 가지가 필요합니다.매번 계산하는 행과 열을 사용하면 인덱스가 행렬 원본의 특정 요소를 가리킬 수 있습니다.인덱스는 필요한 만큼의 요소를 제공하며, 이는 행*열입니다.
각 요소별로 탐색하기 위해 SEQUENCE를 사용하여 행과 열을 확장합니다.
행:
TRUNC((SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1))/COLUMNS(matrix_range)+1,0)
공식 SEENSE는 0부터 행*열-1까지 행렬이 가지고 있는 만큼의 요소를 생성하고 열로 나누는 것은 특정 행만 가리킵니다.시퀀스가 0에서 시작하고 INDEX Row 요소가 1부터 n까지 작동하기 때문에 +1이 사용됩니다.TRUNK는 행의 정수 번호를 얻기 위해서만 사용됩니다.
열:
MOD(SEQUENCE(ROWS(matrix_range)*COLUMNS(matrix_range),1,0,1),COLUMNS(matrix_range))+1
여기서는 동일한 원리를 적용하여 행렬이 0에서 행*열-1까지 가지는 만큼의 요소를 생성하고, 나머지를 시퀀스와 열 사이에 놓음으로써 필요한 열을 가리킵니다.
좋아요, 제 첫 번째 게시물입니다. 누구에게나 도움이 되길 바랍니다.여러 번 도와주셔서 감사합니다!
Excel에서의 예: 행렬에서 단일 열로 - Excel에서의 예
옵션 1:
=INDEX(C3:E7,
TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),
MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)
옵션 2:
=IF(INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)="","",INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1))
비어 있음 제거:
=FILTER(INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1),
INDEX(C3:E7,TRUNC((SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1))/COLUMNS(C3:E7)+1,0),MOD(SEQUENCE(ROWS(C3:E7)*COLUMNS(C3:E7),1,0,1),COLUMNS(C3:E7))+1)<>"")
언급URL : https://stackoverflow.com/questions/28282473/how-to-convert-a-matrix-to-a-single-column-using-excel
'programing' 카테고리의 다른 글
Spring Social로 휴식 인증을 하는 방법은? (0) | 2023.09.17 |
---|---|
Git의 유명한 "ERROR: .git에 대한 권한이 사용자에게 거부됨" (0) | 2023.09.17 |
READ_의 차이점은 무엇입니까?Oracle 데이터베이스의 커밋되고 직렬화 가능한 격리 수준? (0) | 2023.09.17 |
이름이 있는 DataTable 열 인덱스 가져오기 (0) | 2023.09.17 |
C# XML 주석에 '<'자를 표시하는 방법은? (0) | 2023.09.12 |