2012-03-29 3 views
0

カラム名に基づいて別のエクセルにデータをプルしようとしています。ソースエクセル名は "iTerm Export.xls"です。シート名は "export(1)"です。列見出しは「資産」です。 ( "iTerm metrics Report.xlsx")データをコピーして貼り付け、カラム名に基づいて別のエクセルにエクセルを作成するブランクセルを含める

しかし、資産の列のどこに空白のセルがある場合、私の問題は、以下のマクロアセット列データを実行するとコピーして別のExcelに貼り付ける必要があります。資産列には50行のデータ行があります。しかし、25番と30番は空セルです。私はマクロを一度24行コピーし、別のExcelに貼り付けるときに実行します。しかし、私はすべての50行を必要とするコピーアンドペーストにする必要があり、この上で私を助けてください

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 

エクセル他に空白行が含まれています。

おかげ

答えて

0

のthats xlDownの選択が何ので、それは空白で停止します。 私は列全体を選択することをお勧めします。

Columns(4).Select 

または

Columns("D:D").Select 

や、あなたの列の最後の行を取得するには、アクティブセル

Columns(ActiveCell.Column).Select 
+0

申し訳ありませんall..iは3 scnario上で試してみました...しかし、その私の質問と一致していません... –

1

を持つ列を取得するために、あなたの代わりにこれを行うことができます:

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 
3

Arul

私はそれがエラーの主な原因であるとして、あなたが.Selectを使用することを示唆しています。

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

に、たとえば、このスレッドを参照してください、私は直接あなたが望むアクションを実行するのではなく最初の.Selectを行うことをお勧めだろうと述べました。また、 "iTerm Export.xls"と "iTerm metrics Report.xlsx"というワークブックをどのように開いていますか?マクロを実行しているときにマクロが既に開かれている場合は、.Activateを使用して、ブックの変数を設定してブックを開くこともできます。あなたは.Activateも同様に使用しないでください。これが当てはまる場合はお知らせください。サンプルを提供します。

.Select.Activateのもう一つの欠点は、コードが大幅に遅くなることです。

あなたの上記のコードは、以下のように書くこともできます。これは、.Activateを直接使用するのではなく、.Findを使用する正しい方法です。一致するものが見つからない場合、コードが存在する理由は、次の行でクラッシュします。

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

は、したがって、価値が見つかったかどうかを確認してから続行することをお勧めします。

このコードを試してみてください。(未テスト)シド

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

関連する問題