2017-03-02 49 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

好吧,我想从左到右的值的划分可以通过将列转移到行来管理。你知道更优雅的方式吗? –