
编辑:我可以看到我的帖子有多么令人困惑,对我来说很难描述我想要做的事情。
我希望转置的最终结果看起来像屏幕截图中的一样。问题是为什么我得到6列,而我只想要5列。列D:H中的值应该是开始和结束。但是相反,它们被移到了右边,C列有我不想要的值。以及为什么第二行似乎被下移的问题。
更多细节:每组5个单元格中的第一个值是一个序列号。单元格的下一步是测量。我需要这些5人一组保持原来的顺序。但现在,这些组正在从高序列号到低序列号,而我需要的是相反的情况。
原始帖子:我试图让每5行转置为他们自己的5列中的单行,但在相反的情况下,并保持降序。列A中每5行中的第一行是一个序列号,您可以看到这些数字是递减的。我需要将5行放在一起,但要颠倒序列号。
我很接近,但是列D中的值是连续的序列号,它们应该在列C中,而列C中的值似乎是一组5行中的最后一个值。谁能帮帮我。
My code:
Dim bottomB As Integer
bottomB = Range("A" & Rows.Count).End(xlUp).Row
Dim TR As Long
For TR = bottomB To 2 Step -5
Range(Cells(TR, "A"), Cells(TR + 5, "A")).Copy
Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
Next TR发布于 2020-12-12 09:56:46
我现在已经修改了你的代码来做我认为你想要做的事情。主要区别在于要复制的范围的定义。当然,如果从第1行开始并添加5,则会在第6行结束,这是下一组的开始,而不是当前组的结束。因此,正确的公式是将范围定义为第1行到第1+4行。如果从最后一行开始,并在其下面添加4个单元格,则该区域中将只有一个值,因为最后一行下面的所有单元格都是空的。因此,您必须从上一个单元格上方4个单元格开始。
' 139
Dim bottomB As Integer
Dim TR As Long
bottomB = Range("A" & Rows.Count).End(xlUp).Row - 4
For TR = bottomB To 2 Step -5
Range(Cells(TR, "A"), Cells(TR + 4, "A")).Copy
Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
Next TR我认为我的调整解决了你一直抱怨的错误。但是,我指出,代码过度依赖于列中的最后一行作为集合的第四个度量。在这一点上的任何偏差都会导致整个操作失败。
请考虑在循环之前添加Application.ScreenUpdating = False,然后再次将该属性设置为True。这将大大加快操作速度,并在数据快速更改时避免屏幕上的任何闪烁。
完成所有这些之后,你的代码看起来应该是这样的:
Sub TransposeRows_2()
' 139
Dim bottomB As Long
Dim TR As Long
bottomB = Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For TR = (bottomB - 4) To 2 Step -5
Range(Cells(TR, "A"), Cells(TR + 4, "A")).Copy
Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
Next TR
With Application
.ScreenUpdating = True
.CutCopyMode = False
End With
End Sub发布于 2020-12-12 09:54:06
Dim bottomB As Integer, b,c,d,i,j
Dim a as Collection
Dim TR As Long
Set a = New collection
bottomB = Range("A" & Rows.Count).End(xlUp).Row
' Put the data in a collection
For TR = bottomB To 2 Step -5
b=Range(Cells(TR, 1).Value
a.Add b.value
Next TR
Calculate 1/5th of total items in collection
c=Round((a.count)/5)
d=0
' You'll have to specify the start positions you want to paste
For i= Row1 to Row1+c
For j= Column1 to Column5
' Paste collection into cells
Worksheets("").Cells(i,j).Value=a(d)
d=d+1
Next i
Next jhttps://stackoverflow.com/questions/65260470
复制相似问题