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

VBA - Copy and Paste Dynamic Range with Dynamic Start Point

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

我已经创建并 VBA 为一个非常具体的数据集执行此操作,一次复制和粘贴转置 5 个数据点。我想帮助创建一些东西,让我有一个更通用的方法来解决这个问题,我可以输入研究时间点的数量(通常在 3 到 10 之间)和研究参与者的数量(在 10 到 100 之间)并仍然在正确的 sheet 上完成 copy/paste 转置。

下面是我的具体 VBA。我基本上是手动完成的,一直到 B208:212 范围,一直到 Sheet 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 

这样做是为一名研究参与者复制五个数据点,转到我想要的 sheet,然后将转置粘贴到与我的研究参与者对应的行中。我需要为最多 100 名研究参与者执行此操作,每个参与者都在自己的行中从 D2 开始。

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

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”等声明一些变量(或更好,使用常量),但您需要为您的问题添加更多细节,包括 what dtermines where下一个 "paste" 点是。你提到了多张纸,但不清楚这些是如何参与操作的。

例如:

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