VBA - 使用动态起点复制和粘贴动态范围

时间:2015-01-20 21:35:26

标签: excel vba excel-vba

我对VBA社区和用法都很陌生,所以我的文盲有点尴尬。我在一个常规处理非常大的数据输出文件的实验室工作。为了统计分析这些数据文件,我们经常需要将输出数据重新排列为更加统计友好的格式。这就是我的问题所在。

我创建了VBA,为一个非常特定的数据集执行此操作,一次复制和粘贴转置5个数据点。我想帮助创建一些允许我使用更通用的方法,我可以输入研究时间点的数量(通常在3到10之间)和研究参与者的数量(在10到100之间)仍然可以在正确的工作表上完成复制/粘贴转置。

我在特定VBA中的内容如下。我基本上手动完成了一直到B208:212的范围,一直到第13页。

Sheets("Raw Data").Select
Range("B3:B7").Select
Selection.Copy
Sheets("Sheet1").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True 

这样做是为一个研究参与者复制五个数据点,转到我想要的表格,并在与我的研究参与者相对应的行中粘贴转置。我需要为100名学习参与者做这件事,每个参与者都从D2开始。

抱歉这令人困惑。我正在努力在下面发布更多说明。

1 个答案:

答案 0 :(得分:0)

Sheets("Raw Data").Select
Range("B3:B7").Select
Selection.Copy
Sheets("Sheet1").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True 

缩减为

Sheets("Sheet1").Range("D2").Resize(5, 1).Value = _
 Application.Transpose(Sheets("Raw Data").Range("B3").Resize(1, 5).Value)

以此作为起点,您可以为" 5"等声明一些变量(或者更好,使用常量),但是您需要在问题中添加更多细节,包括什么决定下一个"粘贴"重点是。你提到多张纸,但不清楚这些是如何参与手术的。

例如:

Sub Tester()

    Const DATA_PTS As Long = 5

    Dim rngCopy As Range, rngPaste As Range

    'start point for source data
    Set rngCopy = Sheets("Raw Data").Range("B3").Resize(DATA_PTS, 1).Value

    Do While Application.CountA(rngCopy) > 0

        'Set rngPaste = ? 'what determines where data is copied to?

        rngPaste.Resize(1, DATA_PTS).Value = _
           Application.Transpose(rngCopy.Value)

        'next source range
        Set rngCopy = rngCopy.Offset(DATA_PTS, 0)
    Loop

End Sub