在循环中使用偏移来复制和粘贴

问题描述 投票:0回答:1

我有生物力学数据(即一个人走路),这些数据是通过视频记录收集的,并以3列数据的形式存储在每个帧号中。在同一工作表中的一个单独的数据表中,我有数据告诉我每个生物力学事件发生的excel行号(即脚踩到地面或从地面爬起来)。我试图将存储在一个电子表格中的生物力学数据以行为单位进行转换,使每个步骤都在自己的列中。然而,每个生物力学事件(即每个步骤)的行数是不同的。

生物力学原始数据可以在这里看到。生物力学原始数据

我想让它做的是将单个事件(步骤)复制到第二个工作表中,像这样。所需的生物力学事件输出

相反,代码成功地通过循环运行了每个生物力学事件,但将数据放置在同一个地方,"A4"。这是因为我不知道如何在循环内使用偏移量,并且基于一个变量。当前的生物力学事件输出与不希望的数据叠加。

我目前的代码在这里。

Private Sub CommandButton1_Click()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
Dim LeftStrike As Range, FrameLTD As Range, FrameLTDx As Range
Dim lrL As Long, LastFrame As Long
Dim LeftTD As Variant
Dim LeftTDx As Variant

lrL = ws.Range("H" & ws.Rows.Count).End(xlUp).Row
LastFrame = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Set LeftStrike = ws.Range("H2:H" & lrL)

For Each FrameLTD In LeftStrike
   If InStr(FrameLTD, "Foot Strike") Then
           LeftTD = FrameLTD.Offset(0, 2)
          'COMMENT: Set LeftTDx = LeftTD + 1
         ws.Range("A" & LeftTD, "D" & LastFrame).Copy ws2.Range("A4")

        ' COMMENT: ws.Range("A" & LeftTDx, "D" & LastFrame).Copy ws2.Range("FrameLTD").Offset(0, 5)

    End If
Next FrameLTD
End Sub

我想让程序做的是: 1. 找到字符串 "Foot Strike",并告诉我超过2列的值,并调用它LeftTD(它这样做).2. 从LeftTD的行号值开始,复制A列到D列的单元格,并将其粘贴到一个新的工作表中,从A4开始(它是这样做的).3. 对于下一个 "足击 "和所有剩余的,做步骤1和2中的同样的事情,但然后从之前的复制&粘贴事件中复制具有偏移量(0,5)的单元格(它不会这样做)。4. 这样做,直到H列为空(它确实这样做了)。

我的想法是,如果我把变量声明为 "variant",那么我可以告诉它把下一个LeftTD算作LeftTD+1,然后告诉它把range变量的范围偏移5,就可以了。但如果我取消注释这些行,那么我就会得到一个类型不匹配的错误。另外,有趣的是,如果我按F8键并一步步运行程序,它只在第2次、第5次、第7次和第9次通过程序时复制每个生物力学事件(每一步)。

所以我的具体问题是,如何在循环通过范围变量的For循环内使用变量偏移?

我想过使用.Find和.FindNext,但网络上的资料实在缺乏一个接近我需要做的例子。事实上,寻找同时使用变量行和变量偏移列进行复制和粘贴的信息对我来说也很难找到。任何提供的见解都将非常感激。谢谢!!!!!!!!!!。

excel vba for-loop copy offset
1个回答
1
投票

添加一个计数器来识别目的地

Dim DestCol As Long
'...
DestCol = 1
For Each FrameLTD In LeftStrike
    If InStr(FrameLTD, "Foot Strike") Then
        LeftTD = FrameLTD.Offset(0, 2)
        ws.Range("A" & LeftTD, "D" & LastFrame).Copy ws2.Cells(4, DestCol)
        DestCol = DestCol + 5
    End If
Next FrameLTD
© www.soinside.com 2019 - 2024. All rights reserved.