如何检查跨列的值,然后复制下面一个单元格的内容?
所以我有一个以D7开始的星期几,并在本月的15天延长到AF7。 我想通过它们中的每一个,然后将第8行正下方的单元格的内容复制到另一个表单中。
我得到运行时错误1004方法范围对象_Global在这一行失败。 我很新的VBA,所以我不完全确定哪里出了问题。
LastCol = Range(Cells(7, Columns.Count)).End(xlUp).Columns
完整代码:
Sub Copy() Dim cell As Range Dim lastRow As Long, i As Long LastCol = Range(Cells(7, Columns.Count)).End(xlUp).Columns i = 4 For Each cell In Sheets(1).Range(LastCol & "D7:7") If cell.Value = "MON" Then cell.Offset(-1, 0).Copy Sheets(2).Cells(1, i) i = i + 1 End If Next End Sub
要获得最后一个,即最右边的一列,首先将MyRow设置为要使用的行:
lastcol= ActiveSheet.Cells(MyRow, Columns.Count).End(xlToLeft).Column
对于最后一行,将MyColumn设置为适当的值后:
lastrow = ActiveSheet.Cells(Rows.Count, MyColumn).End(xlUp).Row
但是你的范围参考也不是很正确。 就个人而言,我没有看到循环中使用范围variables的价值。 你可以试试这个。 (请注意,负偏移量读取上面的行,而不是下面)
Sub Copy() Dim lastRow As Long, i As Long, LocX as long Dim source As Worksheet, dest As Worksheet Set source = Sheets(1) Set dest = Sheets(2) lastcol = source.Cells(7, Columns.Count).End(xlToLeft).Column i = 4 For locX = 4 To lastcol If source.Cells(7, locX).Value = "mon" Then source.Cells(7, locX).Offset(1, 0).Copy dest.Cells(1, i) i = i + 1 End If Next End Sub
您分配给LastCol的名称似乎表明您想要获得列号,但是您正在使用xlUp
而不是xlToLeft
。 此外,您正在要求.Columns
,而不是Column
。
LastCol = Cells(7, Columns.Count).End(xlToLeft).Column
这将返回第7行中最后使用列的列号(例如列F = 6,列AA = 27等)。
with Sheets(1) LastCol = .Cells(7, Columns.Count).End(xlToLeft).Column For Each cell In .cells(7, "D").resize(1, LastCol - 3) If ucase(cell.Value) = "MON" Then cell.Offset(1, 0).Copy destination:=Sheets(2).Cells(1, i) i = i + 1 End If Next end with
- 您是否使用ddd的自定义数字格式的第7行的实际date? 如果是这样的话,那么你应该使用
If weekday(cell.Value) = 2 Then
而不是检查MON 。 - 如果你想复制直接在它们下面的单元格的内容,那么你的偏移量应该是1行而不是-1行; 例如
cell.Offset(1, 0).Copy