Excel을 사용하여 한 행을 여러 행으로 나누는 방법은 무엇입니까?


9

Excel에는 수백 개의 항목이있는 제품 데이터베이스가 있으며 각 항목에는 1 ~ 3 개의 "계층"가격이 표준, 디럭스 및 프리미엄이 있습니다. 각 계층에는 자체 SKU (기본 SKU의 끝에 추가 된 A, B 또는 C)와 가격이 있습니다. 내 데이터는 다음과 같습니다

Name, Description, Price A, Price B, Price C, SKU A, SKU B, SKU C
name1,      desc1,   14.95,   19.95,        , sku1A, sku1B, 
name2,      desc2,    4.95,    9.95,   12.95, sku2A, sku2B, sku2C
name3,      desc3,   49.95,        ,        , sku3A,      ,

다음과 같이 데이터를 얻는 방법은 무엇입니까?

Name, Description,   SKU, Price
name1,      desc1, sku1A, 14.95
name1,      desc1, sku1B, 19.95
name2,      desc2, sku2A,  4.95
name2,      desc2, sku2B,  9.95
name2,      desc2, sku2C, 12.95
name3,      desc3, sku3A, 49.95

도움이된다면이 제품을 Magento 설치로 가져올 것입니다.

미리 감사드립니다.


유사한 이름과 설명이 여러 개있을 가능성이 있습니까? 예 : 두 선이 name1desc1있지만, 등 가격 A, 가격 B, 가격 C, 서로 다른 가격
제리

원래 데이터에서? 아니요, 나는 그들이 독특하다고 확신합니다. 그러나 새로운 데이터에는 분명히 반복 될 것입니다.
GreysonD 2009 년

좋아, 마음에 뭔가가 있었지만 일부 결과를 수정하기 위해 더 많은 조작이 없으면 작동하지 않는 것으로 나타났습니다. 궁금한 점이 있다면 Consolidated PivotTable을 사용하려고했지만 Index / match / vlookup을 사용하여 Description 필드와 SKU 필드를 별도로 가져와야하므로 결국에는 시간이 상당히 길어집니다.
Jerry

답변:


8

이러한 작업은 일반적으로 VBA에서 더 빠릅니다. 실제로 설정하는 데 ~ 10 분이 걸렸습니다.
귀하의 데이터가 A 열에서 H 열에 있다고 가정합니다.

이동 Excel » Developer » Visual Basic»왼쪽 창 sheet1에서 데이터가있는 시트를 엽니 다 (또는) 오른쪽 창에 코드 삽입»코드 실행

VBA 코드

1 |Sub NewLayout()
2 |    For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
3 |        For j = 0 To 2
4 |        If Cells(i, 3 + j) <> vbNullString Then
5 |            intCount = intCount + 1
6 |            Cells(i, 1).Copy Destination:=Cells(intCount, 10)
7 |            Cells(i, 2).Copy Destination:=Cells(intCount, 11)
8 |            Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
9 |            Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
10|        End If
11|        Next j
12|    Next i
13|End Sub

설명

코드를 더 잘 설명하기 위해 가능한 한 짧게 유지하는 것이 나의 의도였다. 기본적으로 우리는 두 개의 루프를 사용합니다. 외부 루프 ( i)는 행을위한 것이고 내부 루프 ( j)는 가격 열을위한 것입니다.

cells(rowNumber,columnNumber)셀을 읽고 쓰는 데 많이 사용 합니다.

  • 라인 2 | 행 2에서 마지막 행까지 루프를 시작하십시오. 사용 된 모든 행을 반복합니다.

  • 라인 3 | 0에서 2까지 두 번째 루프를 시작하십시오 (실제로 가격 열마다 하나씩 3 개의 루프 임)

  • 라인 4 | 이 내부 루프를 사용하여 현재 행과 열 가격 A, 가격 B 및 마지막 루프 가격 C에서 값을 확인합니다. 가격 열에서 값을 찾으면 셀을 복사합니다. 가격이 입력되지 않으면 아무것도하지 않고 다음 가격 열로 넘어갑니다.

  • 라인 5 | 카운터를 세어 이미 복사 한 행
    수를 알기 때문에 현재 행을 복사 할 수있는 행을 알 수 있습니다.

  • 라인 6 | 이름 열을 복사

  • 줄 7 | 설명 열을 복사하십시오.

  • 라인 8 | 현재 내부 루프에 따라 가격 A 또는 B 또는 C 열을 복사하십시오.

  • 라인 9 | 현재 내부 루프에 따라 SKU A 또는 B 또는 C 열을 복사하십시오.

