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
Vba 将特定列复制到其他工作表中,运行宏时会将列向右移动_Vba_Loops_Copy_Paste - Fatal编程技术网

Vba 将特定列复制到其他工作表中,运行宏时会将列向右移动

Vba 将特定列复制到其他工作表中,运行宏时会将列向右移动,vba,loops,copy,paste,Vba,Loops,Copy,Paste,我需要一些帮助,因为我遇到了一个问题,对VBA来说很陌生。我想复制L5-L18中的数据,不包括一些单元格,并将其粘贴到工作表(In)的B列,并创建一个按钮,每次按下该按钮时,将数据从B列、工作表(数据)复制到工作表(In)并向右移动列。就像第一次b栏,下一次c栏…每次我按下按钮。。非常感谢 Sub Macro2() Sheets("Data").Select Range("L5,L6,L7,L8,L9,L10,L13,L14,L15,L16,L17,L18").Select Range

我需要一些帮助,因为我遇到了一个问题,对VBA来说很陌生。我想复制L5-L18中的数据,不包括一些单元格,并将其粘贴到工作表(In)的B列,并创建一个按钮,每次按下该按钮时,将数据从B列、工作表(数据)复制到工作表(In)并向右移动列。就像第一次b栏,下一次c栏…每次我按下按钮。。非常感谢

Sub Macro2()
 Sheets("Data").Select

 Range("L5,L6,L7,L8,L9,L10,L13,L14,L15,L16,L17,L18").Select

 Range("L18").Activate

Selection.Copy

 Sheets("In").Select

 Range("B5").Select

ActiveSheet.Paste

 Range("B5").Offset(0, 1).Select

End Sub

方法A

要插入B列并将所有其他内容向右移动,请尝试以下操作:

Sub offsetCol()
    Dim wksData As Worksheet
    Set wksData = Sheets("Data")

    Dim wksIn As Worksheet
    Set wksIn = Sheets("In")

    Application.CutCopyMode = False
    Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    wksIn.Range("B5:B10").Value = wksData.Range("L5:L10").Value
    wksIn.Range("B11:B16").Value = wksData.Range("L13:L18").Value
End Sub

方法B

查找工作表中的最后一列,并将信息附加到下一列:

Sub offsetCol()
    Dim wksData As Worksheet
    Set wksData = Sheets("Data")

    Dim wksIn As Worksheet
    Set wksIn = Sheets("In")

    Set rLastCell = wksIn.Cells.Find(What:="*", After:=wksIn.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)

    wksIn.Range(Cells(5, rLastCell.Column + 1), Cells(10, rLastCell.Column + 1)).Value = wksData.Range("L5:L10").Value
    wksIn.Range(Cells(11, rLastCell.Column + 1), Cells(16, rLastCell.Column + 1)).Value = wksData.Range("L13:L18").Value
End Sub

方法C

查找第5行的最后一列,并在下一个可用列中添加信息:

Sub offsetCol()
    Dim wksData As Worksheet
    Set wksData = Sheets("Data")

    Dim wksIn As Worksheet
    Set wksIn = Sheets("In")

    Dim rLastCol As Integer
    rLastCol = wksIn.Cells(5, wksIn.Columns.Count).End(xlToLeft).Column + 1

    wksIn.Range(Cells(5, rLastCol), Cells(10, rLastCol)).Value = wksData.Range("L5:L10").Value
    wksIn.Range(Cells(11, rLastCol), Cells(16, rLastCol)).Value = wksData.Range("L13:L18").Value
End Sub
起始数据:


结果(方法C):


问题的一部分-从位置A复制到位置B,不是很清楚,但我猜这就是您需要的。将其置于按钮的宏下:

Sub Macro2()
Dim rng As Range
Sheets("IN").Range("B:B").Insert Shift:=xlToRight
Sheets("Data").Select
Set rng = Range("L5,L6,L7,L8,L9,L10,L13,L14,L15,L16,L17,L18")
rng.Copy Sheets("IN").Range("B:B")

End Sub

Oops没有看到@portland runner已经有了答案。如果对你有用,就用他的答案谢谢你的回答,但我希望我第一次按下按钮时,数据将复制到b列,下一次,新数据将打印到c列。。所以b保持不变,比如导出不同月份的数据,所以我想要一月->二月->三月。。不要让简搬家。。你怎么认为??问候我的朋友。我想波特兰已经为你找到了答案,我不会费心更新我的答案。顺便说一句,Eyershield 21是一种很好的胺=)是的,我找不到贝蒂的昵称,但有一件是我最喜欢的。。到目前为止最好的!!谢谢你的时间…非常感谢你的回答。。。工作完美,但我希望原来的列是稳定的,新的列被转移到右边。。基本上,它将作为每个月的数据。。原来的第一栏是一月。。。。非常感谢。。。你知道我应该修改什么吗?参见编辑,我在底部添加了一个方法来使用最后一个可用列。这就是你要找的吗?我看起来不错,但不知什么原因没有跑步。。当我试着运行它时,它什么也没做。。在您的工作表上,它是否正在运行?如果您的工作表有大量数据,它将找到任何一行的最后一列。请在代码末尾尝试以下操作:
MsgBox(rLastCell.Column)
这将告诉您数据要进入的列号。它是有效的,但我无法理解为什么它从第25列开始,而不是从b开始,然后向右移动。。第一个aproach有点不对劲。。。想象一下,在B中是1月,c->2月,d->3月,然后向右移动。。你认为我们能做到吗????真诚地感谢您抽出时间。。