Excelmacros使用数据自动调整所有行 – 或 – 整个工作表*更新*

****更新为sorting现在工作,只需要如何dynamic自动调整行,而不需要定义行来自动调整。 列与h总是相同的,可以是硬代码***

新手在这里,与有限的VBA。

我有一个当前的项目,虽然我的问题似乎很基本,考虑到我已经准确完成了多less个步骤,我似乎无法自动所有行,没有定义行。

我可以用范围来做,但是每个月报表上的条目数量是不同的。

我的macros要素需要一个报告(名称每月更改,因为它是由另一个应用程序以凌乱的Excel格式导出)并清除它。 稍后,将通过其他方法将其转换为SharePoint数据表列表。

我把所有东西都拼出来,因为我更像是一个工作stream程编写者。 如果有什么我可以清理简化,我也学会去爱。

macros如下:(请原谅格式化错误从试图复制到问题)

Sub ComponentBalRptCleanup() 'Unmerge all Cells in Worksheet ActiveSheet.Cells.UnMerge 'Delete Columns A1 thru D1 Range("A1:D1").EntireColumn.Delete 'Delete Rows A1 thru A9 Range("A1:A9").EntireRow.Delete 'Cut and Paste Cells Range("A2").Cut Range("A1") Range("G1").Cut Range("F1") Range("P1").Cut Range("O1") Range("AA1").Cut Range("Z1") 'Sort by Column A to Remove Extra Rows from View Columns("A:AN").Sort key1:=Range("A:A"), order1:=xlAscending, Header:=xlYes 'Auto Fit Contents in Columns and Rows ActiveCell.Columns("A:AG").EntireColumn.Select ActiveCell.Columns("A:AG").AutoFit ActiveCell.Rows("1:77").EntireRow.Select ActiveCell.Rows("1:77").EntireRow.AutoFit 'Delete Empty Columns Range("B:B, D:D, G:I, K:L, N:N, P:Q, T:V, X:Y, AA:AB, AD:AF").EntireColumn.Delete 'Remove Wrap Text from Cell B1 Range("B1").WrapText = False 'Autofit Contents of Columns Range("A1:AF1").Columns.AutoFit 'Autofit Row A2 Contents Range("A2:A2").Rows.AutoFit 'Save File As Application.GetSaveAsFilename End Sub 

我会说,主要的问题是你的sorting。 在VBA中对可变范围进行sorting非常棘手。 我强烈build议使用命名的范围。 您可以select电子表格的“活动”区域,并使用以下语句为其命名:

 Range("A1").Select Selection.CurrentRegion.Select Selection.Name = "myRange" 

之后,使用myRange而不是静态地址。 这是一个简单的例子:

 Sub NameRangeAndSort() ' Create Named Range and Sort by 1st column Dim TotalRows As Integer Range("A1").Select Selection.CurrentRegion.Select Selection.Name = "myRange" ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A1") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.ActiveSheet.Sort .SetRange Range("myRange") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

您还有一些自动创build报表中的EntireColumn会重复两次。 这应该只包括一次的声明。