В надежде, кто-то может мне помочь, я работаю над проектом для работы, и я ударил кирпичную стену. Я новичок в кодировании, и через различные испытания и исследования я составил код, который выполняет только часть того, что мне нужно.Копирование данных из определенных столбцов и нескольких строк из нескольких файлов excel в 1 с помощью vba/macro
Принцип прост: у меня есть несколько сотен листов excel, которые я хочу вытащить данные из определенных столбцов в новый лист с заголовками столбцов. Пока мой код тянет первую строку из каждого файла в каталоге, однако мне нужно это, чтобы прочитать все строки до тех пор, пока он не станет пустым, это может сильно различаться, поэтому я не могу использовать стандартный диапазон.
До сих пор это мой код:
Sub LoopThroughFiles()
Dim MyFolder As String
Dim FiletoList As String
Dim NextRow As Long
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Please select a folder"
.Show
.AllowMultiSelect = False
If .SelectedItems.Count = 0 Then
MsgBox "You did not select a folder"
Exit Sub
End If
MyFolder = .SelectedItems(1) & "\"
End With
FiletoList = Dir(MyFolder & "Marking Sheet Ref*.xls")
Range("A1").Value = "Sitting Number"
Range("B1").Value = "Student Name"
Range("C1").Value = "Member Number"
Range("D1").Value = "1"
Range("E1").Value = "2"
Range("F1").Value = "3"
Range("G1").Value = "4"
Range("H1").Value = "5"
Range("I1").Value = "6"
Range("J1").Value = "7"
Range("K1").Value = "8"
Range("L1").Value = "9"
Range("M1").Value = "10"
Range("N1").Value = "11"
Range("O1").Value = "12"
Range("P1").Value = "13"
Range("Q1").Value = "14"
Range("R1").Value = "15"
Range("S1").Value = "16"
Range("T1").Value = "17"
Range("U1").Value = "18"
Range("V1").Value = "Total % Mark"
Range("W1").Value = "Final Grade"
Range("X1").Value = "Moderator % Mark"
Range("Y1").Value = "Moderator Final Grade"
Range("Z1").Value = "Unit Code"
Range("AA1").Value = "Program Code"
Range("AB").Value = "Marker Name"
Range("AC1").Value = "Country"
'Find the next empty row in the list
NextRow = Application.CountA(Range("A:A")) + 1
NextRow = NextRow + 1 ' skip a line
'Do whilst the dir function returns an Excel workbook
Do While FiletoList <> ""
Cells(NextRow, 1).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C1"
Cells(NextRow, 2).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C2"
Cells(NextRow, 3).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C3"
Cells(NextRow, 4).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C5"
Cells(NextRow, 5).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C6"
Cells(NextRow, 6).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C7"
Cells(NextRow, 7).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C8"
Cells(NextRow, 8).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C9"
Cells(NextRow, 9).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C10"
Cells(NextRow, 10).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C11"
Cells(NextRow, 11).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C12"
Cells(NextRow, 12).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C13"
Cells(NextRow, 13).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C14"
Cells(NextRow, 14).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C15"
Cells(NextRow, 15).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C16"
Cells(NextRow, 16).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C17"
Cells(NextRow, 17).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C18"
Cells(NextRow, 18).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C19"
Cells(NextRow, 19).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C20"
Cells(NextRow, 20).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C21"
Cells(NextRow, 21).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C22"
Cells(NextRow, 22).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C23"
Cells(NextRow, 23).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C24"
Cells(NextRow, 24).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C32"
Cells(NextRow, 25).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C33"
Cells(NextRow, 26).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C25"
Cells(NextRow, 27).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C27"
Cells(NextRow, 28).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C30"
Cells(NextRow, 29).Formula = "='" & MyFolder & "[" & FiletoList & "]Marking Sheet'! R11C31"
NextRow = NextRow + 1 'Move to next row
FiletoList = Dir 'Dir returns the next Excel workbook in the folder
Loop
Application.ScreenUpdating = True
End Sub
Это возвращает первую строку (строка 11) каждый первенствовать лист, который я желаю, чтобы скопировать данные, однако может быть 1 строка, или 1000 строк. все эти данные должны быть захвачены, и я не могу понять, что я пропустил. Любая помощь будет принята с благодарностью. Он должен быть специфичным для начала из строки 11, а предоставленные столбцы также специфичны для требований.