2011-10-28 15 views
2

私はVBAをまだ知らないが、自分の仕事を最適化するためにマクロを書く必要がある。 ファイルをループし、各ファイルの同じ列をExcelワークブック(列単位)にコピー/貼り付けるコードを探しています。Excelマクロ:forループファイル

Sub NewMacro() 

For i = 0 To 99 

    Workbooks.OpenText Filename:= _ 
     "C:\User\Folder\file_up000i.txt", _ 
     Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
     xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ 
     Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ 
     TrailingMinusNumbers:=True 
    Range("A3").Select 
    Selection.Copy 
    With ActiveWindow 
     .Top = 6.25 
     .Left = 53.5 
    End With 
    Windows("Book1").Activate 
    With ActiveWindow 
     .Top = 40.75 
     .Left = 13 
    End With 
    Range("B1").Select 
    ActiveSheet.Paste 
    Windows("file_up000i.txt").Activate 
    Range("C26").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Windows("Book1").Activate 
    Range("B2").Select 
    ActiveSheet.Paste 
    Windows("file_up000i.txt").Activate 
    With ActiveWindow 
     .Top = 4 
     .Left = -75.5 
    End With 
    ActiveWindow.Close 

    Next i 

End Sub 

明らかにこれは動作しませんが、私はそれについて移動する方法を誰のアイデアを持っていない:これは私がこれまでのところ(私は「i」のファイル名で置くことを告知)持っているものです。あなたの助けをありがとう!あなたのファイルがfile_up0000.txt命名されていると仮定すると、

+1

のリファクタリングですか?あなたのファイルはすべてゼロ詰め番号で名前が付けられていますか? 10番目のファイル名はfile_up00010.txtかfile_up0010.txtですか? –

+0

Timの質問に加えて、なぜ99個のファイル名でハードコードを探していますか?これらのファイルがすべて存在しないとコードがクラッシュするか、99個以上のファイルがあると不完全になります。 'Dir'を使用して、可変数のファイルの関連する名前を取得することをお勧めします。これは、順序が重要な場合にソートすることができます。 – brettdj

答えて

3

file_up0001.txt ... file_up0099.txtはここに目以降のファイルから貼り付けたコンテンツが行くんマクロ

Sub NewMacro() 
    Dim i As Long 
    Dim shTxt As Worksheet 
    Dim shDest As Worksheet 
    Dim TxtName As String 

    Set shDest = ActiveSheet 
    For i = 0 To 99 
     TxtName = "file_up" & Format(i, "0000") 
     Workbooks.OpenText Filename:= _ 
      "C:\User\Folder\" & TxtName & ".txt", _ 
      Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
      xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ 
      Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ 
      TrailingMinusNumbers:=True 

     Set shTxt = Workbooks(TxtName & ".txt").Worksheets(TxtName) 

     shTxt.[A3].Copy shDest.[B1] 
     shTxt.Range(shTxt.[C26], shTxt.Range("C26").End(xlDown)).Copy shDest.[B2] 
     shTxt.Parent.Close False 
    Next i 

End Sub