주어진 열의 고유 값을 기반으로 한 워크 시트를 여러 개로 분할하는 매크로 (Jerry Beaucaire 제공)를 발견했습니다. 이것은 잘 작동합니다. 그러나 ...VBA 배열 조작
클라이언트는 우리가 필요로하는 형식으로 들어가기 위해 약간의 부드러운 마사지가 필요한 형식이 다른 워크 시트를 제공했습니다.
첫째, 내가 당신에게 JB의 코드 조각 보여주지 : 내가 무엇을 말할 수에서
MyArr = Application.WorksheetFunction.Transpose _
(ws.Columns(iCol).SpecialCells(xlCellTypeConstants))
을 (그리고 내가 아는 그래서 뭐, 총 VB 초보자 해요 .. ??),이 선택한 행에 배열
그리고이 값 웁니다
For Itm = 2 To UBound(MyArr)
...(code removed)
ws.Range("A" & TitleRow & ":A" & LR).EntireRow.Copy _
Sheets(MyArr(Itm) & "").Range("A1")
...(code removed)
Next Itm
...이 복사를 할 것으로 보인다.
괜찮습니다. ... 지금까지 괜찮아.
문제는 프로세스에 단계를 추가해야한다는 것입니다. 설명하기가 까다 롭습니다.
제목 행은 행 1 ... 나와 함께 곰하시기 바랍니다
데이터 행의 시작이
각 행 9 열이 있습니다
콜라 : 식별자
COLB - 감기 : X, Y,
콜 - colG (항목의 상단에 대한), Z 값 (아이템의 밑바닥), X, Y, Z 값
,colH 및 colI : 무시할 수 있습니다.
이 x, y 및 z 값은 3D 모델링 프로그램에서 선을 그리는 데 사용되는 점을 정의하는 데 사용됩니다. 워크 시트의 각 행은 실제로 선을 정의합니다 (시작 지점과 끝 지점 - "상단"과 "하단"). 아쉽게도 우리가받은 데이터 (워크 시트)는 각 행에 대해 두 세트의 데이터를 정의합니다 동일한 시작점을 가지지 만 끝 점이 다릅니다. 다시 말하면 행 3과 4에서 시작하여 열 B-D의 데이터는 두 행에서 동일합니다. 이 행은 5 & 6, 7 & 8 등의 행에 적용됩니다.
데이터 포인터가 필요하기 때문에 E-G 열에서 값을 안전하게 사용할 수 있습니다.
... 그리고 여기가 내가 도움이 필요한 곳입니다. 행 2, 열 B-D의 값으로 시작하려면 새로 만든 워크 시트의 첫 번째 행이 필요합니다. (즉, 끝점을 좌표로 사용할 수 있지만 첫 번째 시작점이 필요합니다.) 나머지는 모두 괜찮습니다. 예를 들어
:
소스 데이터 :
| A | B | C | D | E | F | G | 1 | id | x-top | y-top | z-top | x-bottom | y-bottom | z-bottom | 2 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 | 3 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 | 4 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 | B,C,D same as row 3 5 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 | 6 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 | B,C,D same as row 5
내가 필요한 것 :
| A | B | C | D | E | F | G | 1 | id | x-top | y-top | z-top | x-bottom | y-bottom | z-bottom | 2 | H1 | | | | 101.2 | 0.525 | 54.25 | 3 | H1 | 101.2 | 0.525 | 54.25 | 110.25 | 0.625 | 56.75 | 4 | H1 | 110.25| 0.625 | 56.75 | 121.35 | 2.125 | 62.65 | 5 | H1 | 110.25| 0.625 | 56.75 | 134.85 | 3.725 | 64.125 | 6 | H1 | 134.85| 3.725 | 64.125| 141.25 | 4.225 | 66.75 | 7 | H1 | 134.85| 3.725 | 64.125| 148.85 | 5.355 | 69.85 |
그래서 ... 이렇게하는 가장 좋은 방법은 무엇입니까? 이 작업을 수행하기 위해 기존 매크로를 추가 할 수 있습니까? 그렇다면 배열을 수정하는 것이 더 좋습니까? 복사 루틴을 수정하는 것이 더 낫습니까? ...그리고 어떻게??
미리 도움 주셔서 감사 드리며 수동으로 제안하지 마시기 바랍니다. 구문 분석 할 70,000 개 이상의 행이 있습니다!
자세한 정보가 필요하면 알려주세요.
당신은 당신이 필요로하는 모든이 후 행을 삽입하는 것을 확인 할 수 헤더 행을 선택하고 BD에서 EG로 값을 이동 하시겠습니까? –
"내가 알 수있는 것부터 (그리고 나는 전체 VB 초보자이다. 그래서 나는 무엇을 알 수 있느냐?))"그 줄에 중단 점을 설정하고, 그 배열에 감시를 설정하고, 디버그 모드에서 코드를 단계별로 실행한다. . 그럼 알게 될거야. –
예, Rachel, 헤더 행 다음에 데이터 행을 삽입해야합니다. 그런 다음 행 3 (삽입으로 인해 행 2에서 이동 한 값이있는 첫 번째 데이터 행) 열 B-D는 행 2 (새로운 빈 행) 열 E-G에 복사해야합니다. VB는 여전히 나에게 그리스어이기 때문에 배열을 만들 때, 빌드 한 후 (그러나 새 워크 시트를 만들기 전에) 또는 데이터를 추가 한 후에이 작업을 수행하는 것이 더 쉬운 것인지 확실하지 않습니다. 새 워크 시트에 추가하십시오. ... 오, 맞아 ... 어떻게하는지. ;) –