【发布时间】:2015-09-30 08:17:43
【问题描述】:
我有非常具体的情况。如果该行中的列“AD”在单元格“NOK”中标记“x”或“X”,我需要将每一行从 sheet1(ot.2)复制到 sheet2(odch.l.2)。形状必须与数据保持一致。
到目前为止,无论是否存在 x 或 X,我都设法复制了所有形状,而数据取决于是否存在 x 或 X - 但是数据和形状没有粘在一起 - 数据被一个接一个地排序,形状被复制按源表中的位置
我不知道如何继续,我是这方面的新手,我会很感激各种帮助。
如果你需要更多信息,请告诉我,我会一直看这个帖子:-D 谢谢
这是我的代码:
Sub test150929()
Application.ScreenUpdating = False
Dim DestSheet As Worksheet
Dim Destsheet2 As Worksheet
Set DestSheet = Worksheets("odch.l.2")
Set Destsheet2 = Worksheets("ot.2")
Dim sRow As Long 'row index on source worksheet
Dim dRow As Long 'row index on destination worksheet
Dim sCount As Long
Dim Range_to As Integer
Dim Cell As String
Dim oneShape As Shape
Dim myLeft As Single, myTop As Single
sCount = 0
dRow = 16
'DestSheet.Select
'Cell = Range("AM12")
'Range(Cells(15, 1), Cells(Cell, 39)).Select
Destsheet2.Select
Cell = "A15:AM" & Range("AM12")
Range_to = Range("AM12")
For Each oneShape In Destsheet2.Shapes
With oneShape
myLeft = .Left
myTop = .Top
.Copy
End With
With DestSheet
.Paste
With .Shapes(.Shapes.Count)
.Top = myTop
.Left = myLeft
End With
End With
Next oneShape
Destsheet2.Select
For sRow = 1 To Range_to
'use pattern matching to find "X" anywhere in cell
If Cells(sRow, "AD") Like "*X*" Then
sCount = sCount + 1
Cells(sRow, "A").Copy Destination:=DestSheet.Cells(dRow, "A")
Cells(sRow, "B").Copy Destination:=DestSheet.Cells(dRow, "B")
Cells(sRow, "C").Copy Destination:=DestSheet.Cells(dRow, "C")
Cells(sRow, "D").Copy Destination:=DestSheet.Cells(dRow, "D")
Cells(sRow, "E").Copy Destination:=DestSheet.Cells(dRow, "E")
Cells(sRow, "F").Copy Destination:=DestSheet.Cells(dRow, "F")
Cells(sRow, "G").Copy Destination:=DestSheet.Cells(dRow, "G")
Cells(sRow, "H").Copy Destination:=DestSheet.Cells(dRow, "H")
Cells(sRow, "I").Copy Destination:=DestSheet.Cells(dRow, "I")
Cells(sRow, "J").Copy Destination:=DestSheet.Cells(dRow, "J")
Cells(sRow, "K").Copy Destination:=DestSheet.Cells(dRow, "K")
Cells(sRow, "L").Copy Destination:=DestSheet.Cells(dRow, "L")
Cells(sRow, "M").Copy Destination:=DestSheet.Cells(dRow, "M")
Cells(sRow, "N").Copy Destination:=DestSheet.Cells(dRow, "N")
Cells(sRow, "O").Copy Destination:=DestSheet.Cells(dRow, "O")
Cells(sRow, "P").Copy Destination:=DestSheet.Cells(dRow, "P")
Cells(sRow, "Q").Copy Destination:=DestSheet.Cells(dRow, "Q")
Cells(sRow, "R").Copy Destination:=DestSheet.Cells(dRow, "R")
Cells(sRow, "S").Copy Destination:=DestSheet.Cells(dRow, "S")
Cells(sRow, "T").Copy Destination:=DestSheet.Cells(dRow, "T")
Cells(sRow, "U").Copy Destination:=DestSheet.Cells(dRow, "U")
Cells(sRow, "V").Copy Destination:=DestSheet.Cells(dRow, "V")
Cells(sRow, "W").Copy Destination:=DestSheet.Cells(dRow, "W")
Cells(sRow, "X").Copy Destination:=DestSheet.Cells(dRow, "X")
Cells(sRow, "Y").Copy Destination:=DestSheet.Cells(dRow, "Y")
Cells(sRow, "Z").Copy Destination:=DestSheet.Cells(dRow, "Z")
Cells(sRow, "AA").Copy Destination:=DestSheet.Cells(dRow, "AA")
Cells(sRow, "AB").Copy Destination:=DestSheet.Cells(dRow, "AB")
Cells(sRow, "AC").Copy Destination:=DestSheet.Cells(dRow, "AC")
Cells(sRow, "AD").Copy Destination:=DestSheet.Cells(dRow, "AD")
Cells(sRow, "AE").Copy Destination:=DestSheet.Cells(dRow, "AE")
Cells(sRow, "AF").Copy Destination:=DestSheet.Cells(dRow, "AF")
Cells(sRow, "AG").Copy Destination:=DestSheet.Cells(dRow, "AG")
Cells(sRow, "AH").Copy Destination:=DestSheet.Cells(dRow, "AH")
Cells(sRow, "AI").Copy Destination:=DestSheet.Cells(dRow, "AI")
Cells(sRow, "AJ").Copy Destination:=DestSheet.Cells(dRow, "AJ")
Cells(sRow, "AK").Copy Destination:=DestSheet.Cells(dRow, "AK")
Cells(sRow, "AL").Copy Destination:=DestSheet.Cells(dRow, "AL")
Cells(sRow, "AM").Copy Destination:=DestSheet.Cells(dRow, "AM")
End If
If Cells(sRow, "AD") Like "*x*" Then
sCount = sCount + 1
dRow = dRow + 1
'copy cols A,F,E & D
Cells(sRow, "A").Copy Destination:=DestSheet.Cells(dRow, "A")
Cells(sRow, "B").Copy Destination:=DestSheet.Cells(dRow, "B")
Cells(sRow, "C").Copy Destination:=DestSheet.Cells(dRow, "C")
Cells(sRow, "D").Copy Destination:=DestSheet.Cells(dRow, "D")
Cells(sRow, "E").Copy Destination:=DestSheet.Cells(dRow, "E")
Cells(sRow, "F").Copy Destination:=DestSheet.Cells(dRow, "F")
Cells(sRow, "G").Copy Destination:=DestSheet.Cells(dRow, "G")
Cells(sRow, "H").Copy Destination:=DestSheet.Cells(dRow, "H")
Cells(sRow, "I").Copy Destination:=DestSheet.Cells(dRow, "I")
Cells(sRow, "J").Copy Destination:=DestSheet.Cells(dRow, "J")
Cells(sRow, "K").Copy Destination:=DestSheet.Cells(dRow, "K")
Cells(sRow, "L").Copy Destination:=DestSheet.Cells(dRow, "L")
Cells(sRow, "M").Copy Destination:=DestSheet.Cells(dRow, "M")
Cells(sRow, "N").Copy Destination:=DestSheet.Cells(dRow, "N")
Cells(sRow, "O").Copy Destination:=DestSheet.Cells(dRow, "O")
Cells(sRow, "P").Copy Destination:=DestSheet.Cells(dRow, "P")
Cells(sRow, "Q").Copy Destination:=DestSheet.Cells(dRow, "Q")
Cells(sRow, "R").Copy Destination:=DestSheet.Cells(dRow, "R")
Cells(sRow, "S").Copy Destination:=DestSheet.Cells(dRow, "S")
Cells(sRow, "T").Copy Destination:=DestSheet.Cells(dRow, "T")
Cells(sRow, "U").Copy Destination:=DestSheet.Cells(dRow, "U")
Cells(sRow, "V").Copy Destination:=DestSheet.Cells(dRow, "V")
Cells(sRow, "W").Copy Destination:=DestSheet.Cells(dRow, "W")
Cells(sRow, "X").Copy Destination:=DestSheet.Cells(dRow, "X")
Cells(sRow, "Y").Copy Destination:=DestSheet.Cells(dRow, "Y")
Cells(sRow, "Z").Copy Destination:=DestSheet.Cells(dRow, "Z")
Cells(sRow, "AA").Copy Destination:=DestSheet.Cells(dRow, "AA")
Cells(sRow, "AB").Copy Destination:=DestSheet.Cells(dRow, "AB")
Cells(sRow, "AC").Copy Destination:=DestSheet.Cells(dRow, "AC")
Cells(sRow, "AD").Copy Destination:=DestSheet.Cells(dRow, "AD")
Cells(sRow, "AE").Copy Destination:=DestSheet.Cells(dRow, "AE")
Cells(sRow, "AF").Copy Destination:=DestSheet.Cells(dRow, "AF")
Cells(sRow, "AG").Copy Destination:=DestSheet.Cells(dRow, "AG")
Cells(sRow, "AH").Copy Destination:=DestSheet.Cells(dRow, "AH")
Cells(sRow, "AI").Copy Destination:=DestSheet.Cells(dRow, "AI")
Cells(sRow, "AJ").Copy Destination:=DestSheet.Cells(dRow, "AJ")
Cells(sRow, "AK").Copy Destination:=DestSheet.Cells(dRow, "AK")
Cells(sRow, "AL").Copy Destination:=DestSheet.Cells(dRow, "AL")
Cells(sRow, "AM").Copy Destination:=DestSheet.Cells(dRow, "AM")
End If
Next sRow
MsgBox sCount & " Rows Copied", vbInformation, "Transfer Done"
End Sub
【问题讨论】:
-
有没有不使用
Cells(sRow, "A").RESIZE(1, 39).Copy Destination:=DestSheet.Cells(dRow, "A")的原因 -
如果您复制整行,为什么不使用
DestSheet2.Rows(sRow).Copy destination:=DestSheet.Rows(dRow)?顺便说一句,您的代码在 X 情况下没有增加 dRow,您可以考虑 x 和 X 情况。 -
正如我所说的伙计们,我是 vba 新手。感谢您的建议,会尝试并告诉您
-
同意@VincentG - 我的想法是
If LCase(.Cells(sRow, "AD").Value2) Like "*x*" Then。 -
a) 是否可以相信形状的
.Top与行具有相同的.Top? b) 每行是否要复制多个形状?
标签: vba excel conditional-statements excel-2003