2017-07-17 6 views
0

ファイルからデータをコピーしてマクロファイルに読み込むこのマクロファイル( "graphPrint.xls")があります。ペーストされたデータを使用してグラフ化します。 これで、4つのファイルからデータを読み込み、すべてのデータをマクロファイルで結合し、すべてのデータを含む1つのグラフを作成できるように、このマクロを変更する必要があります。VBAファイルからデータをコピーし、別のファイルの末尾に貼り付けます

私がやろうとしています何を、

  1. が近い
  2. 、マクロファイルに貼り付け
  3. 、ファイルにデータをコピー
  4. からデータを読み取るために、ファイルを開いていますファイル。そして、私はforループでこのプロセスを繰り返す必要があります。

ここで問題となるのは、マクロファイルに読み込まれたデータを貼り付けるときに、データの最後に貼り付けられていることを確認する必要があるためです。

ファイル名がfile0.csvfile3.csvであるとします。 私はこのマクロを持っている:

Dim readFile As String; 
For i = 0 To 3 
    readFile = "file" + CStr(i) + ".csv" 'get file name 
    WorkbooksOpen Filename:= readFile  'open file 
    ActiveSheet.Cells.Select 'select all data from the file 
    lastRow = Range("A1").End(xlDown).Row 'edited 
    Selection.Copy    'copy all 
    Windows("graphPrint.xls").Activate 'open macro file 

    ActiveSheet.Paste     'paste here in macro file   

    Application.CutCopyMode = False 'cancel the copy mode 
    Windows(readFile).Activate 
    ActiveWindow.Close   'close this file 
Next i 

たびに貼り付けたときただし、このマクロは、新しいものと古いデータに置き換えられ、したがって、示されたグラフは、最後の読み込まれたファイルからのデータを使用します。ファイルの欄には、「Z1」から「A1」から起動するので、私はそれがマクロファイルの末尾に毎回、それを貼り付け、このことだろう期待して、

ActiveSheet.Paste 

Range(Range("A1:Z1" & lastRow), ActiveCell.End(xlDown)).Offset(1,0).PasteSpecial 

を変更します私はすべてのデータをグラフに反映させることができます。しかし、これは

与え

エラー "object'_Worksheetのメソッド '範囲'」失敗しました"。

誰かが私を解決に導くことができますか?ありがとうございました。

+0

どこかで定義された 'lastrow 'を持っていますか? –

+0

はい、上記のコードでその行をスキップしました。私はそれを編集した。それでも私は同じエラーが発生しています。私はちょうどlastRowが65536を得ていることに気づいた。 –

+0

Ok。したがって、データの最後の行がある場合は、単純な方法でそれを使用しないのはなぜですか? ;)Range( "A"&lastrow) 'は、A列の最後のセルを返します。' Range( "A1:Z1"&lastRow) 'で何をしているのか再度確認してください。 –

答えて

0

Find関数を使用して、列 "A:Z"からLastRowを取得してください。

Dim readFile As String 
Dim LastCell As Range 
Dim LastRow As Long 

For i = 0 To 3 
    readFile = "file" + CStr(i) + ".csv" 'get file name 
    Workbooks.Open Filename:=readFile ' open file 

    ' get last row in columns "A:Z" using the Find method 
    Set LastCell = ActiveSheet.Range("A:Z").Find(What:="*", After:=Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _ 
         SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

    If Not LastCell Is Nothing Then 
     LastRow = LastCell.Row ' get last Row with data 
    End If 

    ' Copy >> Paste in 1 line 
    Range("A1:Z" & LastRow).Copy Destination:=Workbooks("graphPrint.xls").ActiveSheet.Range("A1") 

    Application.CutCopyMode = False 'cancel the copy mode 
    Windows(readFile).Activate 
    ActiveWindow.Close   'close this file 
Next i 
+0

@Wang Dangあなたは私の答えとコードを試しましたか?どんなフィードバック? –

関連する問題