首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转置行后得到6列而不是5列

转置行后得到6列而不是5列
EN

Stack Overflow用户
提问于 2020-12-12 08:48:14
回答 2查看 72关注 0票数 0

编辑:我可以看到我的帖子有多么令人困惑,对我来说很难描述我想要做的事情。

我希望转置的最终结果看起来像屏幕截图中的一样。问题是为什么我得到6列,而我只想要5列。列D:H中的值应该是开始和结束。但是相反,它们被移到了右边,C列有我不想要的值。以及为什么第二行似乎被下移的问题。

更多细节:每组5个单元格中的第一个值是一个序列号。单元格的下一步是测量。我需要这些5人一组保持原来的顺序。但现在,这些组正在从高序列号到低序列号,而我需要的是相反的情况。

原始帖子:我试图让每5行转置为他们自己的5列中的单行,但在相反的情况下,并保持降序。列A中每5行中的第一行是一个序列号,您可以看到这些数字是递减的。我需要将5行放在一起,但要颠倒序列号。

我很接近,但是列D中的值是连续的序列号,它们应该在列C中,而列C中的值似乎是一组5行中的最后一个值。谁能帮帮我。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-12 09:56:46

我现在已经修改了你的代码来做我认为你想要做的事情。主要区别在于要复制的范围的定义。当然,如果从第1行开始并添加5,则会在第6行结束,这是下一组的开始,而不是当前组的结束。因此,正确的公式是将范围定义为第1行到第1+4行。如果从最后一行开始,并在其下面添加4个单元格,则该区域中将只有一个值,因为最后一行下面的所有单元格都是空的。因此,您必须从上一个单元格上方4个单元格开始。

代码语言:javascript
复制
' 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。这将大大加快操作速度,并在数据快速更改时避免屏幕上的任何闪烁。

完成所有这些之后,你的代码看起来应该是这样的:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-12-12 09:54:06

代码语言:javascript
复制
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 j
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65260470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档