在新的工作表中创build一个新表格,其中包含来自其他工作表的最大列值

晚上好,我正在尝试加载csv文件的数量,然后计算列E到最后一列的最大值(每列最后一列可以不同),并将这些值粘贴到新的工作表中。

当我学习VBA的时候,我试图分阶段打破我的观点:

第1步。打开文件夹select对话框的代码,并加载每个文本文件,在具有文件名的不同工作表中打开

第2步。打开新工作表的代码和名称为“结果”

与一些示例数据步骤1和2看起来像这样[图1]:

在这里输入图像说明

最后

第3步。代码find列E的最大值到最后一列,并在工作表名称中粘贴年份编号和高度编号的结果表中,例如,如下所示:

在这里输入图像说明

到目前为止,在这个论坛的帮助下,我已经设法用一个简单的用户窗体创build一个运行button,如下所示:

在这里输入图像说明

我已经完成了第一步和第二步(请参阅下面的代码),但现在真的停留在第三步。

到目前为止的第3步,我已经写了一些东西,可以为E列计算最大值,但是不知道如何计算每个工作表的E列以后的所有列并粘贴到结果表。 我可以使用下面的代码计算col E max,但代码的第5行不会复制到其他列:

Sub SumData() Dim lastrow As Long lastrow = Range("A1").End(xlDown).Row Cells(lastrow + 2, "E").Formula = "=MAX(E2:E" & lastrow & ")" Cells(lastrow + 2, "E").AutoFill , Type:=xlFillDefault End Sub 

我真的很感激任何意见,我的第3步,让你更容易理解我已经复制我的示例CSV文件在下面的下拉框链接: https : //www.dropbox.com/sh/hqhzd901vwlgbl9/AAApxVc_CAsESxR9iZ4cHoOua?dl=0

我为第1步和第2步创build的代码在下面为我工作:

  Private Sub FilePath_Button_Click() get_folder End Sub Private Sub Run_Button_Click() load_file End Sub Public Sub get_folder() Dim FolderName As String With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False .Show On Error Resume Next FolderName = .SelectedItems(1) Err.Clear On Error GoTo 0 End With TextBox1.Text = FolderName End Sub Sub load_file() Dim strFile As String Dim WS As Worksheet Dim test As String Dim wb As Workbook test = TextBox1.Text strFile = Dir(Me.TextBox1.Text & "\*.plt") Set wb = Workbooks.Add 'added workbook becomes the activeworkbook With wb Do While Len(strFile) > 0 Set WS = ActiveWorkbook.Sheets.Add WS.Name = strFile With WS.QueryTables.Add(Connection:= _ "TEXT;" & test & "\" & strFile, Destination:=Range("$A$1")) .Name = strFile .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With strFile = Dir Loop End With Dim WS2 As Worksheet Set WS2 = Sheets.Add Sheets.Add.Name = "Result" MsgBox "Job Complete" End Sub Private Sub UserForm_Click() End Sub 

可能有更简单的编写代码的方法,但是这是我能想到的第1步和第2步中最好的。非常感谢!

如果所有工作表名称都具有相同的格式,即XXX_XXX_XX_XXXX那么提取这些值非常简单。 您可以使用Splitfunction。 这里是一个例子

 Sub Sample() Dim sName(1 To 4) As String Dim i As Long sName(1) = "HP5_1gt_60_2010" sName(2) = "HP5_1gt_70_2010" sName(3) = "HP5_1gt_100_2008" sName(4) = "HP5_1gt_110_2008" For i = 1 To 4 Debug.Print "Height --> " & Split(sName(i), "_")(2) Debug.Print "Year --> " & Split(sName(i), "_")(3) Debug.Print "-----" Next i End Sub 

产量

在这里输入图像说明

要在列中查找最大值,可以在VBA中使用Max工作表函数。 这里是一个例子

 Sub Sample() Dim ws As Worksheet Dim rng As Range Set ws = ThisWorkbook.Sheets("Sheet1") Set rng = ws.Columns(5) Debug.Print Application.WorksheetFunction.Max(rng) End Sub 

产量

在这里输入图像说明