VBA解决scheme“堆叠”列

以下是我正在使用的表格的一小部分。

从左边写我需要知道我怎么能整个第二列附加到第一个。 所以,从第二列的V5789开始,下面的所有内容都需要放在V854的第一列之后。 第三列需要“堆叠”到第二列的底部。 所以2加1,3加2,4加3。

任何线索?

在这里输入图像说明

尝试这个:

Sub DoooooooooIT() Dim col As Range, _ found As Range Dim currRow As Integer currRow = ActiveSheet.Range("A:A").Find("", after:=ActiveSheet.Range("A1"), lookat:=xlWhole, searchdirection:=xlNext).Row For Each col In ActiveSheet.UsedRange.Columns If col.Column <> 1 Then Set found = col.EntireColumn.Find("", after:=col.Cells(1, 1), lookat:=xlWhole, searchdirection:=xlNext) Set found = ActiveSheet.Range(col.Cells(1, 1), found) found.Copy ActiveSheet.Cells(currRow, 1).PasteSpecial currRow = currRow + found.Cells.Count - 1 End If Next col End Sub 

为什么select这个呢? 只有2个调用工作表和一个循环。

 Sub append() Dim g, newArray Dim strJoin As String Dim x As Integer g = Sheet1.Cells(1, 1).CurrentRegion.Value For x = 1 To UBound(g, 2) strJoin = strJoin & Replace(Join(Application.Transpose(Application.Index(g, 0, x)), "~/"), "/~", "") If Right(strJoin, 2) <> "~/" And x <> UBound(g, 2) Then strJoin = strJoin & "~/" Next x newArray = Split(strJoin, "~/") Columns(1).Cells(1).Resize(UBound(newArray) + 1).Value = Application.Transpose(newArray) End Sub 

我将通过使用2 for循环来解决这个问题:外循环将在2开始你的计数variables,然后迭代1步。这是遍历你的列。

在那个循环中,有一个嵌套的for循环遍历唯一列的每一行。 它将从第一行开始迭代,然后检查每个循环,如果外部循环的列和内部循环的行给出的位置处的单元格有任何内容(所以检查cell.value =“”)。 一旦find该列中的第一个空单元格,将其从第3行复制到外循环列中的行计数variables,并将其粘贴到第3行的前一列中。

我已经提供了伪代码而不是实际的代码,因为我不相信这样写就太难了,我现在没有时间去做,所以你可能会比我更早做到这一点也是一个机会。 但是,如果您需要进一步的帮助,请让我知道,当我有机会时,我可以为您编写一些代码。

编辑:忘了添加,确保包含一些东西来处理第二列数据需要进入第一列的独特位置。 可能最好,如果你只是包括“如果PasteToColumn = 1然后粘贴到单元格A9”或类似的东西

再次编辑 :这是我的新的和改进的版本! 让我知道你的想法/如果它的工作

 Sub MoveStuff() Dim rowcounter As Integer Dim columncounter As Integer rowcounter = 1 columncounter = 2 Do While Cells(rowcounter, columncounter).Value <> "" Do While Cells(rowcounter, columncounter).Value <> "" rowcounter = rowcounter + 1 Loop Range(Cells(3, columncounter), Cells(rowcounter - 1, columncounter)).Cut (Columns(columncounter - 1).End(xlDown).Offset(rowoffset:=1)) columncounter = columncounter + 1 rowcounter = 1 Loop End Sub