Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Excel中的每第四列复制数据_Excel_Vba - Fatal编程技术网

从Excel中的每第四列复制数据

从Excel中的每第四列复制数据,excel,vba,Excel,Vba,我在表1中有一个包含100多列的原始数据,我需要在表2中每4列复制一次。我尝试了Cell link,只是想知道excel中是否有任何公式可用于此活动 第1页和第2页的屏幕截图,以供参考 非常感谢您在这方面提供的任何帮助。请查看offset。。它适用于行和列 也许可以签出偏移量。。它适用于行和列 你可以用一个公式来计算,它的基本形式是=偏移$C$5,0,第A8列*n-1,但这意味着你必须尽可能地复制它以覆盖整个范围。一个更持久的解决方案是使用VBA。你可以用一个公式来做,它的基本形式是=偏移$C

我在表1中有一个包含100多列的原始数据,我需要在表2中每4列复制一次。我尝试了Cell link,只是想知道excel中是否有任何公式可用于此活动

第1页和第2页的屏幕截图,以供参考


非常感谢您在这方面提供的任何帮助。

请查看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