根据列名包含空白单元格将一个excel的数据复制并粘贴到另一个excel

问题描述:

我只是想根据列名将数据从一个excel拉到另一个excel。源excel名称是“iTerm Export.xls”。工作表名称是“导出(1)”。列标题是“资产”。所以当运行下面的宏资产列数据必须复制并粘贴到另一个Excel中(即“iTerm指标Report.xlsx”)根据列名包含空白单元格将一个excel的数据复制并粘贴到另一个excel

但是我的问题是资产列中任何地方有空白单元格,例如:资产列中有50个数据行。但25日和30日是空白单元格。当我运行宏一旦24行复制并粘贴在其​​他Excel中。但我需要所有五十行必须复制和粘贴包括空白行在其他excel

Windows("iTerm Export.xls").Activate 
Sheets("export(1)").Select 
Cells.Find(What:="Asset", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
False, SearchFormat:=False).Activate 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Windows("iTerm metrics Report.xlsx").Activate 
Sheets("Raw Data from iTerm").Select 
Range("A2").Select 
ActiveSheet.Paste 

请帮我对此。

谢谢

它停在一片空白,因为那是xlDown选择所做的。 我会建议选择整个列。

Columns(4).Select 

Columns("D:D").Select 

,或者获得具有活动单元格

Columns(ActiveCell.Column).Select 
+0

对不起all..i尝试上述三个scnario ...但它不是我的问题...匹配 – 2012-03-30 09:28:32

为了让您的列的最后行的列,你可以这样做,而不是:

lastRow = Selection.EntireColumn.Find(What:="*", after:=Range("A1"), _ 
     LookIn:=xlFormulas, SearchOrder:=xlByRows, _ 
     SearchDirection:=xlPrevious).EntireRow.Row 'Use EntireRow to take hidden rows too 

然后您可以:

Range(Selection, Cells(lastRow, Selection.Column)).Select 

了Arul

我不会建议你使用.Select,因为它是错误的一个主要原因。看到这个线程例如

Run Time Error '1004': Select method of Range Class failed VBA 2003

话虽如此,我会建议直接执行您想要,而不是做一个.Select第一动作。另外你如何打开工作簿“iTerm Export.xls”和“iTerm指标Report.xlsx”?如果在运行宏时它们已经打开,那么可以使用.Activate否则设置工作簿变量,然后打开工作簿。这种方式你也可以避免使用.Activate。让我知道如果是这样,我会提供一个样本。

.Select.Activate的另一个缺点是它大幅降低了代码速度。

你上面的代码也可以写成如下。这是使用.Find而不是直接使用.Activate的正确方法。如果找不到匹配项,代码的原因将在下面的行中崩溃。

Cells.Find(What:="Asset", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= False, _ SearchFormat:=False).Activate

因此最好是检查的价值被发现,然后继续。

试试这个代码,看看这是你想要的?(UNTESTED

Sub Sample() 
    Dim aCell As Range 

    Windows("iTerm Export.xls").Activate 

    With Sheets("export(1)") 
     Set aCell = .Cells.Find(What:="Asset", LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False) 

     '~~> Check if "Asset is found 
     If Not aCell Is Nothing Then 
      '~~> get the lastrow of the column which has "Asset" 
      lastRow = .Range(Split(Cells(, aCell.Column).Address, "$")(1) & _ 
      .Rows.Count).End(xlUp).Row 

      Windows("iTerm metrics Report.xlsx").Activate 

      .Range(_ 
      Split(Cells(, aCell.Column).Address, "$")(1) & aCell.Row & _ 
      ":" & _ 
      Split(Cells(, aCell.Column).Address, "$")(1) & lastRow _ 
      ).Copy _ 
      Sheets("Raw Data from iTerm").Range("A2") 
     Else 
      MsgBox "Asset not found" 
     End If 
    End With 
End Sub 

HTH

希德