我發現了一個宏(由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行
數據開始第2行
每行有9列:
可樂:標識符
COLB冷: x,y,z值(對於項目的頂部)
colE-colG: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對我來說仍然是希臘語,所以我只是不確定在數據建立之後(在創建新工作表之前)還是在數據添加之後更容易做到這一點到新的工作表。 ......哦,對...以及如何去做。 ;) –