目前我有一个数据组的4000行与数据如下布置:VBA移调数据集(指南)
它需要在格式是这样的:
我现在忽略了日期字段或X,Y,Z字段,只是想专注于行。我是VBA新手,请耐心等待我的解释。
我对此的理解是,我应该使用一个变体来将数据存储为一维数组,然后通过for循环遍历它。
这是我的代码试图做的(虽然笨拙地):
Sub TransposeData()
Dim Last As Variant
Application.ScreenUpdating = False
prevCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
Last = Cells(Rows.Count, "L").End(xlUp).Row
'Go to the very bottom of row L and get the count
'For i = row Count - 1 from this and check what the value of L is
'If the value of L is greater than 0 Then ...
For i = Last To 1 Step -1
If (Cells(i, "L").Value) > 0 Then
range("D" & i & ":L" & i).Copy
Sheets("test").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("CVM").Select
End If
Next i
Application.Calculation = prevCalcMode
Application.ScreenUpdating = True
End Sub
但是我停留在我的设置“范围”变量,我不知道如何使它具体到每一个迭代。即范围(我,L)这不会明显工作,但我似乎无法想到另一种方式。
请你指点我正确的方向?我的确看过其他几个VBA的问题,但我不能将相同的方法应用于我的问题。 (Transpose a range in VBA)
谢谢!编辑:我现在有我的宏开始工作(耶!),但循环不断覆盖数据。有没有办法检查数据上次粘贴的位置,并确保粘贴到列的下一个空白部分?
一个问题是,你的'范围(“d&I :L&i“)。Copy'将使用范围D&i:L&i。它需要的是'range(“D”&i&“:L”&i).Copy' –
我刚刚意识到这一点,因为它是作为一个“字符串”而不是正确的形式。谢谢!我现在改变了这个! – azurekirby
您需要迭代您的粘贴位置,目前您只需粘贴“测试”表单的选择即可。我已经在 –