Vba 从第2页复制到最后一个单元格
好吧,这很难解释,如果我给你看会更好 我正在从第2页-单元格A和B中提取数据 每次行的数量都会不同,所以我尝试将单元格从第一页的预制框复制到第二页的行末尾 假设在第2页,行停在25,我只希望它在第1页复制25倍 下面是它的外观,如果我突出显示框的,然后将鼠标放在右下角,我可以向下拖动它,它会为我复制它。。这就是我想让宏做的 但是,我不知道我的宏使用什么Vba 从第2页复制到最后一个单元格,vba,excel,autofill,Vba,Excel,Autofill,好吧,这很难解释,如果我给你看会更好 我正在从第2页-单元格A和B中提取数据 每次行的数量都会不同,所以我尝试将单元格从第一页的预制框复制到第二页的行末尾 假设在第2页,行停在25,我只希望它在第1页复制25倍 下面是它的外观,如果我突出显示框的,然后将鼠标放在右下角,我可以向下拖动它,它会为我复制它。。这就是我想让宏做的 但是,我不知道我的宏使用什么 Sub Test()' Range("G2:J3").Select Range("J3").Activate Sele
Sub Test()'
Range("G2:J3").Select
Range("J3").Activate
Selection.AutoFill Destination:=Range("G2:J5"), Type:=xlFillDefault
Range("G2:J5").Select
End Sub
好的,从LastCell事件开始,这里你得到了一些关于它的信息: 这并不容易,因为你已经合并了单元格,所以我不得不做一些变通。第一步,我从您的示例中计算工作表
列表中的单元格数。稍后,我将使用“自动填充”根据需要填充尽可能多的单元格—G:I列,并在J列的相同单元格中复制格式。最后一步是从J列复制值
这有点奇怪,但这都要归功于合并的单元格;)
希望它能起作用
Sub counting()
Dim WS As Worksheet
Dim LastCell As Range
Dim LastCellRowNumber As Long
Set WS = Worksheets("List") 'your worksheet name
With WS
Set LastCell = .Cells(.Rows.Count, "A").End(xlUp)
LastCellRowNumber = LastCell.Row
End With
Worksheets("Barcodes").Range(Cells(2, 7), Cells(3, 9)).AutoFill _
Destination:=Range(Cells(5, 7), Cells(6 + (LastCellRowNumber * 2) - 4, 9)), Type:=xlFillDefault 'filling columns from G to I
Worksheets("Barcodes").Range(Cells(2, 10), Cells(3, 10)).AutoFill _
Destination:=Range(Cells(5, 10), Cells(6 + (LastCellRowNumber * 2) - 4, 10)), Type:=xlFillFormats ' filling with format J column
j = 4
k = 5
For i = 6 To LastCellRowNumber 'filling values in column J
Cells(j, 10).Value = "=List!A" & i
Cells(k, 10).Value = "=List!B" & i
j = j + 2
k = k + 2
Next
End Sub
编辑代码版本2:
Sub counting()
Dim WS As Worksheet
Dim LastCell As Range
Dim LastCellRowNumber As Long
Set WS = Worksheets("List") 'your worksheet name
With WS
Set LastCell = .Cells(.Rows.Count, "A").End(xlUp)
LastCellRowNumber = LastCell.Row
End With
Worksheets("Barcodes").Range(Cells(5, 7), Cells(6, 7)).AutoFill _
Destination:=Range(Cells(5, 7), Cells(6 + (LastCellRowNumber * 2) - 4, 7)), Type:=xlFillDefault 'filling column G
Worksheets("Barcodes").Range(Cells(5, 8), Cells(6, 9)).AutoFill _
Destination:=Range(Cells(5, 8), Cells(6 + (LastCellRowNumber * 2) - 4, 9)), Type:=xlFillFormats 'filling with columns H:J
j = 7
k = 8
For i = 3 To LastCellRowNumber 'copying values in columns I, J
Cells(j, 9).Value = "=List!A" & i
Cells(j, 8).Value = Cells(j - 2, 8).Value
Cells(k, 9).Value = "=List!B" & i
Cells(k, 8).Value = Cells(k - 2, 8).Value
j = j + 2
k = k + 2
Next
End Sub
第3版:
Sub auto_copy()
Dim WSL As Worksheet, WSB As Worksheet
Dim first_col As Long, second_col As Long
Dim first_r As Byte, first_c As Byte
Dim second_r As Byte, second_c As Byte
Dim LastCellRowNumber As Long, comeback As String
Dim LastCell As Range, ActiveWS As String
Application.ScreenUpdating = False
ActiveWS = ActiveSheet.Name
Set WSB = Worksheets("Barcodes") 'your worksheet name
Set WSL = Worksheets("List") 'your worksheet name
With WSL
Set LastCell = .Cells(.Rows.Count, "A").End(xlUp)
LastCellRowNumber = LastCell.Row - 3
End With
first_col = Round(LastCellRowNumber / 2)
second_col = LastCellRowNumber - first_col
first_r = 5 'position of "first column" row
first_c = 7 'position of "first column" column
second_c = 11 'position of "first column" column
WSB.Activate
comeback = ActiveCell.Address
For i = 1 To LastCellRowNumber
If Application.IsOdd(i) = True Then
WSB.Range(Cells(first_r, first_c), Cells(first_r + 1, first_c)).Copy
WSB.Range(Cells(first_r + 2, first_c), Cells(first_r + 1 + 2, first_c)).PasteSpecial
WSB.Range(Cells(first_r, first_c + 1), Cells(first_r + 1, first_c + 2)).Copy
WSB.Range(Cells(first_r + 2, first_c + 1), Cells(first_r + 1 + 2, first_c + 2)).PasteSpecial
Else
WSB.Range(Cells(first_r, second_c), Cells(first_r + 1, second_c)).Copy
WSB.Range(Cells(first_r + 2, second_c), Cells(first_r + 1 + 2, second_c)).PasteSpecial
WSB.Range(Cells(first_r, second_c + 1), Cells(first_r + 1, second_c + 2)).Copy
WSB.Range(Cells(first_r + 2, second_c + 1), Cells(first_r + 1 + 2, second_c + 2)).PasteSpecial
first_r = first_r + 2
End If
Next
Range(comeback).Activate
Worksheets(ActiveWS).Activate
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
嗯。。。我很困惑。你想用自动填充填充一定数量的单元格,对吗?如果是这样,则从Selection.Autofill
开始的代码将执行此操作。那么你有什么问题?@lowak我有两页,1)列表-单元格A和B 2)带有条形码(上图),我将数据从2拉到1。我想要一个宏,将复制条形码框(在图片中)下来,直到有没有更多的数据从第1页离开,所以我没有留下任何空白框的?两页纸,你是说床单吗?@lowak是的,对不起,请看我的编辑。所以我还是不知道你有什么问题?是关于从一个表复制到另一个表吗?我得到的错误是:这个操作要求合并单元在代码的中间位是相同大小的:(当你调试哪个部分是黄色的)工作表(“条形码”)。Range(细胞(2, 7),细胞(3, 9))。),键入:=xlFillDefault“将列从G填充到I——我想我知道为什么了。在我发给你的示例模板上,我对它做了一点修改。“条形码”不再在G2中,而是现在在G5中……两件事。1.一列可以容纳多少个条形码?2.如果你有更多的条形码超过一张纸,那会怎样?@Jacko058我试图解决这个问题我有点不一样,你可以试试看。