0

エクセルのマクロを書いています。マクロ ループを正確に 100 回実行したい。最初の反復では、file1.txt という 1 つのファイルを読み取ります。そこからデータをコピーし、データを 1 つのメイン Excel ファイル セル「E4」に貼り付けます。その後、file2.txt という 2 番目のファイルを読み取り、そこからデータをコピーしてから、メインの Excel ファイル セル「H4」にデータを貼り付けます。そのように100回の反復を行う必要があります。

しかし、現在は file1.txt からデータをコピーし、データを「E4」、「H4」、「K4」、「N4」などにそれぞれ (100 回) 貼り付けます。100回の繰り返しの後、file2.txtからデータのコピーを開始し、「E4」、「H4」、「K4」、「N4」に再度貼り付けます... 100回ループした後、file3.txt。

したがって、合計 100x100 のループが作成され、すべての結果が最後のファイルで上書きされます。100 ループだけが必要で、各ファイルの結果は別の列に表示されます。どうやってやるの?下手な英語でごめんなさい。

 Sub copy_files_macro()

 Dim y As Integer
 Dim fname As String
 Dim dirctry As String
 Dim profnum As Integer

Sheets("Start_Page").Select
dirctry = Range("A1").Value
fname = Range("A2").Value

ChDir (dirctry)
  For profnum = 1 To 100
  For y = 1 To 300 Step 3

    Workbooks.OpenText filename:= _
    fname & "file" & profnum & ".txt", Origin:=857, _
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(9, _
    1), Array(29, 1), Array(49, 1), Array(69, 1), Array(89, 1), Array(109, 1), Array(129, 1), _
    Array(149, 1), Array(168, 1), Array(188, 1), Array(209, 1), Array(229, 1), Array(249, 1), _
    Array(269, 1), Array(288, 1))
    TrailingMinusNumbers = True
Range("B3:C123").Select
Selection.Copy
Windows("main_excel_file.xlsx").Activate
Sheets("file_data").Select
Range("D4").Offset(0, y).Select
ActiveSheet.Paste
Windows(fname & "file" & profnum & ".txt").Activate
Application.CutCopyMode = False
ActiveWindow.Close

Next y
Next profnum
ActiveWorkbook.Save
End Sub
4

1 に答える 1

0

余分なループを削除しyて置き換える必要がありますOffset(0,y)Offset(0,1+(profnum-1)*3)

それは次のようになります:

Sub copy_files_macro()

 Dim fname As String
 Dim dirctry As String
 Dim profnum As Integer

  Sheets("Start_Page").Select
  dirctry = Range("A1").Value
  fname = Range("A2").Value

  ChDir (dirctry)
  For profnum = 1 To 100

    Workbooks.OpenText Filename:= _
    fname & "file" & profnum & ".txt", Origin:=857, _
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(9, _
    1), Array(29, 1), Array(49, 1), Array(69, 1), Array(89, 1), Array(109, 1), Array(129, 1), _
    Array(149, 1), Array(168, 1), Array(188, 1), Array(209, 1), Array(229, 1), Array(249, 1), _
    Array(269, 1), Array(288, 1))

    TrailingMinusNumbers = True
    Range("B3:C123").Select
    Selection.Copy
    Windows("main_excel_file.xlsx").Activate
    Sheets("file_data").Select
    Range("D4").Offset(0, 1 + (profnum - 1) * 3).Select
    ActiveSheet.Paste
    Windows(fname & "file" & profnum & ".txt").Activate
    Application.CutCopyMode = False
    ActiveWindow.Close

  Next profnum
  ActiveWorkbook.Save
End Sub
于 2013-09-05T09:07:13.010 に答える