【问题标题】:VBA Excel copy-paste from workbook to another workbook transpose values and different rangesVBA Excel从工作簿复制粘贴到另一个工作簿转置值和不同范围
【发布时间】:2019-02-06 04:10:10
【问题描述】:

输入数据始终是 7 个不同工作表中的列,需要在不同的非顺序行中的不同列中输出

Q2_1    Q3_1    Q4_1
13      17      11
4        2       5
3        2       4
2        2       4
6        5       4

行(输出)的顺序是 5, 10, 15, 23, 28, 33, 38, 43, 48, 53, 61, 66, 71, 79, 84, 89, 94, 102, 107, 112、117、122、128、135、140、148、153、158、166、171、179、184、189、194

Q2_1 的列从 i5 到 M5,Q3 的列从 i10 到 M10

我尝试了 2 个 fors 和 2 个 do 循环,但没有成功。有没有办法使用数组?

我非常喜欢编程。

Sub CPRelative()

    Dim n As Integer
    Dim i As Integer
    Dim itotal As Integer

    Windows("book1.xlsx").Activate
    Sheets(3).Select

    For n = 2 To 35
        ActiveSheet.Range(Cells(4, n), Cells(8, n)).Select
        Selection.Copy

        Windows("book2.xlsm").Activate


         For i = 5 To 194

            Select Case i
            Case 5, 10, 15, 23, 28, 33, 38, 43, 48, 53, 61, 66, 71, 79, 84, 89, 94, 102, 107, 112, 117, 122, 128, 135, 140, 148, 153, 158, 166, 171, 179, 184, 189, 194

                ActiveSheet.Range(Cells(i, 9), Cells(i, 13)).Select
               Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
            End Select
        Next n
End Sub

直到和同时做

Sub NestedLoop()
    Dim n As Integer
    Dim i As Integer

    Windows("book1.xlsx").Activate
    Sheets(3).Select

    n = 2
    Do Until ActiveSheet.Range(Cells(4, n), Cells(8, n)).Value = ("8,n")

        ActiveSheet.Range(Cells(4, n), Cells(8, n)).Select
        Selection.Copy

        Windows("book2.xlsm").Activate
        Sheets(1).Select

        'i = 5

        Do While ActiveSheet.Range(Cells(i, 9), Cells(i, 13)).Value = ""
            Select Case i
            Case 5, 10, 15, 23, 28, 33, 38, 43, 48, 53, 61, 66, 71, 79, 84, 89, 94, 102, 107, 112, 117, 122, 128, 135, 140, 148, 153, 158, 166, 171, 179, 184, 189, 194
               ActiveSheet.Range(Cells(i, 9), Cells(i, 13)).Select
               Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
           End Select

           i = i + 1
       Loop
       n = n + 1
    Loop
End Sub

【问题讨论】:

标签: excel vba copy-paste


【解决方案1】:

在屏幕截图之前和之后添加将导致更快的响应和更好的答案。

这是我最喜欢的 VBA Excel 视频系列中的一个视频,您必须观看:Excel VBA Introduction Part 5 - Selecting Cells (Range, Cells, Activecell, End, Offset)

来源

目标

Sub CPRelative2()
    Dim n As Long, r As Long
    Dim arrRows As Variant
    Dim Source As Range, Target As Range
    Set Source = Workbooks("180610_SequencingScenarioTEST1.xlsx").Worksheets("Sheet1").Cells
    Set Target = Workbooks("180610_TestSurveyAnalysisTest1.xlsm").Worksheets("Sheet1").Cells

    arrRows = Array(5, 10, 15, 23, 28, 33, 38, 43, 48, 53, 61, 66, 71, 79, 84, 89, 94, 102, 107, 112, 117, 122, 128, 135, 140, 148, 153, 158, 166, 171, 179, 184, 189, 194)
    For n = 2 To 35
         r = arrRows(n - 2)
        Target.Cells(r, "I").Resize(1, 5).Value = WorksheetFunction.Transpose(Source.Cells(4, n).Resize(5, 1).Value)
    Next

End Sub

【讨论】:

  • 永远感激....这段代码看起来非常适合数组...明天早上我会尝试更新你...你会推荐任何其他资源来学习 VBA 吗?我发现 vba 在 YouTube 中很有趣......我正在寻找结构良好的方法来从小子程序开发到更复杂的子程序......并且展示最实用的对象是类属性等,以及跟踪技巧...... .
  • 还没有尝试过,因为我的笔记本电脑此时不在我身边....但是....目标应该是这样的:i5 j5 k5 l5 m5,数据来自源 B4 B5 B6 B7 B8.... 然后再次从源 c4 c5 c6 c7 C8 复制粘贴到目标 i10 到 M10,
  • 我很高兴听到这个消息。应用编码!
  • 如果你允许我问...数组中的n-2...它定位正确...它是说第5行是零级的起点, ,,不是吗?
  • 是的! arrRows 是一个从零开始的数组。 nn = 2。所以我n - 2 将数组索引同步到n 计数器。
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多