臨時接到一個Excel表,要執行統計工做,手工作法很麻煩,應用VBA稍微熟悉一點。ide
很長時間不作的話就會陌生,寫一點記錄以備後查。
一、在一個模塊中定義結構體,用於記錄數據,通常是針對一行一個結構體。編碼
'定義物料編碼的結構體 Public Type WZStruct WLBM As String '物料編碼 WLZ As String '物料組 WLMS As String '物料描述 DW As String '單位 WLSum2017 As Single '計算統計的和 WLSum2018 As Single '計算統計的和 WLSum2019 As Single '計算統計的和 WL2017 As Integer '統計2017個數 WL2018 As Integer '統計2018個數 WL2019 As Integer '統計2019個數 End Type Public WZYQCY(6639) As WZStruct '6639行數據 二、經常使用的操做記錄: '補全信息 '先搜索2017表 Sheets("2017年消耗").Activate For IFor = 1 To MaxFor DoEvents '1.取列表的物料編碼 WZYQCY(IFor).WLBM = ListBox1.List(IFor) '搜索物料編碼所在的行 Set FindCellOK = Worksheets("2017年消耗").Columns("B").Find(what:=WZYQCY(IFor).WLBM) If Not FindCellOK Is Nothing Then '2.物料組 Range("A" + Trim(Str(FindCellOK.Cells.Row))).Select WZYQCY(IFor).WLZ = Selection.Formula '3.物料描述 Range("C" + Trim(Str(FindCellOK.Cells.Row))).Select WZYQCY(IFor).WLMS = Selection.Formula '4.單位 Range("D" + Trim(Str(FindCellOK.Cells.Row))).Select WZYQCY(IFor).DW = Selection.Formula '5.統計消耗量 'WZYQCY(IFor).WLSum = Application.SumIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM, Sheets("2017年消耗").Range("F2:F4386")) '6.統計個數 'WZYQCY(IFor).WL2017 = Application.CountIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM) End If Next 三、通常能夠錄製宏之後而後修改錄製的編碼,可是VBA裏面略有不一樣。 '插入造成的數據行 Sheets("小修1").Activate For IFor = 1 To MaxFor '插入一個新行 Range("A" + Trim(Str(IFor + 2))).Select Selection.Insert Shift:=xlDown '更新數據 '序號 Range("A" + Trim(Str(IFor + 2))).Select Selection.Formula = Str(IFor) '物料組 Range("B" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WLZ '物料編碼 Range("C" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WLBM '物料描述 Range("D" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WLMS '單位 Range("E" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).DW '2017年數據 Range("G" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WL2017 '2018年數據 Range("H" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WL2018 '2019年數據 Range("I" + Trim(Str(IFor + 2))).Select Selection.Formula = WZYQCY(IFor).WL2019 Next