【问题标题】:Select defined ranges of rows in column and transpose选择列中定义的行范围并转置
【发布时间】:2015-06-11 15:43:59
【问题描述】:

我需要在循环中选择一个特定列中定义的行范围,然后将每个此块转置为行。

我在 A 列中有数据:

row    A
1      City_1
2      Street_1
3      StreetNo_1
4      State_1
5      City_2
6      Street_2
7      StreetNo_2
8      State_2
9      City_3
10     Street_3
11     StreetNo_3
12     State_3

等等...我需要拿起每个例如这些单元格的“四元数”并将它们转置成行。所以想要的输出应该是这样的:

row    B            C            D                E
1      City_1       Street_1      StreetNo_1       State_1
4      City_2       Street_2      StreetNo_2       State_2
5      City_3       Street_3      StreetNo_3       State_3
9      City_4       Street_4      StreetNo_4       State_4

如何在 Excel VBA 中做到这一点?

【问题讨论】:

  • 这个网站上有几十个优秀的例子。查看右侧下方的相关部分或将问题的标题发送到搜索引擎。

标签: excel vba


【解决方案1】:

或者,您可以简单地在单元格中写入一个简单的公式。

Sub a2bcde()
    ActiveSheet.Range("B1:E" & Int(ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row / 4)).Formula = "=OFFSET($A$1, (ROW(1:1)-1)*4+(COLUMN(A:A)-1), 0)"
End Sub

将公式的值传回单元格或复制、选择性粘贴、值。

【讨论】:

  • 谢谢大家,我可以从 Jeeped 的方法开始。干杯
【解决方案2】:

此函数将值从每四行移动到四列。这正是您所需要的。您将把它放在开发人员选项卡中,在 Visual Basic 中

Sub MoveValues()

    Dim i As Long
    Dim j As Long

    Dim MyRange As Range
    Dim lngLastRow As Long

    Set MyRange = Worksheets("Sheet1").Range("A" & "1")

    lngLastRow = Cells(65536, MyRange.Column).End(xlUp).Row
    j = 1

    For i = 1 To lngLastRow Step 4

        Worksheets("Sheet1").Range(Cells(i, 1), Cells(i + 3, 1)).Copy
        Worksheets("Sheet2").Range("A" & j).PasteSpecial Transpose:=True
        j = j + 1

    Next

End Sub

【讨论】:

  • 请您解释一下它是如何工作的。我是 excel vba 的新手,如果我将这段代码放入 excel vba 模块并将这个宏运行到我的数据范围中,它就会开始调试......
  • @MartinSmith - 说某事是在给出错误,而没有注意到错误消息是什么或调试器指向的行是没有意义的。
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 2015-05-08
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多