
다음과 같은 데이터 세트가 있다고 상상해보십시오.
A B
AnthonyMorgan EvelynThomas
JoePatterson RussellRobinson
JohnAnderson ChristopherMiller
CarolynMorris RyanStewart
DorisKing SarahPrice
AlanJohnson MarilynHall
JonathanHall EricCooper
AndreaPowell GregorySimmons
PaulaCooper JackRussell
AndrewPeterson SeanEvans
JohnWilliams JudyBell
LillianLewis JohnWilliams
SteveRoberts LillianLewis
MatthewGray SteveRoberts
ChristinaClark MatthewGray
PeterAllen
SharonHill
MaryTurner
DorisGonzales
VictorWhite
JoanFoster
ChristinaClark
RubyBryant
RogerColeman
JosephLong
AndrewPeterson
A
다른 열의 동일한 값이 함께 유지되도록 열별로 정렬하고 상상하고 싶습니다 . 최종 결과는 다음과 같습니다.
A B
AlanJohnson
AndreaPowell
AndrewPeterson AndrewPeterson
AnthonyMorgan
CarolynMorris
ChristinaClark ChristinaClark
ChristopherMiller
DorisGonzales
DorisKing
EricCooper
EvelynThomas
GregorySimmons
JackRussell
JoanFoster
JoePatterson
JohnAnderson
JohnWilliams JohnWilliams
JonathanHall
JosephLong
JudyBell
LillianLewis LillianLewis
MarilynHall
MaryTurner
MatthewGray MatthewGray
PaulaCooper
PeterAllen
RogerColeman
RubyBryant
RussellRobinson
RyanStewart
SarahPrice
SeanEvans
SharonHill
SteveRoberts SteveRoberts
VictorWhite
어떤 아이디어?
답변1
다음 매크로를 사용해 보세요.
Sub Interleaver()
Dim nA As Long, nB As Long
Dim rc As Long, i As Long, j As Long
rc = Rows.Count
nA = Cells(rc, "A").End(xlUp).Row
nB = Cells(rc, "B").End(xlUp).Row
Range("A1:A" & nA).Copy Range("C1")
Range("B1:B" & nB).Copy Range("C" & nA + 1)
For i = 1 To nA + nB
If i <= nA Then
Cells(i, "D") = "A"
Else
Cells(i, "D") = "B"
End If
Next i
Range("C1:D" & nA + nB).Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1:A" & nA).Clear
Range("B1:B" & nB).Clear
j = 2
If Range("D1").Value = "A" Then
Cells(1, "A") = Cells(1, "C")
Else
Cells(1, "B") = Cells(1, "C")
End If
For i = 2 To nA + nB
If Cells(i, "C") = Cells(i - 1, "C") Then
j = j - 1
Range("A" & j & ":B" & j) = Cells(i, "C")
j = j + 1
Else
If Cells(i, "D").Value = "A" Then
Cells(j, "A") = Cells(i, "C")
Else
Cells(j, "B") = Cells(i, "C")
End If
j = j + 1
End If
Next i
End Sub
다음이 생성됩니다.
답변2
나는 그것을 할 수있는 간단한 방법이 없다고 생각합니다. 다음을 시도해 보십시오:
- 원래 위치를 기억하는 한 범위에서 데이터를 병합합니다(예: 첫 번째 열을 새 시트에 복사하고 다음 열에 "1"을 채우고, 첫 번째 열 아래의 두 번째 열을 복사하고 두 번째 열에 "10"을 채웁니다. 이 데이터 세트).
- 피벗 테이블을 삽입합니다. 열 레이블은 첫 번째 열이어야 하고 두 번째 열의 합계를 요청해야 합니다(이제 이름이 한 열에만 발생한 경우 두 번째 열에 1 또는 10, 두 열 모두에 있는 경우 11에 고유한 값이 알파벳순으로 정렬되어 있습니다. ).
- 피벗 테이블의 데이터가 A5에서 시작한다고 가정하면 C5에 다음을 입력하고 =if(mod(b5,2)=1,a5,"")
d5에 다음을 입력합니다.=if(b5>9,a5,"")
답변3
또 다른 작업 흐름은 다음과 같습니다. 귀하가 찾고 있는 기능을 수행하는 Excel 기능이 없기 때문에 이 작업은 수동으로 수행됩니다. 또 다른 옵션은 매크로 또는 VBA를 사용하여 아래 제안된 작업 흐름을 자동화하는 것입니다.
이미지 1은 초기 예제 데이터를 보여줍니다.
wach 열을 별도로 정렬하여 시작하세요. 정렬이 다른 열에 영향을 주지 않도록 유지하십시오. 프로세스를 돕기 위해 다른 열을 추가하고 B 열의 각 A 열 항목에 대해 일치하는 항목을 찾는 인덱스 일치 함수를 작성하십시오.
=INDEX($C$1:$C$10,MATCH(A2,$C$1:$C$10,0),1)
이미지 2는 이 단계의 결과를 보여줍니다.
이제 NA 값에 인접하지 않도록 B 열을 잘라내어 붙여넣습니다. 이 예에서는 아래에 있는 두 개의 셀입니다. 그런 다음 A열과 보조 열을 잘라내어 B열과 일치하도록 붙여넣습니다. 아래 이미지를 참조하세요:
완료될 때까지 이 단계를 반복합니다. B열부터 시작하여 A열과 INDEX 열(보조 열)을 일치시키는 것을 기억하세요. 마지막으로 INDEX 열을 제거하면 완료됩니다.
답변4
실제로 요구하는 것은 두 열을 별도의 테이블로 처리하는 완전 외부 조인입니다.
내가 아는 한, 파워 쿼리 플러그인을 사용해도 기본 Excel에서는 이것이 불가능합니다.
너~할 수 있다결과를 달성하다만약에더 긴 테이블은 더 짧은 테이블의 모든 항목을 포함하지만 예제에서는 그렇지 않다는 것을 보여줍니다.
당신이 할 수 있는 일은 두 개의 열을 추가한 다음 중복 제거하는 것입니다. 이는 충분히 쉽습니다. 원본 데이터에 동일한 이름의 복사본이 몇 개나 존재했는지 확인할 수 있도록 개수 열을 추가할 수도 있습니다. 그렇게 하고 싶다면 알려주세요.
업데이트: 예상한 대로 Microsoft Access를 사용하여 이 작업을 수행할 수 있습니다. 이렇게 하려면 먼저 두 열을 별도의 테이블로 구성해야 합니다. 그런 다음 테이블 사이에 왼쪽 외부 조인과 오른쪽 외부 조인이라는 두 개의 조인을 만들어야 합니다. 이러한 관계를 만든 후에는 간단한 쿼리를 수행하여 각 테이블에서 단일 열을 선택할 수 있습니다. 그게 다야.
원할 경우 원본 데이터를 Excel에 그대로 두고 두 열을 별도의 테이블로 분할하기만 하면 데이터에 연결할 수 있습니다.