결과 스크린 샷

여기에 이미지 설명을 입력하십시오


1
이건 끝내줘! 정확히 내가 필요한 것. 내 데이터는 실제로 내 예제보다 조금 더 복잡하며 VBA를 처음 사용하므로 설명이 크게 도움이됩니다. 감사!
GreysonD

2

다음은 워크 시트 함수 솔루션입니다. 수식은 약간 조밀하므로 경고가 있지만 원하는 것을 얻을 수 있습니다.

단계 :

  1. 새 표의 첫 번째 행에서 아래 NameName데이터 의 첫 번째 에 대한 직접 참조를 입력하십시오 . 예를 들어, =A2A2는 데이터에 나열된 첫 번째 이름입니다. 아래에 제공된 스크린 샷 예에서이 수식은입니다 A8. 다음의 모든 수식은 스크린 샷에 사용 된 레이아웃을 따릅니다. 물론 시트와 일치하도록 모든 범위 참조를 업데이트해야합니다.
  2. 아래의 셀에 다음 공식을 입력하십시오.
    = IF (COUNTIF ($ A $ 9 : A9, A9) = COUNTA (OFFSET ($ C $ 1 : $ E $ 1, MATCH (A9, $ A $ 2 : $ A $ 5,0), 0)), INDEX ($ A $ 2 : $ A $ 5, 매치 (A9, $ A $ 2 : $ A $ 5,0) +1), A9)
    
    이것은 기본적으로 위에 나열된 이름에 몇 개의 행이 있는지 확인하고 (in A9) 새 테이블에 이미있는 행 수가이 행과 일치하면 다음 이름으로 이동합니다. 그렇지 않으면 위의 이름에 대한 다른 행이 추가됩니다.
    이름 대신 0을 반환 할 때까지이 수식을 필요한만큼 채 웁니다.
  3. 아래 첫 번째 행에 Description다음 공식을 입력하고 작성하십시오.
    = 인덱스 ($ B $ 2 : $ B $ 5, MATCH (A9, $ A $ 2 : $ A $ 5,0))
  4. 의 첫 번째 행에서 SKU다음 수식을 수식 입력 줄에 붙여넣고 Ctrl+ Shift+를 누릅니다 Enter.
    = 인덱스 (OFFSET ($ A $ 1 : $ H $ 1, MATCH (A9, $ A $ 2 : $ A $ 5,0), 0)), SMALL (IF (OFFSET ($ F $ 1 : $ H $ 1, MATCH (A9, $) A $ 2 : $ A $ 5,0), 0) <> "", COLUMN ($ F $ 1 : $ H $ 1)), COUNTIF ($ A $ 9 : $ A9, $ A9)))
    이것은 배열 수식입니다. 올바르게 입력하면 수식이 중괄호로 묶인 수식 표시 줄에 나타납니다. 이 수식을 표에 적으십시오 (각 인스턴스는 중괄호 안에 표시되어야합니다).
  5. 마찬가지로의 첫 번째 행에서 Price다음 수식을 수식 입력 줄에 붙여넣고 Ctrl+ Shift+ 를 눌러 배열 수식으로 입력합니다 Enter.
    = 인덱스 (OFFSET ($ A $ 1 : $ H $ 1, MATCH ($ A9, $ A $ 2 : $ A $ 5,0), 0), SMALL (IF (OFFSET ($ C $ 1 : $ E $ 1, MATCH ($ A9) , $ A $ 2 : $ A $ 5,0), 0) <> "", COLUMN ($ C $ 1 : $ E $ 1)), COUNTIF ($ A $ 9 : $ A9, $ A9)))
    작성하면 테이블이 완성됩니다.

테이블 스크린 샷


인상적인 공식! 이 답변과 VBA 답변 사이에는 거의 모든 것이 설정되어 있습니다. 감사!
GreysonD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.