如何检查跨列的值,然后复制下面一个单元格的内容?

所以我有一个以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 
  1. 您是否使用ddd的自定义数字格式的第7行的实际date? 如果是这样的话,那么你应该使用If weekday(cell.Value) = 2 Then而不是检查MON
  2. 如果你想复制直接在它们下面的单元格的内容,那么你的偏移量应该是1行而不是-1行; 例如cell.Offset(1, 0).Copy