根据条件将数据从一个工作表复制到另一个工作表

时间:2014-11-11 19:20:19

标签: excel vba excel-vba

这是我第一次尝试编写宏,花了一周时间搜索解决方案并尝试各种代码 - 我仍然无法解决这个问题。如果有办法发布工作簿,那将是很好的,但我不知道如何做到这一点。

我需要一个宏来复制WEEK1工作表中的数据并粘贴到WEEK2工作表。

当用户选择WEEK2工作表并按下"更新数据"按钮我需要宏来

  1. 转到WEEK1工作表
  2. 取消过滤数据,以便可以复制所有数据(并添加过滤器按钮)
  3. 复制:从第A行第7行开始到第T列 (不需要复制标题/标题行)复制到包含数据的最后一行,除非在T列中记录了日期,然后不需要复制此行
  4. 转到WEEK2并从ROW 7开始粘贴数据
  5. 将所有粘贴的ROWS保持在相同的高度(60.00或80像素)。
  6. 这是我到目前为止的MACRO。它适用于步骤1和步骤1。 2以上。但它继续复制工作表中的所有行,即使任何行中没有数据也是如此。

    根据T列中是否有日期的情况,不知道如何不复制行 - 不要复制,当我粘贴到工作表WEEK2时,行高不会保持不变如果复制了更多行,则复制行,然后是week2 sheet。希望这是有道理的

    这是Macro

    Sub WEEK2UPDATE() 
    
    ' WEEK2UPDATE Macro 
    ' Update by Copying Data from Week 1 and Pasting to Week 2 worksheet 
    
     Sheets("WEEK1").Select 
     Selection.AutoFilter 
     ActiveWindow.SmallScroll Down:=0 
     Selection.AutoFilter 
     ActiveWindow.SmallScroll Down:=24 
     Range("A100").Select 
     Selection.End(xlUp).Select 
     Range("A7:T100").Select 
     Range("A7:T100").Activate 
     Selection.Copy 
     Sheets("WEEK2").Select 
     Range("A7:T100").Select 
     Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
     Application.CutCopyMode = False 
     Sheets("WEEK1").Select 
     ActiveWindow.SmallScroll Down:=-15 
     Range("A2:T2").Select 
     Sheets("WEEK2").Select 
     Range("A2:N2").Select 
    End Sub 
    

2 个答案:

答案 0 :(得分:0)

在#4之后使用此代码删除第2周表中不需要的行,然后将所有粘贴行的行高从7格式化为最大值。如果要保留的行的列T不为空,则需要修改。

lrowEnd = Cells(Rows.Count, "A").End(xlUp).Row ' finds last row on worksheet

For iRow = lrowEnd To 7 Step -1                                     'checks rows from bottom to top
 If Cells(iRow, 20).Value <> "" Then Rows(iRow).Delete Shift:=xlUp  ' checks for a non-blank column T (20th column) to delete
 Next iRow                                                          'continue to next row

lrowEnd = Cells(Rows.Count, "A").End(xlUp).Row ' finds last row on worksheet after deleting
Rng = "7:" & lrowEnd                            'creates a range variable
    Rows(Rng).Select                            'selects the entire range
    Selection.RowHeight = 80                    ' set row height to 80, change this number as needed

答案 1 :(得分:0)

应该使1-4发生,假设过滤器已打开。希望我能正确阅读你正在寻找的东西。

  Sheets("WEEK1").Select 
  Selection.AutoFilter 
  Range("A7:T" & ActiveWorkbook.Activesheet.UsedRows.Count).Select 'select just 
  Selection.Copy                                                   'used rows
  Sheets("WEEK2").Select 
  Range("A7").Select 
  Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
  False, Transpose:=False 
  Application.CutCopyMode = False