从Excel中的每第四列复制数据
我在表1中有一个包含100多列的原始数据,我需要在表2中每4列复制一次。我尝试了Cell link,只是想知道excel中是否有任何公式可用于此活动 第1页和第2页的屏幕截图,以供参考从Excel中的每第四列复制数据,excel,vba,Excel,Vba,我在表1中有一个包含100多列的原始数据,我需要在表2中每4列复制一次。我尝试了Cell link,只是想知道excel中是否有任何公式可用于此活动 第1页和第2页的屏幕截图,以供参考 非常感谢您在这方面提供的任何帮助。请查看offset。。它适用于行和列 也许可以签出偏移量。。它适用于行和列 你可以用一个公式来计算,它的基本形式是=偏移$C$5,0,第A8列*n-1,但这意味着你必须尽可能地复制它以覆盖整个范围。一个更持久的解决方案是使用VBA。你可以用一个公式来做,它的基本形式是=偏移$C
非常感谢您在这方面提供的任何帮助。请查看offset。。它适用于行和列
也许可以签出偏移量。。它适用于行和列
你可以用一个公式来计算,它的基本形式是=偏移$C$5,0,第A8列*n-1,但这意味着你必须尽可能地复制它以覆盖整个范围。一个更持久的解决方案是使用VBA。你可以用一个公式来做,它的基本形式是=偏移$C$5,0,第A8列*n-1,但这意味着你必须尽可能地复制它以覆盖整个范围。更持久的解决方案是使用VBA。试试:
Option Explicit
Sub test()
Dim LR As Long
Dim LC As Long
Dim LC2 As Long
Dim i As Long
With Worksheets("Sheet1")
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 1 To LC Step 3
LR = .Cells(Rows.Count, i).End(xlUp).Row
LC2 = Sheet2.Cells(1, Sheet2.Columns.Count).End(xlToLeft).Column
If LC2 = 1 And Sheet2.Range("A1").Value = "" Then
.Range(.Cells(1, i), .Cells(LR, i)).Copy
Sheet2.Cells(1, LC2).PasteSpecial Paste:=xlPasteFormulas
Else: .Range(.Cells(1, i), .Cells(LR, i)).Copy
Sheet2.Cells(1, LC2 + 1).PasteSpecial Paste:=xlPasteFormulas
End If
Next i
End With
End Sub
尝试:
行和列都是动态的 这假设两张图纸上的A列都是最后一行所在位置的良好指示器
行和列都是动态的 这假设两张图纸上的A列都是最后一行所在位置的良好指示器
在VBA中,您可以使用for循环在某个预定的列索引范围内迭代,并使用步骤3。A列索引=1,J列索引=10。因此,对于i=1到10,第3步虽然您可能需要某种动态索引,而不是VBA中的硬编码索引,但您可以使用For循环在某个预定的列索引范围内迭代,并使用第3步。A列索引=1,J列索引=10。因此,对于i=1到10第3步,尽管您可能需要某种动态索引,而不是硬编码索引,但这就像宝石一样工作。。。。非常感谢你的帮助。如果我想复制每一个第三栏或第五栏,我需要做什么更改?明白了,我只需要执行步骤3或步骤5。。。。你让我开心。。。再次非常感谢。祝你今天愉快@完全正确。您应该更改步骤号。很高兴帮助您!这就像一块宝石。。。。非常感谢你的帮助。如果我想复制每一个第三栏或第五栏,我需要做什么更改?明白了,我只需要执行步骤3或步骤5。。。。你让我开心。。。再次非常感谢。祝你今天愉快@完全正确。您应该更改步骤号。很高兴帮助您!
Sub Columns()
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
Dim LR As Long, LC As Long, LR2 As Long, Counter As Long, CopyRange As Range
LR = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
LC = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column
LR2 = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Offset(1).Row
Counter = 1
Application.ScreenUpdating = False
For i = 1 To LC Step 3
ws1.Range(ws1.Cells(2, i), ws1.Cells(LR, i)).Copy
ws2.Cells(LR2, Counter).PasteSpecial xlPasteValues
Counter = Counter + 1
Next i
Application.ScreenUpdating = True
End Sub