2017-03-02 78 views
0

我在工作表的一列中有幾個條目(即128),並且希望將它們劃分爲不同工作表上的許多新列。我已經發現了KuTools for Excel的一些代碼,但它並不完全按照我想要的方式工作。 與此代碼:使用VBA將列的條目拆分爲多個其他列

Sub SplitColumn() 
'Updateby20141106 
Dim rng As Range 
Dim InputRng As Range 
Dim OutRng As Range 
Dim xRow As Integer 
Dim xCol As Integer 
Dim xArr As Variant 
xTitleId  = "KutoolsforExcel" 
Set InputRng = Application.Selection 
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type: = 8) 
xRow   = Application.InputBox("Rows :", xTitleId) 
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type: = 8) 
Set InputRng = InputRng.Columns(1) 
xCol   = InputRng.Cells.Count/xRow 
ReDim xArr(1 To xRow, 1 To xCol + 1) 
For i = 0 To InputRng.Cells.Count - 1 
    xValue = InputRng.Cells(i + 1) 
    iRow = i Mod xRow 
    iCol = VBA.Int(i/xRow) 
    xArr(iRow + 1, iCol + 1) = xValue 
Next 
OutRng.Resize(UBound(xArr, 1), UBound(xArr, 2)).Value = xArr 
End Sub 

這基本上是很大的,我可以將列分割成新列的可變的量,這取決於行每列應包括的數量。儘管如此,我還是希望這些值能夠與實際值(即$ A $ 1而不是1)相鏈接,並且2.將被逐列分成新的列。因此,newColumn 1在第一行獲取A1的鏈接,newColumn 2獲得A2的鏈接等等。 我最大的願望是爲了能夠爲每個新列定義行數(即新列1獲得10行,新列2獲得7等),並且這些行仍將被逐行填充。

非常感謝您的幫助! 獅子座

回答

0

你的問題有點矛盾。如果您希望輸出先從左到右工作,則不能有不同長度的列。

這裏是我如何改變主輸出循環來創建一個鏈接,而不是源數據的值。

For i = 0 To InputRng.Cells.Count - 1 
    iRow = i Mod xRow 
    iCol = VBA.Int(i/xRow) 
    xArr(iRow + 1, iCol + 1) = "='" & InputRng.Cells(i + 1).Parent.Name & "'!" & InputRng.Cells(i + 1).Address 
Next 
+0

哇,這很快,它像一個魅力工作!非常感謝。參考我的問題的矛盾部分:最好能夠爲每個新列定義它們應包含多少行,但我想這將需要無限循環和if-then條件。你是否知道如何實現原始列的行到左邊的新行的劃分,而沒有定義的特徵,新列應該包含多少行? –

+0

好吧,我想從左到右的值的劃分可以通過將列轉移到行來管理。你知道更優雅的方式嗎? –